A bare-metal x86-64 exokernel written in Rust. MorpheusX boots via UEFI, takes direct control at ExitBootServices, and manages hardware with minimal abstraction. No OS underneath. No compat layers. Just syscalls and isolation. (and developer tears)
MorpheusX is not a kernel in the traditional sense. It's closer to exokernel philosophy: the kernel exposes hardware directly and lets applications manage their own resources within loose isolation boundaries.
The system boots through an 11-phase initialization that transforms raw x86-64 hardware into a runnable environment:
- Memory ownership (UEFI → bare metal)
- CPU state (GDT, IDT, exception handlers)
- Interrupt routing (8259 PIC)
- Heap allocation (4 MB primary + overflow)
- Timing (TSC via PIT calibration)
- DMA region (2 MB pre-allocated)
- PCI discovery
- Paging (adopt/manage page tables)
- Process scheduler (100 Hz preemptive)
- Syscall interface (SYSCALL/SYSRET)
- Root filesystem (HelixFS)
After boot, applications can spawn user processes, allocate memory, perform I/O, and communicate through syscalls.
- Minimize abstraction: Hardware is exposed. Page tables, interrupts, CPUs are visible resources.
- No hidden state: All major structures (process table, memory registry, scheduler state) are explicit and audited.
HelixFS (helix/) — Log-structured filesystem with circular 1 MB segments, dual superblock, per-inode versions, AHCI/VirtIO block drivers.
Hardware Init (hwinit/) — Memory registry, paging manager, process table, scheduler, GDT/IDT/PIC setup, TSC calibration, syscall dispatcher.
Bootloader (bootloader/) — UEFI entry, framebuffer setup, desktop event loop, shell, window manager, app registry.
Display (display/) — Framebuffer backend, 8x16 text console, pixel operations in ASM.
UI (ui/) — Canvas abstraction, window manager, widgets, themeable shell.
Network (network/) — Block device unification layer, boot-time VirtIO/AHCI probe, DHCP placeholder.
./setup-dev.sh -f # One-time environment setup
cargo build --release --target x86_64-unknown-uefi -p morpheus-bootloaderRequires: Rust 1.75+, x86_64-unknown-uefi target, QEMU + OVMF for testing.
./setup-dev.sh runBoot messages appear on serial (stdout in QEMU). A 1920x1080 framebuffer displays the shell. Type help for commands; open storage launches the Storage Manager.
See CONTRIBUTING.md for:
- Setting up your development environment
- Code style and conventions
- Testing and CI workflow
- Creating pull requests
TL;DR: Fork → branch → cargo clippy → commit → PR.
For technical assistance, please contact our 24/7 support team.
Licenced under GPLv3 :)
To all the SysAdmins who showed me the way. 💙