0.6.12.3:
[sbcl.git] / CREDITS
1
2       The programmers of old were mysterious and profound.  We
3    cannot fathom their thoughts, so all we do is describe their
4    appearance.
5       Aware, like a fox crossing the water.  Alert, like a general
6    on the battlefield.  Kind, like a hostess greeting her guests.
7       Simple, like uncarved blocks of wood.  Opaque, like black 
8    pools in darkened caves.
9       Who can tell the secrets of their hearts and minds?
10       The answer exists only in the Tao.
11          -- Geoffrey James, "The Tao of Programming"
12
13
14 BROAD OUTLINE
15
16 SBCL is derived from the 18b version of CMU CL.
17
18 Most of CMU CL was originally written as part of the CMU Common Lisp
19 project at Carnegie Mellon University. According to the documentation
20 in CMU CL 18b,
21     Organizationally, CMU Common Lisp was a small, mostly autonomous
22   part within the Mach operating system project. The CMU CL project
23   was more of a tool development effort than a research project.
24   The project started out as Spice Lisp, which provided a modern
25   Lisp implementation for use in the CMU community.
26 and
27   CMU CL has been under continuous development since the early 1980's
28   (concurrent with the Common Lisp standardization effort.) 
29 Apparently most of the CMU Common Lisp implementors moved on to
30 work on the Gwydion environment for Dylan.
31
32 CMU CL's CLOS implementation is derived from the PCL reference
33 implementation written at Xerox PARC.
34
35 CMU CL's implementation of the LOOP macro was derived from code
36 from Symbolics, which was derived from code from MIT.
37
38 CMU CL had many individual author credits in the source files. In the
39 sometimes-extensive rearrangements which were required to make SBCL
40 bootstrap itself cleanly, it was tedious to try keep such credits
41 attached to individual source files, so they have been moved here
42 instead.
43
44 Bill Newman <william.newman@airmail.net> did this transformation, and
45 so any errors made are probably his. Corrections would be appreciated.
46
47
48 MORE DETAILS ON SBCL'S CLOS CODE
49
50 The original headers of the PCL files contained the following text:
51
52 ;;; Any person obtaining a copy of this software is requested to send their
53 ;;; name and post office or electronic mail address to:
54 ;;;   CommonLoops Coordinator
55 ;;;   Xerox PARC
56 ;;;   3333 Coyote Hill Rd.
57 ;;;   Palo Alto, CA 94304
58 ;;; (or send Arpanet mail to CommonLoops-Coordinator.pa@Xerox.arpa)
59 ;;;
60 ;;; Suggestions, comments and requests for improvements are also welcome.
61
62 This was intended for the original incarnation of the PCL code as a
63 portable reference implementation. Since our version of the code has
64 had its portability hacked out of it, it's no longer particularly
65 relevant to any coordinated PCL effort (which probably doesn't exist
66 any more anyway). Therefore, this contact information has been deleted
67 from the PCL file headers.
68
69 A few files in the original CMU CL 18b src/pcl/ directory did not
70 carry such Xerox copyright notices:
71   * Some code was originally written by Douglas T. Crosher for CMU CL:
72     ** the Gray streams implementation
73     ** the implementation of DOCUMENTATION as methods of a generic
74        function
75   * generic-functions.lisp seems to have been machine-generated.
76
77 The comments in the CMU CL 18b version of the PCL code walker,
78 src/pcl/walk.lisp, said in part
79 ;;;   a simple code walker, based IN PART on: (roll the credits)
80 ;;;      Larry Masinter's Masterscope
81 ;;;      Moon's Common Lisp code walker
82 ;;;      Gary Drescher's code walker
83 ;;;      Larry Masinter's simple code walker
84 ;;;      .
85 ;;;      .
86 ;;;      boy, thats fair (I hope).
87
88
89 MORE DETAILS ON SBCL'S LOOP CODE
90
91 The src/code/loop.lisp file from CMU CL 18b had the following
92 credits-related information in it:
93
94 ;;;   The LOOP iteration macro is one of a number of pieces of code
95 ;;;   originally developed at MIT for which free distribution has been
96 ;;;   permitted, as long as the code is not sold for profit, and as long
97 ;;;   as notification of MIT's interest in the code is preserved.
98 ;;;
99 ;;;   This version of LOOP, which is almost entirely rewritten both as
100 ;;;   clean-up and to conform with the ANSI Lisp LOOP standard, started
101 ;;;   life as MIT LOOP version 829 (which was a part of NIL, possibly
102 ;;;   never released).
103 ;;;
104 ;;;   A "light revision" was performed by me (Glenn Burke) while at
105 ;;;   Palladian Software in April 1986, to make the code run in Common
106 ;;;   Lisp. This revision was informally distributed to a number of
107 ;;;   people, and was sort of the "MIT" version of LOOP for running in
108 ;;;   Common Lisp.
109 ;;;
110 ;;;   A later more drastic revision was performed at Palladian perhaps a
111 ;;;   year later. This version was more thoroughly Common Lisp in style,
112 ;;;   with a few miscellaneous internal improvements and extensions. I
113 ;;;   have lost track of this source, apparently never having moved it to
114 ;;;   the MIT distribution point. I do not remember if it was ever
115 ;;;   distributed.
116 ;;;
117 ;;;   The revision for the ANSI standard is based on the code of my April
118 ;;;   1986 version, with almost everything redesigned and/or rewritten.
119
120 The date of the M.I.T. copyright statement falls around the time
121 described in these comments. The dates on the Symbolics copyright
122 statement are all later -- the earliest is 1989.
123
124
125 MORE DETAILS ON OTHER SBCL CODE FROM CMU CL
126
127 CMU CL's symbol (but not package) code (code/symbol.lisp) was
128 originally written by Scott Fahlman and updated and maintained
129 by Skef Wholey.
130
131 The CMU CL reader (code/reader.lisp) was originally the Spice Lisp
132 reader, written by David Dill and with support for packages added by
133 Lee Schumacher. David Dill also wrote the sharpmacro support
134 (code/sharpm.lisp).
135
136 CMU CL's package code was rewritten by Rob MacLachlan based on an
137 earlier version by Lee Schumacher. It also includes DEFPACKAGE by Dan
138 Zigmond, and WITH-PACKAGE-ITERATOR written by Blaine Burks. William
139 Lott also rewrote the DEFPACKAGE and DO-FOO-SYMBOLS stuff.
140
141 CMU CL's string code (code/string.lisp) was originally written by
142 David Dill, then rewritten by Skef Wholey, Bill Chiles, and Rob
143 MacLachlan.
144
145 Various code in the system originated with "Spice Lisp", which was
146 apparently a predecessor to the CMU CL project. Much of that was
147 originally written by Skef Wholey:
148         code/seq.lisp, generic sequence functions, and COERCE
149         code/array.lisp, general array stuff
150         SXHASH
151         code/list.lisp, list functions (based on code from Joe Ginder and
152                 Carl Ebeling)
153 The CMU CL seq.lisp code also gave credits for later work by Jim Muller
154 and Bill Chiles.
155
156 The modules system (code/module.lisp, containing REQUIRE, PROVIDE,
157 and friends, now deprecated by ANSI) was written by Jim Muller and 
158 rewritten by Bill Chiles.
159
160 The CMU CL garbage collector was credited to "Christopher Hoover,
161 Rob MacLachlan, Dave McDonald, et al." in the CMU CL code/gc.lisp file,
162 with some extra code for the MIPS port credited to Christopher Hoover
163 alone.
164
165 Guy Steele wrote the original character functions
166         code/char.lisp
167 They were subsequently rewritten by David Dill, speeded up by Scott
168 Fahlman, and rewritten without fonts and with a new type system by Rob
169 MachLachlan.
170
171 Lee Schumacher made the Spice Lisp version of backquote. The comment
172 in the CMU CL sources suggests he based it on someone else's code for
173 some other Lisp system, but doesn't say which. A note in the CMU CL
174 code to pretty-print backquote expressions says that unparsing support
175 was provided by Miles Bader.
176
177 The CMU implementations of the Common Lisp query functions Y-OR-N-P
178 and YES-OR-NO-P were originally written by Walter van Roggen, and 
179 updated and modified by Rob MacLachlan and Bill Chiles.
180
181 The CMU CL sort functions (code/sort.lisp) were written by Jim Large,
182 hacked on and maintained by Skef Wholey, and rewritten by Bill Chiles.
183
184 Most of the internals of the Python compiler seem to have been
185 originally written by Robert MacLachlan:
186         the type system and associated "cold load hack magic"
187                 code/typedefs.lisp
188                 code/class.lisp
189                 code/type-init.lisp
190                 etc.
191         the lexical environment database
192                 compiler/globaldb.lisp, etc.
193         the IR1 representation and optimizer
194                 compiler/ir1*.lisp, etc.
195         the IR2 representation and optimizer
196                 compiler/ir2*.lisp, etc.
197         many concrete optimizations
198                 compiler/srctran.lisp (with some code adapted from
199                         CLC by Wholey and Fahlman)
200                 compiler/float-tran.lisp, etc.
201         information about optimization of known functions
202                 compiler/fndb.lisp
203         debug information representation
204                 compiler/debug.lisp, compiler/debug-dump.lisp
205         memory pools to reduce consing by reusing compiler objects
206                 compiler/alloc.lisp
207         toplevel interface functions and drivers
208                 compiler/main.lisp
209 Besides writing the compiler, and various other work mentioned elsewhere,
210 Robert MacLachlan was also credited with tuning the implementation of 
211 streams for Unix files, and writing
212         various floating point support code
213                 code/float-trap.lisp, floating point traps
214                 code/float.lisp, misc. support a la INTEGER-DECODE-FLOAT
215         low-level time functions
216                 code/time.lisp
217
218 William Lott is also credited with writing or heavily maintaining some
219 parts of the CMU CL compiler. He was responsible for lifting 
220 compiler/meta-vmdef.lisp out of compiler/vmdef.lisp, and also wrote
221         various optimizations
222                 compiler/array-tran.lisp
223                 compiler/saptran.lisp
224                 compiler/seqtran.lisp (with some code adapted from an older
225                         seqtran written by Wholey and Fahlman)
226         the separable compiler backend
227                 compiler/backend.lisp   
228                 compiler/generic/utils.lisp
229         the implementation of LOAD-TIME-VALUE
230                 compiler/ltv.lisp
231         the most recent version of the assembler
232                 compiler/new-assem.lisp
233         vop statistics gathering
234                 compiler/statcount.lisp
235         centralized information about machine-dependent and..
236         ..machine-independent FOO, with
237                 compiler/generic/vm-fndb.lisp, FOO=function signatures
238                 compiler/generic/vm-typetran.lisp, FOO=type ops
239                 compiler/generic/objdef.lisp, FOO=object representation
240                 compiler/generic/primtype.lisp, FOO=primitive types
241 Also, Christopher Hoover and William Lott wrote compiler/generic/vm-macs.lisp 
242 to centralize information about machine-dependent macros and constants.
243
244 Sean Hallgren is credited with most of the Alpha backend.  Julian
245 Dolby created the CMU CL Alpha/linux port.
246
247 The CMU CL machine-independent disassembler (compiler/disassem.lisp)
248 was written by Miles Bader.
249
250 Parts of the CMU CL system were credited to Skef Wholey and Rob
251 MacLachlan jointly, perhaps because they were originally part of Spice
252 Lisp and were then heavily modified:
253         code/load.lisp, the loader, including all the FASL stuff
254         code/macros.lisp, various fundamental macros
255         code/mipsstrops.lisp, primitives for hacking strings
256         code/purify.lisp, implementation of PURIFY
257         code/stream.lisp, stream functions
258         code/lispinit.lisp, cold startup
259         code/profile.lisp, the profiler
260
261 Bill Chiles also modified code/macros.lisp. Much of the implementation
262 of PURIFY was rewritten in C by William Lott.
263
264 The CMU CL number functions (code/number.lisp) were written by Rob
265 MacLachlan, but acknowledge much code "derived from code written by 
266 William Lott, Dave Mcdonald, Jim Large, Scott Fahlman, etc."
267
268 CMU CL's weak pointer support (code/weak.lisp) was written by
269 Christopher Hoover.
270
271 The CMU CL DEFSTRUCT system was credited to Rob MacLachlan, William
272 Lott and Skef Wholey jointly.
273
274 The FDEFINITION system for handling arbitrary function names (a la
275 (SETF FOO)) was originally written by Rob MacLachlan. It was modified
276 by Bill Chiles to add encapsulation, and modified more by William Lott
277 to add FDEFN objects.
278
279 The CMU CL condition system (code/error.lisp) was based on
280 some prototyping code written by Ken Pitman at Symbolics.
281
282 The CMU CL HASH-TABLE system was originally written by Skef Wholey
283 for Spice Lisp, then rewritten by William Lott, then rewritten
284 again by Douglas T. Crosher.
285
286 The support code for environment queries (a la LONG-SITE-NAME),
287 the DOCUMENTATION function, and the DRIBBLE function was written
288 and maintained "mostly by Skef Wholey and Rob MacLachlan. Scott
289 Fahlman, Dan Aronson, and Steve Handerson did stuff here too."
290 The same credit statement was given for the original Mach OS interface code.
291
292 The CMU CL printer, print.lisp, was credited as "written by Neal
293 Feinberg, Bill Maddox, Steven Handerson, and Skef Wholey, and modified
294 by various CMU Common Lisp maintainers." The comments on the float
295 printer said specifically that it was written by Bill Maddox. The
296 comments on bignum printing said specifically that it was written by
297 Steven Handerson (based on Skef's idea), and that it was rewritten by
298 William Lott to remove assumptions about length of fixnums on the MIPS
299 port.
300
301 The comments in the main body of the CMU CL debugger 
302         code/debug.lisp
303 say that it was written by Bill Chiles. Some other related files
304         code/debug-int.lisp, programmer's interface to the debugger
305         code/ntrace.lisp, tracing facility based on breakpoints
306 say they were written by Bill Chiles and Rob MacLachlan.
307 The related file
308         src/debug-vm.lisp, low-level support for :FUNCTION-END breakpoints
309 was written by William Lott.
310
311 The CMU CL GENESIS cold load system,
312 compiler/generic/new-genesis.lisp, was originally written by Skef
313 Wholey, then jazzed up for packages by Rob MacLachlan, then completely
314 rewritten by William Lott for the MIPS port.
315
316 The CMU CL IR1 interpreter was written by Bill Chiles and Robert
317 MacLachlan.
318
319 Various CMU CL support code was written by William Lott:
320         the bytecode interpreter
321                 code/byte-interp.lisp 
322         bitblt-ish operations a la SYSTEM-AREA-COPY
323                 code/bit-bash.lisp
324         Unix interface
325                 code/fd-stream.lisp, Unix file descriptors as Lisp streams
326                 code/filesys.lisp, other Unix filesystem interface stuff
327         handling errors signalled from assembly code
328                 code/interr.lisp
329                 compiler/generic/interr.lisp
330         finalization based on weak pointers
331                 code/final.lisp
332         irrational numeric functions
333                 code/irrat.lisp
334         the pretty printer
335                 code/pprint.lisp
336         predicates (both type predicates and EQUAL and friends)
337                 code/pred.lisp
338         saving the current Lisp image as a core file
339                 code/save.lisp
340         handling Unix signals
341                 code/signal.lisp
342         implementing FORMAT
343                 code/format.lisp
344
345 The ALIEN facility seems to have been written largely by Rob
346 MacLachlan and William Lott. The CMU CL comments say "rewritten again,
347 this time by William Lott and Rob MacLachlan," but don't identify who
348 else might have been involved in earlier versions.
349
350 The comments in CMU CL's code/final.lisp say "the idea really was
351 Chris Hoover's". The comments in CMU CL's code/pprint.lisp say "Algorithm
352 stolen from Richard Waters' XP." The comments in CMU CL's code/format.lisp
353 say "with lots of stuff stolen from the previous version by David Adam
354 and later rewritten by Bill Maddox."
355
356 Jim Muller was credited with fixing seq.lisp.
357
358 CMU CL's time printing logic, in code/format-time.lisp, was written
359 by Jim Healy.
360
361 Bill Chiles was credited with fixing/updating seq.lisp after Jim Muller.
362
363 The CMU CL machine/filesystem-independent pathname functions
364 (code/pathname.lisp) were written by William Lott, Paul Gleichauf, and
365 Rob MacLachlan, based on an earlier version written by Jim Large and
366 Rob MacLachlan.
367
368 Besides writing the original versions of the things credited to him
369 above, William Lott rewrote, updated, and cleaned up various stuff:
370         code/array.lisp
371         code/serve-event.lisp
372
373 The INSPECT function was originally written by Blaine Burks.
374
375 The CMU CL DESCRIBE facility was originally written by "Skef Wholey or
376 Rob MacLachlan", according to the comments in the CMU CL sources. It
377 was cleaned up and reorganized by Blaine Burks, then ported and
378 cleaned up more by Rob MacLachlan. Also, since the split from CMU CL,
379 the SBCL DESCRIBE facility was rewritten as a generic function and so
380 become entangled with some DESCRIBE code which was distributed as part
381 of PCL.
382
383 The implementation of the Mersenne Twister RNG used in SBCL is based
384 on an implementation written by Douglas T. Crosher and Raymond Toy,
385 which was placed in the public domain with permission from M.
386 Matsumoto.
387
388 Comments in the CMU CL version of FreeBSD-os.c said it came from
389 an OSF version by Sean Hallgren, later hacked by Paul Werkowski,
390 with generational conservative GC support added by Douglas Crosher.
391
392 Comments in the CMU CL version of linux-os.c said it came from the
393 FreeBSD-os.c version, morfed to Linux by Peter Van Eynde in July 1996.
394
395 Comments in the CMU CL version of backtrace.c said it was "originally
396 from Rob's version" (presumably Robert Maclachlan).
397
398 Comments in the CMU CL version of purify.c said it had stack direction
399 changes, x86/CGC stack scavenging, and static blue bag stuff (all for
400 x86 port?) by Paul Werkowski, 1995, 1996; and bug fixes, x86 code
401 movement support, and x86/gencgc stack scavenging by Douglas Crosher,
402 1996, 1997, 1998.
403
404 According to comments in the source files, much of the CMU CL version
405 of the x86 support code
406         assembly/x86/alloc.lisp
407         assembly/x86/arith.lisp
408         assembly/x86/array.lisp
409         assembly/x86/assem-rtns.lisp
410         compiler/x86/alloc.lisp
411         compiler/x86/arith.lisp
412         compiler/x86/c-call.lisp
413         compiler/x86/call.lisp
414         compiler/x86/cell.lisp
415         compiler/x86/char.lisp
416         compiler/x86/debug.lisp
417         compiler/x86/float.lisp
418         compiler/x86/insts.lisp
419         compiler/x86/macros.lisp
420         compiler/x86/memory.lisp
421         compiler/x86/move.lisp
422         compiler/x86/nlx.lisp
423         compiler/x86/parms.lisp
424         compiler/x86/pred.lisp
425         compiler/x86/print.lisp
426         compiler/x86/sap.lisp
427         compiler/x86/static-fn.lisp
428         compiler/x86/subprim.lisp
429         compiler/x86/system.lisp
430         compiler/x86/type-vops.lisp
431         compiler/x86/values.lisp
432         compiler/x86/vm.lisp
433 was originally written by William Lott, then debugged by Paul
434 Werkowski, and in some cases later enhanced and further debugged by
435 Douglas T. Crosher; and the x86 runtime support code,
436         x86-assem.S
437 was written by Paul F. Werkowski and Douglas T. Crosher.
438
439 The CMU CL user manual (doc/cmu-user/cmu-user.tex) says that the X86
440 FreeBSD port was originally contributed by Paul Werkowski, and Peter
441 VanEynde took the FreeBSD port and created a Linux version.
442
443 According to comments in src/code/bsd-os.lisp, work on the generic BSD
444 port was done by Skef Wholey, Rob MacLachlan, Scott Fahlman, Dan
445 Aronson, and Steve Handerson.
446
447 Douglas Crosher wrote code to support Gray streams, added X86 support
448 for the debugger and relocatable code, wrote a conservative
449 generational GC for the X86 port, and added X86-specific extensions to
450 support stack groups and multiprocessing.
451
452 The CMU CL user manual credits Robert MacLachlan as editor. A chapter
453 on the CMU CL interprocess communication extensions (not supported in
454 SBCL) was contributed by William Lott and Bill Chiles.
455
456 Peter VanEynde also contributed a variety of #+HIGH-SECURITY patches
457 to CMU CL, to provide additional safety, especially through runtime
458 checking on various tricky cases of standard functions (e.g. MAP with
459 complicated result types, and interactions of various variants of
460 STREAM).
461
462 Raymond Toy wrote CMU CL's PROPAGATE-FLOAT-TYPE extension and various
463 other floating point optimizations. (In SBCL, the PROPAGATE-FLOAT-TYPE
464 entry in *FEATURES* first became SB-PROPAGATE-FLOAT-TYPE, then went
465 away completely as the code became an unconditional part of the
466 system.)
467
468 CMU CL's long float support was written by Douglas T. Crosher.
469
470 Paul Werkowski turned the Mach OS support code into Linux OS support code.
471
472 Versions of the RUN-PROGRAM extension were written first by David
473 McDonald, then by Jim Healy and Bill Chiles, then by William Lott.
474
475
476 MORE DETAILS ON THE TRANSITION FROM CMU CL
477
478 Bill Newman did the original conversion from CMU CL 18b to a form
479 which could bootstrap itself cleanly, on Linux/x86 only. Although they
480 may not have realized it at the time, Rob Maclachlan and Peter Van
481 Eynde were very helpful, RAM by posting a clear explanation of what
482 GENESIS is supposed to be doing and PVE by maintaining a version of
483 CMU CL which worked on Debian, so that I had something to refer to
484 whenever I got stuck.
485
486
487 CREDITS SINCE THE RELEASE OF SBCL
488
489 (Note: (1) This is probably incomplete, since there's no systematic
490 procedure for updating it. (2) Some more details are available in the
491 NEWS file, in the project's CVS change logs, and in the archives of
492 the sbcl-devel mailing list.)
493
494 Martin Atzmueller:
495   He reported many bugs, fixed many bugs, ported various fixes
496   from CMU CL, and helped clean up various stale bug data. (He has
497   been unusually energetic at this. As of sbcl-0.6.9.10, the
498   total number of bugs involved likely exceeds 100.)
499
500 Daniel Barlow:
501   He contributed sblisp.lisp, a set of patches to make SBCL
502   play nicely with ILISP. (Those patches have since disappeared from the
503   SBCL distribution because ILISP has since been patched to play nicely
504   with SBCL.) He also figured out how to get the CMU CL dynamic object
505   file loading code to work under SBCL. He ported CMU CL's Alpha
506   port to SBCL. He wrote code (e.g. grovel_headers.c and
507   stat_wrapper stuff) to handle machine-dependence and OS-dependence
508   automatically, reducing the amount of hand-tweaking required to
509   keep ports synchronized. 
510
511 Cadabra, Inc. (later merged into GoTo.com):
512   They hired Bill Newman to do some consulting for them,
513   including the implementation of EQUALP hash tables for CMU CL;
514   then agreed to release the EQUALP code into the public domain,
515   giving SBCL (and CMU CL) EQUALP hash tables.
516
517 Douglas Crosher:
518   He continued to improve CMU CL after SBCL forked from it, creating 
519   many patches which were directly applicable to SBCL. Notable examples
520   include fixes for various compiler bugs, and a generalization
521   of the type system's handling of the CONS type to allow ANSI-style
522   (CONS FOO BAR) types.
523
524 Robert MacLachlan:
525   He has continued to answer questions about, and contribute fixes to, 
526   the CMU CL project. Some of these fixes, especially for compiler
527   problems, has been invaluable to the CMU CL project and, by
528   porting, invaluable to the SBCL project as well.
529
530 Bill Newman:
531   He continued to work on SBCL after the fork, increasing ANSI
532   compliance, fixing bugs, regularizing the internals of the
533   system, deleting unused extensions, improving performance in 
534   some areas (especially sequence functions and non-simple vectors),
535   and updating documentation.
536
537 Raymond Toy:
538   He continued to work on CMU CL after the SBCL fork, especially on
539   floating point stuff. Various patches and fixes of his have been
540   ported to SBCL.
541
542 Peter Van Eynde:
543   He wrestled the CLISP test suite into a portable test suite
544   (clocc ansi-test) which can be used on SBCL, provided a slew of
545   of bug reports resulting from that, and submitted many other bug
546   reports as well.
547
548 Colin Walters:
549   His O(N) implementation of the general case of MAP, posted on the
550   cmucl-imp@cons.org mailing list, was the inspiration for similar MAP
551   code added in sbcl-0.6.8.
552
553 Raymond Wiker:
554   He ported sbcl-0.6.3 back to FreeBSD, restoring the ancestral
555   CMU CL support for FreeBSD and updating it for the changes made
556   from FreeBSD version 3 to FreeBSD version 4. He also ported the
557   CMU CL extension RUN-PROGRAM, and related code, to SBCL.