January 12, 2026 Read on drewdevault.com
2.7

Redesigning my microkernel from the ground up

Systems ProgrammingLanguage Design

DeVault announces Hermes, a from-scratch rewrite of his Helios microkernel, after two years of design thinking and research following Helios stalling in design hell. He explains that Helios, his first serious OS project, accumulated too many poor assumptions to serve as a foundation. The intervening period included building Bunnix (a Unix clone) to gain practical OS implementation experience and studying prior art extensively. Hermes already surpasses Helios in key ways: symmetric multiprocessing support, a simpler capability/resource management model using reference counting, rethought syscall and IPC ABIs, and a more comprehensive test suite verified on real hardware. The userspace strategy shifted from a specialized Hare standard library to porting the upstream one, reducing complexity across the system.

Sometimes the most productive thing a systems programmer can do is stop writing code, acknowledge that the foundation is flawed, and spend years in design research before starting over from scratch.
  • 3

    Since Helios was my first major OS project at this scale and with this much ambition, the design and implementation ended up with a lot of poor assumptions that made it a pretty weak foundation for building a complete OS upon.

  • 4

    In late 2023 I more or less gave up on it and moved my OS development work out of the realm of writing code and back into the realm of thinking really hard about how to design operating systems.

  • 2

    What followed was a couple of years of design thinking, developing small scale design experiments, and doing deeper research into prior art – reading papers and studying existing kernels.

  • 2

    This time around, I finally listened to the advice I'd been hearing in osdev circles for years and implemented SMP as early as possible to avoid dealing with tons of problems adding multiprocessing to an otherwise mature kernel.

  • 3

    The most important parts of the scheduler are less than 200 lines of code.

  • 2

    I also moved from an seL4-style capability derivation graph – which is quite complex to implement and reason about – to reference counting to manage the lifetimes of kernel resources.

reflective, technical, candid