NumericalOS

The graph is the init system

NumericalOS is a Linux userspace with no unit files. Every supervisable thing, every boot ordering constraint, every health rule, and every remediation path is a node in a graph. One exported file is the entire configuration.

Status: bootstrap logic tested; boot unverified. 141 tests pass. Nothing here has been booted, on hardware or in emulation, by its authors — they built it on a machine with no compiler, no container runtime, and no WSL. What that means, precisely.

What replaces /etc

A conventional init reads unit files. NumericalOS reads one artifact, numos.state, produced deterministically from four graphs:

META      policy      what MAY run - admission, capability grants, trust roots
GENESIS   bring-up    ordered BootPhase chain: mount, dev, net, clock, identity, join
MGS       steady      units, derived from the ops registry rather than authored
SHADOW    failure     health predicates, degraded-state definitions, residuals
ASEC      self-heal   a SHADOW fire opens a swarm invocation; remediation lands back
The quartet. Changing what a machine does is a node edit, not a file edit.

The claim is literal rather than aspirational in one specific way: the bootstrap's own CPU-architecture table is generated from ArchTarget nodes. Adding an architecture is a data insert, not a code change.

Smallest bootstrap, all chip infrastructures

Those two goals pull against each other, so the boot chain satisfies them with a floor and a fast path rather than picking one:

[kernel] -> initramfs /init = bootstrap.sh
  1. mount /proc /sys /dev
  2. uname -m -> canonical arch, via the generated ArchTarget table
  3. prefer  numinit-$ARCH   (static, small)
     else    busybox-static-$ARCH + numinit.sh
  4. sha256 verify -- FAIL-CLOSED: mismatch halts with a named reason
  5. load numos.state -> verify content hash
  6. exec numinit as PID 1
The shell floor runs anywhere a shell runs; the static binary is the small fast path. Coverage is the union, which is what makes "all chips" honest.

Nine architectures are in the registry today — x86_64, aarch64, riscv64, arm, powerpc64le, s390x, mips64el, x86, loongarch64. Where no static build is published, the busybox fallback carries that architecture. That fallback is the mechanism, not a caveat.

Fail-closed, with named reasons

An unverified init is worse than a halted machine. Every abnormal path stops and says why:

conditionbehavior
artifact or state hash mismatchhalt, named reason on console
unknown architecturehalt, naming the unrecognized uname -m
dependency cycle or dangling unit referencehalt — rejected at export, and again at boot
phase failure, on_failure=halthalt, naming phase and unit
phase failure, on_failure=degradecontinue; the node advertises itself degraded

Build it yourself

This site ships knowledge, not artifacts. There are no images here to download. Instead there are five skills that drive your agent through a build on your machine:

target-classifier

Probes your real toolchain and routes to exactly one target. Never assumes Docker exists.

build-oci

Container image for Docker, Podman, or containerd. Fastest honest feedback loop.

build-initramfs

The userspace half: a cpio whose /init is the bootstrap.

build-iso

Hybrid BIOS/UEFI media, USB-writable. Pairs a kernel with the initramfs.

verify-boot

QEMU smoke test. The only skill permitted to claim a boot — and only for what it watched.

Read the skills · the multi-agent protocol · download the bundle

Get the source

git clone https://numericalos.com/numericalos.git
cd numericalos
python3 -m unittest discover -s tests

Served as static files over dumb-HTTP — no forge, no account, no server-side code. You can verify what you got against its history before running any of it, which is the property that matters when the thing you are building becomes PID 1. Browse it here at commit c8f27f3.