TheseusOS is a teaching-focused x86_64 operating system written in Rust.
The current repository boots as a single UEFI executable: the bootloader gathers firmware and platform state, copies a handoff structure into persistent memory, exits boot services, and then directly calls the kernel entry point inside the same unified binary.
This repo is also explicitly a learning project, so some docs and subsystems are in motion. For binding architectural truth, prefer:
docs/index.mddocs/axioms/docs/plans/docs/map.md
TheseusOS currently consists of three workspace crates:
- bootloader — UEFI entrypoint and boot-time discovery/transition logic
- kernel — higher-half kernel bring-up, runtime subsystems, and device support
- shared — handoff ABI, shared constants, and utility code used across boot phases
- Single-binary UEFI boot flow with direct
kernel_entryhandoff - Boot-time collection of graphics, ACPI, firmware, memory-map, CPU, and hardware-inventory data
- Higher-half kernel transition with explicit paging setup and
PHYS_OFFSET - Temporary-heap to permanent-heap allocator transition
- APIC-based interrupt bring-up with GDT/TSS/IDT installation
- Driver framework with PCI enumeration, USB/xHCI bring-up, and serial/monitor tooling
- QEMU workflows via the in-repo
theseus-qemurunner plus older helper scripts still present for compatibility
Preferred current path:
# Headless run via the Rust QEMU runner
cargo run -p theseus-qemu -- --headless
# Print the resolved QEMU command
cargo run -p theseus-qemu -- print --headlessOlder compatibility/convenience paths still exist:
make run
make run-headed
./startQemu.sh headlessSee BUILD.md and docs/development-and-debugging.md for workflow details.
- Start at
docs/index.md - Use
docs/_inventory.mdfor evidence-only implementation facts - Use
docs/axioms/for binding truths - Use
docs/plans/for evolving work, mismatch notes, and risks - Use
docs/archive/for historical material that should not be treated as current authority
Some older markdown files and historical writeups still exist in the repository. They may be useful reference material, but they are not automatically current just because they exist. The docs architecture under docs/index.md is the intended front door.