L4-Hurd is an attempt to port GNU Hurd to L4 microkernel. This project is not separate from the official Hurd project, but it has its own mailing list called L4-Hurd, because we need to discuss many L4-specific issues to establish the basic design.
This page exists temporarily, because we don't have any official webpage about L4-Hurd yet. Once this is done, I'll move this page soon.
For now, I'm investigating the differences between Mach and L4, for L4-Mach. L4-Mach is the name of a user-level program which will emulate the bahavior of Mach on L4. L4-Mach is surely a bad idea to get really good performance and it shouldn't be used permanently because of the poor design, but I believe that some kind of Mach emulation is very useful at the early stage of the L4-Hurd port, as Hurd is currently quite dependent on Mach.
Besides the difference between Mach system calls and L4 ones, there are a significant number of differences between Mach and L4. So I list them up here (this list will grow as times go by...)
Mach IPC is asynchronous, while L4 IPC is synchronous. That is, In Mach, messages sent by IPCs are queued in kernel-level buffers, while messages are sent to target threads directly in L4.
Mach provides the concept, port, portset, port right, etc., but L4 doesn't. L4 has another protection mechanism called "clans & chiefs" model. These concepts are quite different, and so not exchangeable.
NOTE: "clans & chiefs" model will vanish in the future.
A Mach IPC message is sent to a task instead of a thread. In L4, a message is always sent to a thread. This is because ports are shared by all the threads in a task, in Mach.
Mach allows a task to manipulate another task directly via several kernel RPCs, while L4 doesn't (except for task creation and deletion).
Because of that above, when a task causes an exception, the exception handling is done in the task itself in L4. But Mach permits to send the notification message to another task (via a thread/task exception port).
NOTE: In L4/MIPS, this is not true. Each thread has its own exception handler.
A new task can be started up with pre-loaded pages in Mach, while a new task must always cooperate with its pager in L4 (i.e. the task causes a page fault when starting up).
One thing which I find cannot be realized in current L4 is that it doesn't provide sufficient information on elapsed time. This is necessary especially for profiling, but L4 doesn't tell how amount of time is used for a certain thread (e.g. system time in Mach). I think the L4 API should be extended.
NOTE: I mean that Mach takes account of system run time as well as user run time, while L4 doesn't care about system run time. Volkmar told me that this is too short to be accounted, but I still doubt if that is reasonable. (This probably suggests how difficult to persuade scientists with no direct evidence. :-p)
The maximum number of threads in a task is very limited in L4.
NOTE: This will change in a future version.
...more on later.
I already have a slightly realistic idea. I'll write it soon.
OKUJI Yoshinori <okuji@kuicr.kyoto-u.ac.jp>
Copyright (C) 2000 OKUJI Yoshinori
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.