Roadmap

Development plan from bare-metal boot to self-hosting OS.

Table of contents

Sprint Overview #

SprintFocusStatusDescription
1Boot & Serial✅ CompleteToolchain, bootloader, serial UART, framebuffer console
2Memory✅ CompletePMM bitmap allocator, VMM page tables, kernel heap
3Interrupts✅ CompleteGDT/TSS, IDT, ACPI/MADT, LAPIC, I/O APIC, W^X remap
4Scheduler🔲 PlannedProcesses, threads, tickless scheduler, SMP
5Capabilities🔲 PlannedCapability tables, IPC channels, memory grants
6Syscalls🔲 PlannedSYSCALL/SYSRET, ELF loader, Ring 3 entry
7Userspace🔲 PlannedInit process, libmnos, first userspace driver

Sprint 1 — Boot & Serial Output ✅ #

Get the kernel running, prove it with visible output.

Sprint 2 — Memory Management ✅ #

Teach the kernel to manage physical and virtual memory.

Sprint 3 — Interrupts & Exceptions ✅ #

Handle CPU exceptions and hardware interrupts safely.

Sprint 4 — Processes & Scheduler 🔲 #

Run multiple threads of execution, share the CPU fairly.

Sprint 5 — Capabilities & IPC 🔲 #

The security model — unforgeable tokens and message passing.

Sprint 6 — Syscall Interface & Userspace 🔲 #

Cross the Ring 0/Ring 3 boundary.

Sprint 7 — Init Process & First Program 🔲 #

Life outside the kernel.

Future Milestones #

These features are planned for after Sprint 7 completes the core OS:

MilestoneDescription
VFS ServiceVirtual filesystem abstraction in userspace
InitramfsIn-memory tar filesystem for boot-time binaries
Disk DriverAHCI/NVMe driver in userspace
Filesystemext2 or FAT32 implementation as userspace service
NetworkingTCP/IP stack as a userspace service
ShellBasic interactive command-line shell
USB HIDKeyboard and mouse drivers
GPU DriverIntel HD 405 framebuffer driver
CompositorWindow manager / display server
Rust std PortPort Rust's standard library to MinimalOS
Self-hostingCompile MinimalOS on MinimalOS

Contributing #

Contributions are welcome! The project is structured around sprints — each sprint focuses on a self-contained subsystem.

How to Contribute

  1. Check the current sprint's open items above
  2. Read the relevant subsystem documentation
  3. Fork the repository and create a feature branch
  4. Implement your changes with tests where applicable
  5. Submit a pull request

Development Guidelines