Antti Kantee
Abstract
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.
Speaker
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
lhttp://www.NetBSD.org/docs/puffs/rump.html