What capOS Is
A research kernel that boots on x86_64 QEMU. The rest of this page is about why it looks the way it does — the specific design bets behind the code — not a feature inventory. For the feature-by-feature matrix, see Current Status.
Status: Partially implemented.
What Makes capOS Different
capOS is a research vehicle for a few specific design bets. Each is unusual on its own; the combination is the point.
- Everything is a typed capability. System resources are accessed through
Cap’n Proto interfaces defined in
schema/capos.capnp. There is no ambient authority — no global path namespace, no open-by-name, no implicit inherit. A process can only invoke objects present in its local capability table. - The interface IS the permission. Instead of a parallel READ/WRITE/EXEC
rights bitmask (Zircon, seL4), attenuation is a narrower capability: a
wrapper
CapObjectexposing fewer methods, or anEndpointclient facet that cannotRECV/RETURN. The kernel just dispatches; policy lives in interfaces. See Capability Model. - io_uring-style shared-memory ring for every call. Every process owns a
submission/completion queue page. Userspace writes SQEs with a normal
memory store; the kernel processes them through
cap_enter. New operations are SQE opcodes (CALL,RECV,RETURN,RELEASE,NOP), not new syscalls. The remaining syscall surface iscap_enterandexit. - Release is transport, not an application method. Dropping the last
owned handle in
capos-rtsubmits aCAP_OP_RELEASESQE; the kernel removes the slot. Noclose()method on every interface, no mutable table self-reference during dispatch. - Capability transfer is first-class. Copy and move descriptors ride
sideband on
CALL/RETURNSQEs. Move reserves the sender slot until the receiver accepts and preflight checks pass, then commits or rolls back atomically — no lost, duplicated, or half-inserted authority. - Cap’n Proto wire format end-to-end. The same encoding describes the boot manifest, runtime method calls, and future persistence/remote transparency. The CQE log is itself a serialized capnp message stream, which opens the door to record/replay, audit, and migration as OS primitives rather than external tooling.
- Host-testable pure logic. Cap-table, frame-bitmap, ELF parser, frame
ledger, lazy buffers, and the ring model all live in
capos-lib/capos-configand run undercargo test-lib, Miri, Loom, Kani, andproptestwithout any kernel scaffolding. Kernel glue stays thin. - Schema-first boot.
system.cueis compiled to a Cap’n ProtoSystemManifestembedded as the single Limine boot module. The manifest carries binaries, capability grants, exports, badges, and restart metadata as typed structured data — not shell scripts or baked environment variables.
Execution Model
Each process owns an address space, a local capability table, a mapped
capability-ring page, and a read-only CapSet page that enumerates its
bootstrap handles. The kernel enters Ring 3 with iretq and returns through
cap_enter or the timer. Ordinary capability calls progress only via
cap_enter; timer-side polling handles non-CALL ring work and call targets
that are explicitly safe for interrupt dispatch. Details in
Process Model,
Capability Ring, and
Scheduling.
Boot Flow
The kernel receives exactly one Limine module — a Cap’n Proto
SystemManifest compiled from system.cue — validates it, loads the
referenced ELFs, builds per-service capability tables and CapSet pages, and
starts the scheduler. The default boot still wires the service graph in the
kernel; the selected milestone is to move generic manifest execution into
init through ProcessSpawner. Full walkthrough in
Boot Flow and
Manifest and Service Startup.
Authority Boundaries
Authority is carried by cap-table hold edges with generation-tagged
CapIds. Ring 0 ↔ Ring 3, capability table ↔ kernel object, endpoint IPC,
copy/move transfer, manifest/boot-package, and process spawn are the
boundaries reviewers care about; each one fails closed at hostile input. See
Trust Boundaries for the boundary table and
Authority Accounting for the
transfer and quota invariants.
What capOS Is Not
A POSIX clone, a microkernel-shaped Linux replacement, or a production OS. It is a place to try the above choices and see which ones survive contact with real workloads. See Build, Boot, and Test to run it.