Specimen / v0.1.0-dev · x86_64 · aarch64 · riscv64 · built no_std, panic=abort · ~95% rust

A kernel
whose behavior
can be proven ,
then loaded.

axiomOS is a bare-metal Rust kernel that admits new behavior at runtime — control loops, sensor pipelines, syscall policies — only after a verifier discharges proofs of termination, bounded memory, and safety. No reflash. No reboot. No surprises.

<—— what it is · the difference · use cases · thesis · architecture · verifier · status · roadmap ——> scroll · 01
§ 02 / in plain terms
no jargon required

A robot's brain runs on software
nobody dares to touch.

At the very bottom of every robot, drone, or factory machine sits a kernel — the core program that controls the motors, reads the sensors, and keeps everything in time.

Today, changing that kernel means rebuilding it, reinstalling it on the device, and praying nothing breaks. Teams are so afraid of bricking machines in the field that they freeze the kernel and never improve it. Bugs pile up. Motors stutter. Nobody can see why.

axiomOS changes that. It lets you send a small, new piece of behavior to a running machine — a better control loop, a safety rule, a debugging probe — without reinstalling anything or turning it off.

And before that new behavior is allowed to run, the kernel mathematically checks that it is safe: it can't crash the machine, can't loop forever, can't touch memory it shouldn't. If the proof fails, it never runs. That's the whole idea.

§ 03 / the difference
same hardware · opposite philosophy

Every robot runs Linux.
Every team freezes it.

Linux is a general-purpose kernel built for servers and desktops. axiomOS is purpose-built for machines that must change in the field without the risk of a reflash.

The Linux way
The axiomOS way
Freeze the kernel version
Kernel behavior is just programs
Rebuild to change behavior
Hot-load new programs
Reflash every device to deploy
Deploy over the network
Pray it works
Prove it safe before loading
Debug with printf and guesswork
Trace anything, live

Note — this is not eBPF bolted onto Linux. axiomOS is a kernel designed from day one around safe, verified, runtime-loadable programs.

§ 04 / what you'd do with it
concrete · on a real machine

Three things you cannot do on a frozen kernel.

Each is a verified program attached to a live kernel hook. Each reads plainly to anyone watching the machine; each maps to a real attach point in the kernel today.

A live debugging

A motor stutters in the field and nobody can reproduce it.

Attach a verified probe to the PWM driver on the running machine. Within seconds you see the exact timing anomaly that userspace logging never caught — no rebuild, no reflash.

hook pwm_event
B safety interlock

A limit switch must stop the motor even if the main software crashes.

A verified program on the GPIO interrupt enforces the cutoff inside the kernel. Userspace can crash, hang, or be compromised — the motor still stops. The rule cannot be bypassed.

hook gpio
C behavior change

You want to try a smarter scheduling policy without taking the robot offline.

Load a new policy program and attach it to the scheduler's task-switch hook on the live system. The change takes effect immediately. Roll it back just as fast.

hook sched_switch
§ 05 / thesis
four invariants

The kernel is a contract.

Most embedded systems offer a choice: a kernel you cannot modify, or a modification you cannot trust. We refuse the choice.

  1. 01

    Verified, not trusted.

    Every program attached to a kernel hook must discharge a proof: termination, bounded stack, validated memory access. The verifier is the contract; the kernel only runs what it has read.

  2. 02

    Edit at runtime, not at flash.

    Sensor fusion, control loops, safety policies — these change in the field. A reflash is a risk. We hot-attach verified bytecode to syscalls, timers, GPIO, PWM, and detach without reboot.

  3. 03

    Bare metal is the price of latency.

    Sub-millisecond control loops cannot tolerate Linux's millisecond-class jitter. axiomOS boots directly on hardware via Limine or device tree — no host OS, no firmware runtime, total control of the interrupt path.

  4. 04

    Rust as a load-bearing wall.

    Memory safety is structural. The kernel is ~95% Rust, no_std, panic=abort, with unsafe blocks documented and audited. Whole classes of kernel bugs — use-after-free, data races, iterator invalidation — never compile.

§ 06 / architecture
layered · monolithic · rust-bounded

Modular by trait,
monolithic by call.

Microkernel IPC at the control-loop layer costs hundreds of nanoseconds per message. axiomOS uses Rust trait boundaries to keep subsystems composable without paying the price of address-space crossings.

Open architecture doc
fig 03·a — stack
  • 00
    Userspace
    ELF binaries · standard syscall ABI
    ↗ trace
  • 01
    Process / Task manager
    Per-process address spaces · work-stealing tasks · fd tables
    ↗ trace
  • 02
    Subsystems
    eBPF · VFS · Network · IPC
    ↗ trace
  • 03
    Memory + Interrupts
    Frame allocator · per-process VM · interrupt routing
    ↗ trace
  • 04
    HAL
    trait Architecture { ... } · x86_64 · aarch64 · riscv64
    ↗ trace
  • 05
    Hardware
    CPUs · RAM · GPIO · Timers · Peripherals
    ↗ trace
unsafe blocks
audited & cited
trait surface
sealed per profile
§ 06·b / system diagram
programs as kernel components

A small trusted core,
everything else a program.

Behavior hardcoded into Linux — drivers, filters, scheduling policy — becomes loadable, verified programs in axiomOS. The kernel core stays minimal, auditable, and rarely changes.

fig 06·b — axiom kernel
Program layer · hot-loadable verified · bounded · safe
prog
Motor driver
prog
IMU filter
prog
Safety interlock
prog
Sched policy
▣ verifier — proven safe before load
Kernel core · trusted minimal · auditable · rarely changes
Physical memory
Virtual memory
Scheduler
Syscall dispatch
VFS + ext2
BPF verifier
ELF loader
Device manager
Architecture layer · trait Architecture
x86_64
aarch64 · RPi5
riscv64 · boot
Limine bootloader · device tree
Tier 0 · kernel core

Trusted. Contains the unsafe code and the verification engine. Minimal surface area.

Tier 1 · verified programs

Safe by construction. Cannot corrupt the kernel; can have logic bugs. Loaded and unloaded at runtime.

Tier 2 · userspace

Untrusted. Isolated by virtual memory. Applications, tools, services.

§ 07 / verifier
cfg · liveness · tnum · range refinement

Programs prove
themselves.

Before bytecode reaches the dispatcher, the verifier walks every path: building a control-flow graph, refining ranges across branches, tracking per-instruction liveness, and pruning equivalent states. A program that cannot be proven safe will never run.

paths
bounded
stack ceiling
512KB
interp overhead
~50ns / insn
jit overhead (aarch64)
<5ns / insn
kernel_bpf::verifier ▣ verified
// crates/kernel_bpf/src/verifier/walk.rs
fn verify_program(bytecode: &[u8]) -> Result<Verified, VerifyError> 
    let cfg = build_cfg(bytecode)?;

    // 01 — termination
    for node in cfg.nodes() 
        if has_backedge(node) && !has_bounded_iter(node) 
            return Err(VerifyError::UnboundedLoop);
        
    

    // 02 — tnum + range refinement after branches
    let abs = abstract_interpret(&cfg)?;

    // 03 — stack and memory invariants
    abs.assert_stack_depth(STACK_LIMIT)?;
    abs.assert_memory_access(&cfg)?;

    Ok(Verified  bytecode, abs )
fig 04·a · verifier entry ↗ crates/kernel_bpf
§ 08 / status
14/19 shipped

Where we
actually are.

Honest accounting. No "soon" markers. Either something is in `main` and exercised by tests, or it isn't.

shipped partial planned
  1. 01 Boot · x86_64 shipped
  2. 02 Boot · aarch64 shipped
  3. 03 Boot · riscv64 partial
  4. 04 Virtual memory + paging shipped
  5. 05 Interrupt handling · APIC / GIC shipped
  6. 06 Task scheduling · preemptive + cooperative shipped
  7. 07 Syscall interface shipped
  8. 08 Physical memory allocation shipped
  9. 09 Kernel heap shipped
  10. 10 eBPF runtime · interpreter + aarch64 JIT shipped
  11. 11 eBPF verifier · CFG · liveness · range refinement shipped
  12. 12 VFS abstraction · ext2 read-only shipped
  13. 13 Process / task separation shipped
  14. 14 VirtIO · block · net · console shipped
  15. 15 Raspberry Pi 5 · GPIO · UART · PWM shipped
  16. 16 Raspberry Pi 5 · SPI / I2C planned
  17. 17 USB stack planned
  18. 18 DMA partial
  19. 19 POSIX userspace compatibility partial
§ 09 / the big plan
research kernel · ASPLOS track

Where this is going.

The kernel boots, the verifier works, and the benchmarks are real. The one claim left to make undeniable: a verified program loaded into a running machine, changing its behavior live, all the way out to a robotics ROS2 topic — no reboot.

See the full roadmap →
  1. M1 Pi5 boot stability ■ done
  2. M2 Block device + rootfs mount ■ done
  3. M3 Userspace benchmark on Pi5 ■ done
  4. M4 Matched Axiom vs Linux table ■ done
  5. Live runtime-programmability demo □ in progress
target demo path → runtime-loaded program · live kernel hook · ring buffer · rk-bridge · /rk/* ROS2 topic
§ 10 / invitation
bring your own bytecode

Build a kernel
you can argue with.

Clone the repo, boot it under QEMU, attach a probe to a syscall, and watch the verifier read your code back to you.

$ git clone https://github.com/pro-utkarshM/axiomOS
$ cd axiomOS && cargo run
$ ./scripts/build-rpi5.sh # for hardware