A small UNIX-like operating system, written to be read.
AquilaOS is a kernel, a C library and the tools around them. It's meant to be boring: the kernel does what UNIX kernels have done for decades, the plain way, in code small enough to read in full, with a document for each part of it. It runs on x86 and aarch64, on several CPUs, and runs dash, bash, curl, X and Doom.
- Version
- 0.0.2
- Architectures
- x86-64, i386, aarch64
- CPUs
- up to 32
- Standard
- POSIX.1-2008
- License
- Public domain (CC0)
- Updated
- October 2026
Booting
The x86-64 kernel booting in QEMU on four CPUs, with its console on the serial port. These lines are from the kernel's log, trimmed.
x86: Welcome to AquilaOS! kernel: 255 MiB of memory, up to 0x0000000010000000 x86_64: 256 MiB in the direct map apic: local APIC 0 at 0x00000000FEE00000, 1 I/O APIC(s), the first at 0x00000000FEC00000 (GSI 0, 24 pins) x86: interrupts through the apic smp: 4 CPUs vt: 6 terminals of 80x25 on VGA text mode kdev: registered blkdev 3: ata net: lo: loopback, 127.0.0.1/8 net: eth0: 52:54:00:12:34:56 e1000: 8086:100E at 0x00000000FEBC0000, irq 11, link up kernel: loading init process clock: hpet, 10000000 fs a count AquilaOS version v0.0.2 login: root Welcome to AquilaOS! # uname -a AquilaOS aquila v0.0.2 Oct 24 2026 15:27:52 gcc 15.3.0 x86_64 #
Start here
You need gcc, ld, cpio and QEMU, nothing else. In about a minute, make run-min builds the kernel with your gcc and boots it with one tiny program: a shell with no C library, each of its commands a system call or two.
- Read the documents, in order: how the kernel boots, takes interrupts, manages memory and processes, and the rest, each with pointers into the code.
- Change something: add a command to the tiny shell, or a
printk()to a system call, and boot it again. - Debug it:
make debugboots the same kernel waiting for gdb, and a panic prints a stack trace. - Test it:
make testruns the kernel's test suite in QEMU. - Build the whole system: a cross toolchain, then the C library, the shell, the utilities and the ports.
Features
Kernel
- Monolithic, with processes, threads and kernel threads
- SMP: up to 32 CPUs, with one kernel lock
- Sessions, process groups and job control
- POSIX signals, delivered on return to user mode
- Copy-on-write, demand paging and
mmap - APIC with MSI; a clock to the nanosecond from the TSC or HPET
Storage and devices
- ext2 and minix, read and write; tmpfs, procfs, devfs, devpts
- Virtual terminals on the framebuffer or VGA text mode
- ATA disks, PS/2 input, 8250 and PL011 UARTs, VESA framebuffer
Network
- Intel e1000 and e1000e Ethernet
- IPv4, ARP and ICMP; UDP and TCP (RFC 9293)
- DHCP client and DNS resolver
User space
- newlib 4.6, dash, sbase, runit as init
- About 45 ports: bash, curl with TLS, tcc, Lua, X with dwm and st, Nano-X, UnixBench, Doom