A while ago I started to make a new microkernel. It's name is OOMTK which stands for "Object-oriented multi-tasking kernel", an old name I used for some small userspace kernel back in 1994. It is being hosted in Taiwan (OpenSVN repository) and you can take a look at is't trac website at the following address: https://opensvn.csie.org/traccgi/oomtk/.
My idea is to make a very small and basic microkernel that will handle context switching, memory allocation and message passing. Everything else should be in separate servers. To make things worse, no application will be able to access the hardware directly. Instead, it will have to go through HAL (hardware abstraction layer) interface to get to hardware. The HAL will implement some basic methods, such as port i/o. The HAL will have to be ring0, but it will be a separate process from the kernel itself, so that it cannot generate an error that would block the kernel. There will also exist a process that will be responsible of reloading the servers if they crash (and if they registered to be reloadable).Currently, it is very far from usable. Here's the current screenshot (just a bootable kernel with paging and descriptors set up):