Novium OS is a hobby x86 operating system built from scratch. The architecture is heavily inspired by Linux, but stripped down to the absolute basics. If you are into low-level engineering, feel free to open a PR or share ideas.
Note
Directories like mm/, ipc/, lib/, fs/, userspace/, and some files inside of arch/ currently contain stubs and placeholder files because the core kernel is still being built out.
If you want to find files that are not stubs, take a look around here (though a few placeholders are still mixed in):
I wanted to build a hobby OS that is clean, and easy to extend. The main idea is just to build it step by step without over-engineering the code.
Right now, I'm focusing on getting the core x86 foundations solid:
- Stable x86 booting
- Basic console output
- Handling early hardware input
- Setting up memory management and interrupts
- Long-term: a lightweight desktop interface
The layout is inspired by the Linux kernel, but kept pretty simple:
- arch/ - low-level boot and architecture-specific code
- drivers/ - basic hardware support
- kernel/ - core kernel code such as scheduling and interrupts
- init/ - startup and kernel entry
- include/ - shared headers and interfaces
- mm/ - memory management
- fs/ - filesystem work
- ipc/ - inter-process communication
- lib/ - utility code
- Documentation/ - notes and planning files
The current boot path is pretty straightforward:
boot.S -> setup.S -> bootstrap.S -> hw_init.c -> init/main.c
For a detailed walkthrough of each stage, see Documentation/boot_flow.md.
To compile and run Novium OS, you need a 32-bit capable compiler toolchain and the QEMU emulator
The primary development environment for Novium OS is Linux (Ubuntu/Debian) you can also use Windows with WSL.
sudo apt update && sudo apt install build-essential gcc-multilib qemu-system-x86 make bear You can build Novium OS on Windows using the Windows Subsystem for Linux (WSL2) and a native Windows emulator.
-
Install WSL2 (Ubuntu) by running this in PowerShell as Administrator:
wsl --install -
Download and install QEMU for Windows to its default path (
C:\Program Files\qemu). -
Open your WSL2 Ubuntu terminal and install the compiler tools:
sudo apt update && sudo apt install build-essential gcc-multilib make bear -
Link WSL2 to your Windows QEMU by running these lines in your WSL terminal:
echo "alias qemu-system-i386='\"/mnt/c/Program Files/qemu/qemu-system-i386.exe\"'" >> ~/.bashrc echo "alias qemu-system-x86_64='\"/mnt/c/Program Files/qemu/qemu-system-x86_64.exe\"'" >> ~/.bashrc source ~/.bashrc
Once your dependencies are installed (either on native Linux or inside WSL2), build the OS:
make clean
bear -- makelaunch the kernel directly through QEMU:
make runor run the raw floppy disk image to include the bootloader:
make run-raw- Boot chain and protected mode
- Basic console output
- Interrupt handling (IDT, PIC, IRQs)
- Keyboard and timer drivers
- VBE / framebuffer graphics
- Memory management
- Basic scheduling
- Simple filesystem
- Boot from a hard drive
- Lightweight desktop interface
See Documentation/todo.md for the detailed task list.
