[movitz-devel] Lisp OS
mikel evins
mikel at evins.net
Tue Feb 3 20:17:04 UTC 2004
The reason I downloaded Movitz and joined the list is that I'm
interested in OS development in Lisp. That interest has its roots in
two experiences: first, working with a Symbolics machine and Genera in
the late 80s; second, being a programmer working on an operating system
at Apple in the early nineties. The operating system was for a new
platform that eventually became the Newton, and everything except the
microkernel and the QuickDraw library were written in a new programming
language called Ralph; Ralph was later renamed Dylan, and later than
that its syntax was changed to something more familiar to C
programmers, but Ralph was originally just Scheme plus CLOS.
Working with Genera was a lot of fun, and quite different from any
other OS I've used. Working on the Dylan version of Newton's OS was
even more fun.
One of the things that the two had in common was that they were both
designed to be Lispy; that is, the abstractions and interfaces provided
were designed to be natural to the Lisp programmer.
There's a lot of code and a lot of documentation available about how to
write operating systems, but nearly all of it assumes that system
programmers will use C, and they are organized around that assumption.
If you assume that the system-programming language is Lisp and you
think about system programming in Lisp, things turn out a little
differently.
To take one example, I have experience working with Apple's QuickDraw
libraries on five different processors (6502, 68K, PowerPC, x86, and
ARM) and four operating systems (Apple IIGS, MacOS, Windows, and
NewtonOS). The versions of QuickDraw whose API was presented in C were
more similar to each other than different, despite different processors
and operating systems, but when we did a windowing system in Ralph for
the Newton, based on the lowest-level QuickDraw code, that version of
QuickDraw was different from the others. QuickDraw had seven very
low-level routines; all the familiar C API was implemented in terms of
those low-level routines. We kept the low-level routines, but discarded
the higher-level API; the guy working on QuickDraw implemented a new
high-level API that was a better match for Lisp.
This Lisp-based QuickDraw API was more different from any of the
C-based APIs than any of them were from one another.
As an example of the differences, traditional QuickDraw code copies
relatively large data structures quite a bit, because various different
routines need access to them in various different ways, and it becomes
nearly impossible to tell in a nontrivial application which routine
should deallocate them. In our incarnation of QuickDraw almost all that
copying was eliminated because garbage-collection freed us from
worrying about dangling pointers and memory leaks. The various drawing
data structures lived as long as they were needed and were
automatically deallocated when they weren't needed anymore. This
difference in style amounted to an automatic optimization of memory and
CPU use that gave us a fast, memory-efficient, great-looking graphics
system that was easy and natural to use.
This story is a prologue to a discussion I'd like to have about OS
design in Lisp (and on Movitz): what would a modern OS look like if
designed around the natural abstractions and expressions of Lisp?
Plan 9 is said to be organized around 3 fundamental concepts:
1 - everything in the system looks like a file
2 - files respond to the same unifying protocol regardless over whether
they are local or remote
3 - the namespace of the filesystem is subjective; that is, each
process names all the files in the universe using a single namespace,
but that namespace is defined relative to the process itself, so two
different processes may have very different views of the same set of
files.
These fundamentals give rise to a system with powerful and elegant
abstractions. What are the corresponding small number of powerful
fundamentals of a modern Lisp OS? What are the irreducible atoms of
which it is constructed? What are the abstractions that make for the
most natural expression of OS ideas in Lisp? What would the ultimately
Lispy OS look like?
More information about the movitz-devel
mailing list