nos_
ENRU

x86-64 · arm64 · C++20 · Rust

An OS kernel built to be safe by design

nos is an operating system kernel for x86-64 and arm64, written in C++20, Rust and assembly. It boots in QEMU, on KVM clouds, on Apple Silicon and on bare-metal servers — and it is growing into a cloud node that runs Linux guests under its own Rust hypervisor.

$ ./scripts/qemu-arm64.sh
…
rust_test: passed
SoftIrq: initialized
part: 0 partitions on 1 disks
MountRootFs: mounted ramfs on / (rw)
nanofs: bad magic 0x0
MountRootFs: mounted procfs on /proc (ro)
tcp: initialized, up to 64 connections
udpshell: started on port 9000
boot: complete

  _   _  ___  ____
 | \ | |/ _ \/ ___|
 |  \| | | | \___ \
 | |\  | |_| |___) |
 |_| \_|\___/|____/

DHCP auto on eth0...
DHCP ip: 10.0.2.15
DNS resolver started, server: 10.0.2.3
$ █
The end of a real arm64 boot log under QEMU.

Why another kernel

Linux is written in C: a superb language that leaves every bounds check, every lifetime and every lock to the programmer, across tens of millions of lines. Its vulnerabilities no longer come one at a time.

7,856

Linux kernel CVEs published in 2026 by 22 October, more than in all of 2025 (5,675)

3,754

of them in August and September alone; the first quarter had 644

8

Linux kernel vulnerabilities CISA added in 2026 to its catalog of those exploited in the wild

AI has made finding the mistakes cheap. In May, Linus Torvalds wrote that the “continued flood of AI reports has basically made the security list almost entirely unmanageable”. In August, a fix that credits an AI system closed Vghost (CVE-2026-74580): a stale cache in vhost that gave local users root and, behind a virtual IOMMU, let a guest write out of bounds into the host's QEMU — through the very layer a hypervisor exists to keep shut.

Our approach

≈ 90,000 lines

Minimal, so it can be checked

About 90,000 lines of code for the whole kernel, its drivers, network stack and filesystems, and its hypervisor — not tens of millions. Small enough to review whole, and far easier to verify.

63% Rust · 1.7% of it unsafe

Safe Rust by default

63% of the code is Rust, and only 1.7% of its lines are inside unsafe blocks — concentrated in the crates that touch the hardware and the C ABI, and counted on every change. Out-of-bounds writes, use-after-free and data races cannot be written in the rest: the hypervisor's logic has 4 unsafe sites in 18,929 lines.

4 host fuzzers in CI

Fuzzing as a first-class citizen

Four fuzzers build the kernel's own sources for the host — the hypervisor's devices and run loop, the network stack, the filesystems, the C++ under ASan and UBSan — and run in CI on every change, with long campaigns between.

UBSan · RUSTUB · W^X

Checked on every change

UBSan and checked-unsafe builds boot in CI on both architectures, every subsystem has a gate of its own, and a broken invariant is a panic that names its site — never a silent wedge.

Linux keeps running — as the guest. What changes is the host under it, the one layer that must never fall: small enough to check, and built so that whole classes of its bugs cannot be written.

Sources: NVD: the kernel.org CNA's CVEs, e.g. September 2026 · linux-cve-announce · CISA KEV catalog · Linus Torvalds, 17 May 2026 · the Vghost fix (Assisted-by: tencentos-corvus-ai) · Tencent Zhuque Lab on Vghost · nos: scripts/sloc.py, scripts/unsafe-count.py

What is inside

No undefined behaviour, no memory corruption, no data races, no deadlocks, no silent failure: every design here is picked for that first.

Where it runs

Developed against emulators and clouds, and proven on real machines — two of which have no console but the network.

Virtual

  • QEMU / KVMx86-64, BIOS and UEFI
  • Apple SiliconQEMU virt with HVF
  • Google CloudKVM, virtio
  • Yandex CloudKVM, virtio

Bare metal

  • Dell Latitude 5480UEFI, framebuffer console, USB keyboard
  • Hetzner EX44Intel, RTL8125, VT-x guests; network-only console
  • Hetzner AX41AMD Ryzen, Intel I210, AMD-V guests

Roadmap

From a kernel that boots on servers to a bare-metal cloud node: no Linux on the host, Linux guests under a Rust hypervisor, live update underneath them.

  1. 00Done

    Bare metal

    nos boots and stays manageable on real server hardware.

  2. 01Ongoing

    Rust strategy

    New code in Rust, unsafe confined to a few small crates.

  3. 02Done

    HAL + arm64

    A portability layer and arm64 under QEMU and HVF, before the hypervisor.

  4. 03In progress

    Hypervisor

    A Rust hypervisor on AMD-V and VT-x boots Linux guests.

  5. 04Planned

    Control plane

    An HTTP API creates, destroys and consoles virtual machines.

  6. 05Planned

    Live update

    The host kernel replaced under running guests in under 100 ms.

From the blog

All posts

Learn more