Choose between synchronous calls, asynchronous messages, or shared-memory rings, and write traceable IDs for every transaction. A tiny echo server, timer, and block device service will expose real backpressure, timeouts, and retry logic you must confront early and learn from.
Run drivers outside the kernel, crash them intentionally, and verify that the screen flickers but the system breathes. Logging, watchdog restarts, and capability-scoped I/O improve confidence. When a PCI quirk appears, only one process falls, not the entire machine.
Start with a loader that sets paging, a scheduler with preemption, and a pager or memory server that maps pages on demand. Keep it boring and observable; deterministic traces beat cleverness when your fourth context switch silently trashes a register.
All Rights Reserved.