Research note · Ouroboros

Comparative directions: where the influences point next

A synthesis across all four stated influences — MINIX, Linux, Plan 9, Helix — asking one forward-looking question: given everything Ouroboros has actually built, which architectural idea is still genuinely worth implementing?

🧭 Complements the per-influence notes — how MINIX boots and Helix's design — and supplies the Plan 9 material they were missing. Feeds the microkernel self-assessment.
The finding, up front

Plan 9's per-process namespace + uniform file protocol (9P) is the standout. It's the one idea that would unify mechanisms Ouroboros already built piecemeal — the fsd/cond server protocols, the capability send-mask, per-task memory isolation, delegation — into a single coherent design, rather than piling on a new feature. Everything else is either already absorbed or better sequenced behind it.

First, recalibrate: what Ouroboros already absorbed

This has to come first, because the older influence notes were written when Ouroboros had "no fault isolation of any kind" and "one program, hardcoded" — both long since false. The classic microkernel checklist is largely done:

So the interesting question is no longer "what basic microkernel feature is missing." It's "what different architectural idea would take this somewhere new." That reframing points hard at Plan 9.

The standout: Plan 9's namespaces + a uniform file protocol

Plan 9 rests on two ideas: a per-process name space and one message-oriented file protocol (9P) that every service speaks. All I/O — files, network connections, process control, the console — is file operations on named objects, and each process composes its own private view by mounting service trees into its namespace. Crucially, a mount affects only the namespace of the process that made it: no global state, no special permission. The striking part for this project is that Ouroboros has independently reinvented the pieces Plan 9 unifies, but in bespoke form:

Plan 9 unifies……what Ouroboros built by hand
One 9P protocol every server speaksfsd's FSOP_* protocol and cond's separate DSPOP_* protocol
Namespace = the services you can reachThe per-slot capability send-mask (who a task may message)
Per-process namespace, mounts localPer-task page-table views (each task's own memory view)
bind / passing a mount to a childRuntime capability delegation (the current frontier item)

Adopting the Plan 9 shape would deliver three things at once:

  1. FSOP_* and DSPOP_* collapse into one protocol. Every server — and every future one (a network stack, a synthetic /proc) — becomes reachable through the same walk/open/read/write/stat verbs, no new ABI per server. "Everything is a file" becomes less bespoke code.
  2. The namespace becomes the capability mechanism. Plan 9's sandboxing is namespace restriction: you can only reach what's mounted for you. That's a cleaner statement of the capability model Ouroboros built by hand — and the transitive-delegation gap at the top of the roadmap frontier becomes Plan 9's bind. The hard capability problem and the naming problem are the same problem in Plan 9.
  3. It subsumes several roadmap items — general delegation, a VFS indirection, multi-filesystem support, program composition — into one mechanism. In Plan 9 the namespace is the VFS.

Honest scoping: this is a large milestone (a namespace table per task, a 9P-ish protocol, mount/bind syscalls, rewriting fsd/cond as 9P servers), and the distributed half of Plan 9 (9P over a network) needs a network stack that doesn't exist. Take the local half now, defer the distributed half honestly — the local half is the coherent next architecture that makes the system feel designed rather than accreted.

The rest, ranked by fit

What to skip (cautionary)

Recommendation

The Plan 9 namespace + uniform-protocol direction is the one genuinely interesting architectural move left: it unifies fsd, cond, the capability model, and delegation into a single coherent mechanism, and it's the natural next architecture given everything already landed. If a single next big milestone is wanted, this is it — and general capability delegation should probably be designed as the namespace/bind mechanism rather than as a standalone send-mask extension, since Plan 9 shows they are the same problem.

The full note, with sources linked throughout, lives in the repository as research-directions.md.