https://www.youtube.com/@offlinemark
This is my personal roadmap for my OS development project. It should not be confused with a roadmap for how to learn OS development!
Milestone 1: JOS
- โ Lab 1: Boot
- โ Lab 2: Memory Management
- โ Lab 3: User Environments (Processes)
- โ Lab 4: Preemptive Multitasking
- โ Lab 5: Filesystem, Spawn, Shell
- โ Lab 6: Network card driver
Milestone 2: Modern OS Foundation
- โ
Try bootloaders
- โ Multiboot V1 (Grub)
- โ Multiboot V2 (Grub)
- โ Limine (BIOS)
- โ Limine (UEFI)
- โ C++ support in JOS
- โ Port to x86_64
- โ
Modern LLVM toolchain
- โ Clang instead of GCC
- โ cc-runtime (compiler-rt) instead of libgcc
- โ LLD Linker
- โ LLDB Debugger
- โ Port JOS to CMake
- โ
Third party C/C++ libraries
- โ STL
- โ ETL
- โ Frigg
- โ Musl libc
- โ Unit test infrastructure (For generic code – runs in userspace on dev machine)
Milestone 3:
- โ Basic virtual address space management (mapping)
- โ
Basic Interrupts/Exception support
- โ
Task infrastructure
- โ Task structure
- โ Task stacks
- โ Task stack guard pages
- โ Scheduler infrastructure
- โ
Task infrastructure
- โ
Basic first scheduling policy (Round Robin)
- โ Deferred task cleanup
- โ
Cooperative multitasking
- โ taskYield() – cooperative yield
- Task Scheduler APIs
- โ
taskExit()
- โ Safe stack cleanup (Deferred task destruction)
- โ taskWaitForTaskExit()
- โ
taskSleepCpuCycles()
- No timer interrupt yet. Wake up happens in the scheduler, which needs to be driven by some polling task.
- โ Integration test infrastructure (Runs in kernel in QEMU – special boot mode)
- โ
taskExit()
- โ
Preemptive Multitasking
- โ LAPIC Timer Interrupt
- Concurrency Primitives
- Spinlock
- Mutex
- Semaphore
- Condition Variable?
- Drivers
- Serial console
Future:
- Processes (Task Groups)
- More advanced scheduler
- Audio
- USB
- Kernel Objects
- SMP / Multicore
- Per CPU State (GS)
- Coroutines (In Kernel?)
- Userspace
- IPC
- Graphics
- Drivers
- Filesystem
- ASLR
- Accelerate syscalls (Syscall instruction)
- ARM64
- RISCV
