Skip to content
daniel@cosenza:~/blog
Haiku OSDeep Dive May 2, 2026 3 min read

The Haiku Kernel: A Modular, Pervasively Multithreaded Design

Haiku's kernel wasn't built as a Unix variant with threading bolted on — it was designed around threads as the fundamental unit of execution from the very beginning.

Most operating systems added real multithreading support to an architecture originally designed around single-threaded processes — Unix’s process model predates widespread SMP hardware by decades. Haiku’s kernel takes the opposite approach: it was designed from the outset around threads as the basic schedulable unit, with everything else built on top of that assumption.

Threads, not processes, as the fundamental unit

In Haiku, a team (Haiku’s term for what Unix calls a process) is essentially a container for one or more threads, and the kernel schedules and reasons about threads directly rather than treating a process as an indivisible unit that happens to contain threads as an afterthought. Every application on Haiku — including single-purpose command-line tools — runs with this same underlying model, because there’s no separate “simple, single-threaded” code path the kernel treats differently.

Team (Haiku's "process")
 ├── Thread 1  (e.g., main application logic)
 ├── Thread 2  (e.g., UI event loop — see the Looper/Handler pattern)
 └── Thread 3  (e.g., background I/O)

Where this comes from: a fork of NewOS

Haiku’s kernel began as a fork of NewOS, a modular monokernel written by Travis Geiselbrecht — a former Be Inc. engineer — as an independent project. The fork happened in 2002, early in the OpenBeOS project’s life (before it was renamed Haiku), giving the fledgling project a working, technically solid kernel foundation to build on rather than starting completely from scratch. Geiselbrecht’s own background at Be Inc. meant the kernel’s design sensibilities were already well aligned with what a BeOS successor needed.

Why “pervasively multithreaded” shows up everywhere, not just in the kernel

The consequence of this design choice runs well beyond the kernel scheduler itself: Haiku’s core APIs — the Looper/Handler messaging pattern that every GUI application uses, the Media Kit’s real-time audio/video pipelines — all assume and lean on cheap, well-supported threading as a basic building block, rather than treating concurrency as an advanced technique reserved for performance-critical code. A simple Haiku application routinely runs several threads without its author needing to think especially hard about it, because the frameworks built on top of the kernel were designed with that assumption baked in from the start.

A modular, not monolithic, kernel

Beyond its threading model, Haiku’s kernel is structured modularly — file systems, network protocol handlers, and device drivers are loadable modules rather than code that must be compiled directly into a single kernel image. This isn’t unique to Haiku (Linux’s loadable kernel modules solve a similar problem), but it fits the same underlying design philosophy: keep the kernel itself focused on scheduling, memory management, and core services, and let everything else — including file system implementations like BFS — plug in as a module.

Why this matters for how Haiku actually feels to use

A kernel designed around cheap, first-class threads produces a system where a stalled or misbehaving thread in one part of an application is far less likely to freeze the whole interface — a direct, practical consequence of concurrency being the default assumption rather than an exception. This is a large part of why Haiku, even as beta-quality software, has a reputation for feeling notably responsive: the responsiveness isn’t a performance optimization layered on top, it’s a direct outcome of decisions made at the kernel’s most fundamental level, inherited from a design philosophy that predates Haiku itself and traces back to BeOS’s original engineering priorities.