Namefs and Solaris Doors for Linux
Doors/Linux is an implementation of the Solaris Doors API
on the Linux operating system. The Doors API provides a
high-speed RPC mechanism which uses the UNIX notion of
the filesystem as a universal namespace and has built-in support
for multithreading.
Linux Namefs is an implementation of SVR4 fattach() and
fdetach() for Linux, allowing file-on-file mounting allowing the local
filesystem to be used as a naming service for pipes, files, and doors.
News
Released Doors and a new standalone "Linux Namefs" which compile
and vaguely work as modules on vanilla Linux 2.4.18 (no kernel
patching necessary)
-- Jason, Jan 5, 2003
I am tentatively porting Doors/Linux to Linux 2.4.18, although my
time on the project is limited. To contribute (suggestions, code,
commentary), send me e-mail.
-- Jason, Oct 22, 2002
Source
Note: Currently Doors/Linux and Linux Namefs are to be considered
ALPHA QUALITY SOFTWARE and has not been thoroughly tested. While it
seems to work for me, it may not work for anyone else. :-) The code
is still under development and has some features missing.
If you're feeling brave, you can try out this source:
Latest version
- Linux Doors version 0.9.3 (doors-0.9.3.tar.gz)
-
Untested work-in-progress. Some simple regression
tests are now working. Loads against unpatched Linux kernels
(!). Uses the new Linux Namefs for fattach/fdetach.
- Linux Namefs version 0.9.0 (namefs-0.9.0.tar.gz)
-
Untested work-in-progress. Some simple regression
tests are now working. Works with Linux Doors.
Older versions
- Version 0.9.2 (doors-0.9.2.tar.gz)
-
Untested work-in-progress to port Doors/Linux to
Linux 2.4.18. Releases libdoor under LGPL to ease porting
proprietary Solaris applications to Linux.
- Version 0.9.1 (doors-0.9.1.tar.gz)
-
Tested on Alpha and Sparc64 (32-bit user ABI) not x86.
Patch for ARM Linux
provided by Nicholas Clark.
- Version 0.9.0 (doors-0.9.0.tar.gz)
-
Tested on x86 (UP and SMP) and Alpha.
Please send patches and bug reports to Jason
Lango (jal@rampant.org). If
you are reporting a bug, please make sure that it can be reproduced
with the most recent version of Doors/Linux. The author would also
appreciate success stories, if applicable.
GNU C Library support
Thorsten Kukuk has
made a glibc add-on for Doors/Linux available at his
glibc
add-ons page.
Documentation
An Implementation of the Solaris Doors
API for Linux by Jason Lango
describes the implementation.
The doors API is documented by Sun in a short whitepaper in the Fall
1996 edition of Sun
Developer News and the Solaris manpages:
Development Resources
ChangeLog
[infrequently updated]
- 0.9.2
-
Update copyright notices and release libdoor under LGPL.
Various changes to make libdoor.c and doorsk.c compile under
Linux 2.4.18.
Unfortunately fattach() and fdetach() will need some work, as
mountpoints work somewhat differently in 2.4.x than in
2.2.x.
- 0.9.1 (a.k.a binary incompatibility release)
-
Works with Linux 2.2.x. Due to changes to the Linux
file_operations structure, this version of Doors will not work
on kernels older than 2.1.119.
Support kernels with multiple ABIs, e.g. sparc64. All
user/kernel shared data structures use 64 bit pointers now.
Theoretically should be possible to have any combination of
32-bit vs. 64-bit server, client, and kernel. Thanks to Tim
Rowley for helping out with UltraPenguin.
Fixed up the benchmarking code, which I seem to have broken
several revisions ago. :-)
Made some changes to the testing framework, due to a race
found in the test of door_info(). Now the testing framework
waits for all clients to exit before killing the servers, and
no client is started before all servers are initialized.
- 0.9.0
-
Split bloated libdoors.c file into separate files in libdoor
directory. Changed to somewhat glibc-like coding conventions.
Significant changes to fattach()/fdetach() such that we
replace entries in the dcache rather than using d_mounts and
d_covers inappropriately. Now the fattach()'d door inherits
its attributes from the file on which it's mounted. A single
door can be mounted on multiple files and each mount point
maintains separate attributes (permissions, owner, etc.).
"make check" now runs stand-alone tests, a la GNU convention.
Previous "make check" was pretty broken. :-/
Various bug fixes in door_return() for some special cases.
DOOR_UNREF_DATA messages are now sent to doors which have the
DOOR_UNREF attribute (when the number of descriptor's
referring to the door drops to 1).
- 0.8.1
-
Tested on a heavily-loaded dual-processor pentium system with
no problems. The machine was running the doors benchmark and
test_bigargs/_srv (8Mb copy) in a tight loop, while browsing
the web with netscape. ;-) Thanks to Brian Perkins for
helping out.
Less unnecessary page copying and dirtying, thanks to Pete
Wyckoff.
Tested on an alphastation avanti, running the doors benchmark
and test_bigargs/_srv in a tight loop with no problems.
- 0.8.0
- Initial public release
Project Timeline
- 5 January 2003
- New Doors/Linux version 0.9.3 and Linux Namefs version 0.9.0
- 22 October 2002
- New version 0.9.2
- 14 March 1999
- New version 0.9.1
- 28 September 1998
- Official site moves to rampant.org.
- 28 July 1998
- New version 0.9.0
- 10 June 1998
- New version 0.8.1
- 4 June 1998
- Announced to linux-kernel
- 3 June 1998
- Jason demands a webpage rewrite -- wants to look professional
or something...
- 2 June 1998 (later that night...)
- Source!
- 2 June 1998
- Jason allows the paper to be unleashed on the unsuspecting web.
Meanwhile, our top men are huddled around a terminal trying to figure
out why it crashes on Pentium and SMP machines.
- Late February/Early March 1998
- Additions to the paper, including a Linux kernel architecture
diagram (Linus must hate us...).
- Early February 1998
- Tom reviews the paper -- "It reads like a manpage." :-)
- Mid January 1998
- Jason unveils his working implementation of Doors/Linux to BLUG, running
on Linux/axp and Linux/ix86.
He's also been working on a paper about the implementation of doors,
complete with performance graphs
comparing them to other IPC methods.
- 30 October 1997
- Ladies and gentlemen, we have CODE!
- 19 October 1997
- After a lengthy battle, a 2.1.x kernel comes up along with the console,
much to the embarrassment of those involved. Note for future reference:
turn off CONFIG_ALPHA_SRM and CONFIG_SCSI_QLOGIC_ISP.
- 13 October 1997
- Discussion of how doors would be implemented -- current feeling
is to muck with the directory lookup cache to put doors into the
filesystem (in lieu of STREAMS) and a /dev/door. More source code
reading.
- 9 October 1997
- Install party -- much mucking with flash ROMs, bad floppies,
odd bootloaders, and buggy install programs. The machine finally submits
and boots Linux/Alpha to much rejoicing.
- 7 October 1997
- The NT install we've been waiting for finished -- we have a *go*!
- 6 October 1997
- Doors discussed and kernel source read.
- 30 September 1997
- Jason raises idea of avoiding adding syscall(s) and making doors a loadable
module by implementing doors on top of a /dev entry.
Potential religious war for the next BLUG meeting...
- 29 September 1997
- Back to earth -- realize previous project was too ambitious and settle for implementing Sun's doors API for Linux. Initial work assignments handed out.
- 23 September 1997
- President brings up wacky idea of doing a buzzword compliant Solaris-MC style distributed computer system (DSM, process migration, multi-threaded, single image, etc...). Takes a couple of "Err..." comments as unanimous acceptance of idea.
- Early September 1997
- Subject of BLUG project raised again
- 1996-1997 academic year
- Kicked around the idea of a BLUG project
Maintained by Jason Lango (jal@rampant.org).
Original page courtesy of Tim Rowley (tor@cs.brown.edu). Thanks Tim!