Operating System written for me
Go to file
Daniel Samson 59104dd988
refactor
2026-07-11 04:32:17 +01:00
boot Update stale /sbin/ references to real FHS paths 2026-07-10 18:13:24 +01:00
docs refactor 2026-07-11 04:32:17 +01:00
library refactor 2026-07-11 04:32:17 +01:00
system refactor 2026-07-11 04:32:17 +01:00
test adding clock system call 2026-07-11 03:43:33 +01:00
tools Post-reorg cleanup: POSIX layer, and naming fixes 2026-07-10 13:33:06 +01:00
.gitignore gitignore: ignore .claude/ and .github/ 2026-07-10 14:09:38 +01:00
.zig-version Pin zig version to 0.16 LTS 2026-07-03 13:49:47 +01:00
README.md Split the `system` contract into boot-handoff / abi / device-abi 2026-07-10 18:08:51 +01:00
build.zig Decode ACPI _HID names in device discovery 2026-07-10 21:44:44 +01:00
build.zig.zon started project with basic efi setup 2026-07-01 18:32:56 +01:00

README.md

DanOS

Codename: Shodan Version: 1

A small operating system, written from scratch in Zig — a bootloader (boot/) and a microkernel (system/kernel/), sharing a neutral handoff contract (system/boot-handoff.zig). It boots x86-64 via UEFI, and so far has a framebuffer console, a physical frame allocator, its own paging with W^X permissions, interrupt/exception handling, a LAPIC timer, a kernel heap, a fixed-priority preemptive scheduler, and in-kernel IPC channels. See docs/ for how each piece works.

Prerequisites

  • Zig 0.16.x — the build is pinned to this line (.zig-version); other minor versions are rejected, because Zig makes breaking changes between releases pre-1.0. A toolchain manager such as zvm or zigup will pick up .zig-version automatically.
  • QEMU (qemu-system-x86_64) — to run and test the kernel. On macOS, brew install qemu also bundles the OVMF firmware below.
  • OVMF UEFI firmware — the edk2-ovmf package (Arch), ovmf (Debian/Ubuntu), or edk2-ovmf (Fedora); on macOS it ships inside the Homebrew qemu formula. Both the build and the test harness probe the known Arch/Debian/Fedora/macOS layouts and use the first that exists, so no configuration is normally needed. Override with -Dovmf-code= / -Dovmf-vars= (build) if yours lives elsewhere.
  • Python 3 — for the QEMU integration test harness.

Build

zig build

Produces a FHS-shaped zig-out/ that is the danos filesystem and the boot volume: the UEFI bootloader at zig-out/EFI/BOOT/BOOTX64.efi, the kernel at zig-out/system/kernel, init at zig-out/system/services/init, drivers under zig-out/system/drivers/, and the initial-ramdisk at zig-out/boot/.

Run

Boot it in QEMU with OVMF (opens a display window):

zig build run-x86-64
# distro with OVMF elsewhere:
zig build run-x86-64 -Dovmf-code=/path/OVMF_CODE.fd -Dovmf-vars=/path/OVMF_VARS.fd

Test

zig build test            # host unit tests (the platform-independent shared code)
python3 test/qemu_test.py  # QEMU integration tests: boots the kernel and asserts
                           # on its serial output (see docs/testing.md)

The integration harness builds and boots the kernel once per test case, checking memory, the frame allocator, paging (incl. NX and the null guard), the heap, interrupts, and exception handling. It exits non-zero on any failure, so it drops straight into CI.

Documentation

Design notes explaining the why behind the code live in docs/ — start with docs/README.md.

San Serif Text "Dan OS" with a black karate belt around it.