A hobby x86 32-bit OS kernel built collaboratively with a housemate around 2005, inspired by a university OS design course. Written in D - chosen for its object-oriented model and optional GC, which made it a better fit than C++ for bare-metal development. The bootloader used ASM segments from the osdev.org wik; everything else was built from scratch, including a custom memory allocator and the D stdlib primitives needed in kernel mode (no libc available). The binary image was cross-compiled and loaded into QEMU.
Design
The kernel was designed as a microkernel built around non-blocking message passing - avoiding kernel interrupts for most IPC. Rather than a file-based abstraction, the design was object-based: OS primitives would expose interfaces that could be interacted with transparently over the network. This was influenced heavily by CORBA, which I had been working with during a placement year.
Data files were conceived as memory-mapped, content-addressed blocks. The content-addressing scheme was intended to enable verifiable package distribution pulled on demand from a DHT/CDN - informed by P2P file sharing software common at the time (pre-IPFS, early BitTorrent).
Something similar is implemented by the Nix package manager, although this is implemented in userspace and runs on several different host operating systems.
Implementation status
- Basic kernel memory allocator
- Intel NIC driver - raw network packet send/receive
- Framebuffer graphics driver with bitmap font rendering
- Basic process management (no VMM or memory isolation)
