An educational x86 operating system written from scratch in C and x86 Assembly.
The goal of this project is to understand how operating systems work by implementing every major component manually, starting from the boot and gradually building toward a complete kernel. Rather than relying on existing bootloaders or operating system frameworks, this project uses a custom bootloader and focuses on learning the low-level details of computer architecture.
- Make
- QEMU
- Docker
- GDB (i prefer pwndbg) for debuging
make buildmake runOr build and run in one command:
make rbmake debug
make gdbThe project is being developed incrementally. Each subsystem is implemented from the ground up and integrated into the kernel as the project progresses.
-
Custom bootloader
-
Protected mode initialization
-
GDT
-
Interrupt handling
-
IDT
-
PIC
-
VGA driver
-
PS/2 keyboard driver
-
Console
-
TTY
-
Timer driver
-
Sleep functionality
-
Common kernel libraries
-
stdio -
printfand related output functions -
string -
memcpy,memset,memcmp, and related functions
-
-
Physical memory management (PMM)
-
Virtual memory management (VMM)
-
Kernel heap
- Implement the kernel scheduler
- Implement task/thread management
- Implement context switching
- Support multiple kernel threads
- Integrate scheduling with the timer
- Implement the shell
- Implement command parsing and execution
- Support multiple terminals
- Support multiple independent shell sessions
- Design the filesystem interface
- Implement a filesystem
- Implement file and directory operations
- Implement a file manager
- Define the kernel/userspace boundary
- Implement userspace processes
- Implement system calls
- Implement userspace memory management
- Run programs in userspace
- Implement basic userspace utilities
- Process management
- IPC
- Synchronization primitives
- More hardware drivers
- Networking
- Security and permissions