Status · 2026-10-25

On the first board.

V0 to V5 are done in QEMU on amd64 and arm64: the kernel, the userland, the bring-up link, Taisce on disk and the desktop. V6 has begun on the Orange Pi 6 Plus (CIX Sky1), and the desktop already runs there over HDMI. A milestone is done when its exit criteria pass under vx ci and every budget it introduces has a running check.

rv64 builds everything; its QEMU suite is paused until full Swift (tier 1) runs there. The live record, with exit criteria and known issues, is docs/roadmap.md.

Now  V6 · Orange Pi 6 Plus

VectraOS boots on the board from a one-shot boot entry beside its FreeBSD, on all 12 cores, through the console that DBG2 names. The kernel's self-tests pass there, after two fixes QEMU couldn't show. A boot is a production boot unless croi.test= names the tests to run. On the board today:

  • GICv3 with the ITS, both SMMUv3s, and PCIe through the generic ACPI host
  • Ethernet on the RTL8126, DHCP included: power-on to the network in 5.4 s, down from 33
  • The bring-up link: vx cpu, log -f, and warm boot through vx remote boot
  • Taisce on NVMe at /data
  • USB keyboards and mice, through xHCI and hubs
  • The log on an HDMI console
  • The Mali-G720 powered up through firmware's SCMI agent and probed
  • The display engine firmware lit, flipped by linlon(3), and Radharc, rio and the apps on it, composited on the CPU
  • power(8): each CPU at its highest performance level, the thermal trips honoured, with power-off at critical

Next: the board's own display path (mode setting, hotplug, scan-out through the display SMMU), the native suite through the serial budget scrape, the desktop budgets enforced on real hardware, and VectraOS measured against stock and tuned Ubuntu and FreeBSD on the same board.

Done in QEMU

Done  V0 · Ground

croí boots from this repository and passes its self-tests on amd64, arm64 and rv64. vx, the size budgets and the bench were there from the first commit.

Done  V1 · Setup-engine kernel

154 system calls cut to 91, one family at a time, each with its replacement in place first. The hot calls are batched; the one ring is in Swift and C23, checked by a model checker; ports and the debuglog are rings.

Done  V2 · Userland base

One ABI, the floor, libc, dlopen and the trace; typed IPC, the Node protocol with bulk rings, and the launcher; rc and its commands; drivers under devmgr. Spawn → main in 79 µs against a 200 µs budget. Tier 1, meaning C, C++ and full Swift programs, runs on amd64 and arm64.

Done  V3 · Bring-up link

The network stack serving /net, 9gate over Noise IK, and cpu: vx cpu gives rc on a node with the terminal's files at /mnt/term. Warm boot into a new kernel without firmware, through vx remote boot.

Done  V4 · Taisce on disk

The block class and virtio-blk; Taisce at /data across reboots, with its queries, live queries and mapped files. A 4 KiB read takes 310 ns, and a live query sees an update in 56 µs.

Done  V5 · Desktop

Radharc, the SDK and Kit, rio and vt, Tracker, Deskbar, Settings, tiled and spatial workspaces, the themes, the GPU through Venus, the guide and hot reload. Under KVM a key reaches the glass in 1 frame, and a cold start takes 5.5–16 ms. Tier 1 programs now share their libraries.

What runs today
  • A capability microkernel after Zircon, on three architectures, with SMP, KASLR, W^X, PAC and BTI
  • Scheduling contexts, VMOs and the pager, channels, ports and futexes
  • User-space drivers (IRQs, MSIs, DMA) behind VT-d, AMD-Vi, SMMUv3 and the RISC-V IOMMU
  • The one ring, carrying port packets, the debuglog, trace records and stdio
  • The floor, libc, dlopen, typed IPC, the Node protocol, the launcher and rc
  • C, C++ and full Swift programs, linked against shared libraries
  • Drivers for ACPI, PCI, virtio, NVMe, the RTL8126, xHCI, SCMI, the Mali GPU and the Linlon display
  • /net, 9gate and cpu: a node's shell with your terminal's files
  • Taisce on virtio or NVMe disks, with typed attributes and live queries
  • The Radharc desktop, two themes plus high contrast, and the manual as hypertext
  • Hot reload: a program reloads its own code with its state kept
  • trace, log -f and /proc
How it's tested
  • Kernel self-tests check each mechanism at boot, when croi.test= asks for them.
  • User-space tests are Embedded Swift suites with named checks, run inside the booted system.
  • vx test --changed runs only what a change risks. The full suite, vx ci, closes a milestone.
  • No architecture's QEMU tests may take over 5 minutes, and a check that flakes is removed, not retried.
  • The kernel's link fails if any ARC entry point or OptionSet survives.
  • vx man --check fails when a behaviour has no manual page.
  • Every boot reports its budgets, and vx bench judges them against the machine's own history.
  • On the board, board-test checks devmgr, the IOMMUs, the link, DHCP, the disks, the GPU and the display.
The ledger
~284klines, about 206k of them from our own earlier projects, counted by vx loc
91system calls, down from 154; the ceiling is published and only goes down
132dated decisions in the log
1pinned toolchain: Swift 6.4.0, with its own clang and lld

vx loc publishes the line count per component. Each file lifted from croí, todhchaí or NeoVectra is recorded in IMPORTS.tsv against its source commit, so git diff shows exactly what changed.