Lamp
Lamp (Lamp Ain't Mac POSIX) is an ambitious project to create a Unix-like environment on Mac OS. Formerly called LAMP (reflecting the name's acronym status), people tended to confuse it with Linux / Apache / MySQL / Perl|Python|PHP, so a change was in order.
News
Under active development is a port of perl 5.6.1 to Lamp. The perl test suite has been an enormous asset in discovering bugs in Lamp.
In June 2006 I overhauled the implementation of file descriptors. This cut about 10% off the executable size, and will make it easier to add new kinds of file descriptors.
Overview
Lamp currently consists of:
- Genie, a scriptable application providing command shell windows to the user (much like Terminal windows, or xterms) and a kernel environment to user programs.
- Kerosene, an API for developing Genie programs, which includes a partial libc implementation (e.g. system()) and a few extras for Mac development, such as AESendBlocking(). (Apple events may eventually be provided by sockets.)
- A collection of Genie programs, including basics such as login, sh, and kill; Mac-savvy file utilities like cp, mv, and touch; and implementations of htget, httpd, and inetd. Since Genie is far from complete in its POSIX support, it's so far been necessary, for the most part, to write programs from scratch rather than port existing codebases. However, code written for Genie is generally compatible with POSIX, (with a few exceptions).
- jTools, a Genie distribution. jTools defines certain policies in the same way that a Linux distribution does, and is modeled on Debian and Mac OS X.
Details
In Genie, opening a new window works roughly the same as in Mac OS X's Terminal, spawning a new login shell. Also (like Terminal), the window is managed by Genie itself, unlike X11 where each xterm is a separate user process. However, whereas Terminal itself is a user process, Genie is the kernel environment, so in a sense its windows are cousins to Linux's virtual consoles, with the notable difference that they are created and destroyed dynamically, instead of being stewarded by init and getty.