Namefs and Solaris Doors for Linux

Doors/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!