Skip to Content
Viewing release/v0.5.0-alpha.3 docs — not the stable branch. Changes vs main · Go to main
axiomOSrelease/v0.5.0-alpha.3Getting StartedOverview

Getting Started

Relevant source files

axiomOS is a bare-metal Rust kernel with runtime-programmable behavior through verified eBPF programs. This section walks through the toolchain, how to build the images, how to boot them in QEMU, and how to put the kernel on a Raspberry Pi 5.

axiomOS is a research kernel under active hardware bring-up. The README states it is not production-ready. Raspberry Pi 5 testing is manual; there is no hardware-in-the-loop CI.

Supported targets

ArchTargetsStatus (from README)
x86_64QEMU/OVMF, VMware, bare metalBoot, userspace, VirtIO; Limine (UEFI and BIOS), APIC
AArch64QEMU virt, Raspberry Pi 5Primary hardware target; GICv2/v3, RP1 GPIO/UART/PWM, device tree boot
RISC-VQEMU virtEarly bring-up, boot only, standalone demo kernel

The target manifest in ci/manifests/targets.toml classifies them more conservatively: x86_64 QEMU/OVMF is supported, Raspberry Pi 5 is supported after HIL, AArch64 virt is experimental (kernel check only), and the RISC-V demo is experimental standalone.

Prerequisites

Rust toolchain

The toolchain is pinned in rust-toolchain.toml to a dated nightly. rustup installs it automatically on first cargo invocation in the repository.

ItemValue
Channelnightly-2026-07-02
Componentsrustfmt, clippy, llvm-tools-preview, rust-src, miri
Targetsx86_64-unknown-none, aarch64-unknown-none

The channel is deliberately not floating: a bare nightly once let a new clippy rule silently turn the lint job red. Bump it deliberately. A nightly is required because the root manifest uses artifact dependencies (artifact = "bin"), enabled via bindeps = true in .cargo/config.toml.

System tools

The root build.rs assembles a root filesystem image and, for x86_64, a bootable ISO. A clean machine without these tools fails inside build.rs.

ToolUsed for
gitCloning the pinned Limine bootloader checkout
makeBuilding Limine
mke2fs (e2fsprogs)Creating the ext2 rootfs image
xorrisoBuilding the bootable ISO
qemu-system-x86_64 / qemu-system-aarch64Running the images
llvm-objcopy or rust-objcopyProducing kernel8.img for the Pi 5

Optional: GDB or LLDB for --debug; cargo-binutils if you need rust-objcopy.

# Debian/Ubuntu example from CONTRIBUTING.md sudo apt update && sudo apt install -y xorriso qemu-system

Pinned external inputs

ci/manifests/build-inputs.env pins the inputs that build.rs fetches:

InputValue
LIMINE_REFv9.6.7-binary
LIMINE_REVISIONee5d29cd0a8034612dcd1df3f00052480db785c5
OVMF_TAGedk2-stable202511-r2

BPF trust key

Kernels are signed-only by default. The kernel embeds a 32-byte Ed25519 public key at compile time from the path in AXIOM_BPF_TRUSTED_KEY_PATH (kernel/src/bpf/trust.rs), and scripts/build/rpi5.sh and scripts/run/virt.sh refuse to run without it. The bpf-unsigned-development feature compiles that requirement out; see Building.

First run

# Build and run in QEMU (x86_64) cargo run # Raspberry Pi 5 build (kernel8.img with embedded ext2 rootfs) cargo xtask build rpi5

The cargo xtask alias is defined in .cargo/config.toml as run --locked --package xtask --. Per docs/operations/README.md, cargo xtask is the canonical interface and scripts under scripts/ are its implementation helpers.

Where to go next

Last updated on