Have recently finished the practical part of "Advanced Operating Systems" in ETH. More a hobby - like activity, lots of time have passed since I have been a student the last time. Step by step, over half a year each student have implemented a tiny working system on the top of L4 microkernel for NSLU2. It even has its own ELF loader. At times I started to think that it may be interesting to put a java virtual machine on the top of L4 as the first (root) task. In L4, the root task can do many things that the ordinary program cannot do. Most interesting it can map and remap pages, so we can have chunks of memory appearing from nowhere in virtual space. Or extrafast moving by remapping (while it may be difficult to see as these pages are 4 kb at least and must be aligned). If some other task (normal L4 executable) wants to do such things it can only do via requesting root task to do this. Context switches and so on.
L4 also has quite pretty threads, and each thread can have individual mappings. For instance, they can have each its own stack exactly in the same place of the address space. But in general it is a very tiny kernel; apart maps, threads and interprocess pipes there is almost nothing more there. This is not because of incompleteness, it is more a kind of concept.
However drivers seems being a biggest problem, even if we restrict interface to the network alone. It was a not so bad network driver for the NSLU2 chipset in the provided package, but the problem is that this hacker-loved slug seems no longer in production. Some German groups try to run existing Linux drivers under L4 in some emulation mode.