7th European BSD Conference: Oct 18-19 2008, Strasbourg, France

Converting Kernel File Systems to Services

Antti Kantee

A BSD/UNIX operating system is traditionally split into two pieces: the kernel and userspace. Historically the reasons for this were clear: the UNIX kernel was a simple entity. However, over time the kernel has grown more and more complex. Currently, most of the same functionality is available both in userspace and the kernel, but under different names. Examples include synchronization routines and threading support. For instance, to lock a mutex in the NetBSD kernel, the call is mutex_enter(), while in userspace the routine which does exactly the same thing is known as pthread_mutex_enter(). Taking another classic example, a BSD style OS has malloc()/free() available both in userspace and the kernel, but with different linkage (the kernel malloc interface is currently being widely deprecated, though). This imposes a completely arbitrary division between the kernel and userspace. Most functionality provided by an opearating system should be treated as a service instead of explicitly pinning it down as a userspace daemon or a kernel driver. Currently, due to the arbitrarily difference in programming interface names, functionality must be explicitly ported between the kernel and userspace if it is to run in one or the other environment. By unifying the environments where possible, the arbitrary division is weakened and porting between these environments becomes simpler.
Antti Kantee has been a NetBSD developer for many many moons. He has managed to work on quite a few bits and pieces of a BSD system: userland utilities, the pkgsrc packaging system, networking, virtual memory, device drivers, hardware support and file systems.
See also