Running Unix programs under LispOS

cwg@DeepEddy.Com cwg@DeepEddy.Com
Fri, 02 May 1997 01:20:13 -0500


--==_Exmh_893399108P
Content-Type: text/plain; charset=us-ascii

I was thinking that there are basically two reasons we would want to run Unix/
C programs under LispOS:

1)  To make use of existing lowlevel code such as drivers, network code, a 
scheduler, etc...  Eventually we'd like to eliminate most of this and replace 
it with lisp code "all the way down".

2)  To run existing applications within our environment so we don't have to 
reimplement everything from tar to netscape.

I may be talking through my hat here, but it seems plausible to me to support 
a mini-unix environment *within* our lisp universe, but keep it isolated from 
the world that we're running.  What I imagine is a subsystem which can run ELF 
binaries in their own protected memory.  You might write lisp code that looks 
something like this:

(let ((browser (find-elf-binary "netscape"))
   (funcall browser "http://www.deepeddy.com")))

or maybe:

(let ((tar (find-elf-binary "tar"))
      (*standard-io* (make-instance 'terminal))
      (unix-env::pwd "/usr/local/src"))
   (funcall tar "-xvf" "/usr/local/src/tarfiles/foo.tar"))

I might define this:

(defun ed (file)
   (funcall (find-elf-binary "emacs") file))

and someone sick might define this:

(defun ed (file)
   (let* ((*standard-io* (make-instance 'terminal))
          (unix-env::term (termtype *standard-io*)))
      (funcall (find-elf-binary "vi") file)))

Basically, there would be an object which contains enough Unix environment to 
run an elf binary.  This environment could be controlled from the lisp world, 
but the Unix program would think it's on a real Unix machine.  If a Unix 
program forked itself, it would create a new object for the child.  The 
scheduler would be handled in Lisp (or at a lower level until we got a working 
lispVM).

Conceptually, this would be fairly easy to implement while there was a full 
version of Linux sitting on the hard disk.  Initially, the LispOS might just 
appear like a shell under Linux, but the next phase would be to replace the 
stuff between the kernel and the shell with Lisp code, and finally the only 
Unix left would be the code running in these isolated environments (and all 
the /usr/include, /usr/lib, and so on that it needs.

In practice could this be as simple as the concept sounds to me?

I could also see running DOS or Windows binaries in a similar fashion.

Chris

-- 
Chris Garrigues                    O-              cwg@DeepEddy.Com
  Deep Eddy Internet Consulting                     +1 512 432 4046
  609 Deep Eddy Avenue
  Austin, TX  78703-4513              http://www.DeepEddy.Com/~cwg/



--==_Exmh_893399108P
Content-Type: application/pgp-signature

-----BEGIN PGP MESSAGE-----
Version: 2.6.2

iQB1AwUBM2mHlpaQnaaFII2dAQH+PwMAzjg2JrIilCb1FY2h+9vr3aCW87OHcRfN
O221ExNeudObo4weVNfIUO7AJV3BAs6dNK8cd9SV9ZYk3fjooue6whrC5qMyEVpn
KZiHANBmzTIuKV7BGwclgHVK03WrDEu3
=AM5v
-----END PGP MESSAGE-----

--==_Exmh_893399108P--