Custom OS Blueprint – Full Development Roadmap
Version : 2.0 – Extended and corrected
Goal : A completely independent, modern operating system with a Windows-like GUI, developed from scratch.
Part 1: Architecture Target State
1.1 Boot & Platform Layer
Component
Description
UEFI Loader
Loads Kernel + Initramfs, gets Memory Map, GOP Framebuffer, ACPI Tables (RSDP/XSDT), then ExitBootServices()
Disk Layout
GPT with EFI System Partition (FAT32, 512MB) for Loader/Kernel + Root-Partition (CoW-FS)
Boot Protocol
Custom protocol or Multiboot2 compatible (decision required)
Kernel Command Line
Parsing for debug flags, root device, init path, log level
1.2 Kernel (Monolithic, Preemptive, SMP)
Subsystem
Features
CPU Management
SMP, APIC (Local + I/O), HPET, TSC Calibration, Per-CPU Data
Memory
4-Level Paging, User/Kernel Split, NX, W^X, Guard Pages, ASLR, Stack Canaries
Scheduler
Preemptive, Priorities, Fair Scheduling (CFS-like), Tickless optional
Processes/Threads
Separate Address Spaces, Kernel/User Threads, Handles, Signals or IPC alternative
Synchronization
Spinlocks (IRQ-safe), Mutexes, RW-Locks, Futex, Condition Variables, Semaphores
IPC
Pipes, Message Queues, Shared Memory (mmap), Unix Domain Sockets
Syscalls
Stable versioned ABI, SYSCALL/SYSRET, Central Capability Checks
Feature
Description
Serial Logger
Ring buffer, Log levels (DEBUG/INFO/WARN/ERROR/PANIC)
Panic Handler
Bluescreen with register dump, stacktrace, error code
GDB Stub
Remote debugging via Serial/Virtio console
Kernel Symbols
Symbol resolution for stacktraces
Assertions
KASSERT with file/line/message
┌─────────────────────────────────────────────────────────────┐
│ Userland │
├─────────────────────────────────────────────────────────────┤
│ VFS │ Network Stack │ USB Stack │ Input Framework │
├─────────────────────────────────────────────────────────────┤
│ Block Layer │ Net Layer │ HID Layer │
├─────────────────────────────────────────────────────────────┤
│ Virtio │ NVMe │ AHCI │ Virtio │ e1000 │ xHCI │ HID │
├─────────────────────────────────────────────────────────────┤
│ PCIe Enumeration │
├─────────────────────────────────────────────────────────────┤
│ ACPI / Platform │
└─────────────────────────────────────────────────────────────┘
Phase
Driver
Platform
1. QEMU
Virtio-blk, Virtio-net, Virtio-console
Emulation
2. QEMU+
AC97/Intel HDA (Audio), USB (xHCI emulated)
Emulation
3. Real HW
NVMe or AHCI, Intel e1000/i225, xHCI
Bare Metal
4. Optional
Realtek NICs, USB Storage, Basic GPU
Bare Metal
1.4 Filesystem Architecture
┌─────────────────────────────────────────────┐
│ Userland (libc) │
├─────────────────────────────────────────────┤
│ open/read/write/close/stat/mmap/ioctl │
├─────────────────────────────────────────────┤
│ VFS │
│ ┌─────────┬─────────┬─────────┬─────────┐ │
│ │ Mounts │ Dcache │ Icache │ Pcache │ │
│ └─────────┴─────────┴─────────┴─────────┘ │
├──────┬──────────┬──────────┬────────────────┤
│ CoW │ FAT32 │ DevFS │ ProcFS │
│ FS │ (EFI) │ │ │
└──────┴──────────┴──────────┴────────────────┘
Custom CoW Filesystem ("BetterFS")
Feature
Priority
Description
B-Tree Metadata
P0
Efficient lookup, O(log n)
Extent-based
P0
Reduced fragmentation
Copy-on-Write
P0
Atomic updates, no corruption
Checksums
P0
CRC32C or xxHash for all blocks
Journaling
P0
Intent-Log for crash recovery (or CoW-only)
Snapshots
P1
Cheap via CoW
Compression
P2
LZ4 (fast) or ZSTD (better)
Subvolumes
P2
Separate Namespaces
Quotas
P3
Per-User/Group Limits
Encryption
P3
Per-File or Per-Subvolume
┌──────────────────────────────────────────────────────────────┐
│ Applications │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Notepad │ │ Paint │ │ FileMgr │ │ Settings │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
├──────────────────────────────────────────────────────────────┤
│ Widget Toolkit │
│ Button │ Label │ TextBox │ ListView │ TreeView │ Canvas │
├──────────────────────────────────────────────────────────────┤
│ Window Manager │
│ Focus │ Z-Order │ Decorations │ Tiling/Floating │
├──────────────────────────────────────────────────────────────┤
│ Compositor │
│ Alpha Blending │ Shadows │ Animations │ VSync │ Damage │
├──────────────────────────────────────────────────────────────┤
│ Display Protocol │
│ Shared Memory Surfaces │ Input Events │ Damage Rects │
├──────────────────────────────────────────────────────────────┤
│ 2D Renderer │
│ CPU (SIMD) │ Rect │ Blit │ Line │ Text │ (later GPU) │
├──────────────────────────────────────────────────────────────┤
│ Font Engine │
│ TrueType Parser │ Rasterizer │ Glyph Cache │ Text Layout │
├──────────────────────────────────────────────────────────────┤
│ Kernel │
│ Framebuffer │ Input Events │ Shared Memory │ Timers │
└──────────────────────────────────────────────────────────────┘
Display Protocol (Wayland-like, simplified)
Message
Direction
Description
surface_create
App → Compositor
Register new window
buffer_attach
App → Compositor
Assign shared memory buffer
damage
App → Compositor
Report changed rectangles
commit
App → Compositor
Frame ready to render
input_event
Compositor → App
Keyboard/Mouse events
configure
Compositor → App
Window size changed
close
Compositor → App
Window should close
System Services (Daemons)
Service
Task
init
PID 1, starts all services, process reaping
devd
Hotplug, create device nodes
logd
Central log aggregation
netd
Network Stack (if running in userspace)
audiod
Audio Mixing, PCM Playback
compositor
Display Server
sessiond
Login, Session Management
Component
Description
libc
POSIX-like: stdio, stdlib, string, math, pthread
libsys
OS-specific APIs: Handles, IPC, GUI
Dynamic Linker
ELF, RELA, Lazy Binding, TLS
Shell
Minimal sh-compatible shell
┌─────────────────────────────────────────┐
│ Application Sandbox │
│ Capabilities │ Seccomp-like Filters │
├─────────────────────────────────────────┤
│ Process Isolation │
│ Address Space │ Handle Validation │
├─────────────────────────────────────────┤
│ Permissions │
│ UID/GID │ Mode Bits │ ACLs │
├─────────────────────────────────────────┤
│ Kernel Security │
│ W^X │ ASLR │ Stack Canaries │ NX │
├─────────────────────────────────────────┤
│ Boot Security │
│ Secure Boot │ Signed Kernel │
└─────────────────────────────────────────┘
Capability
Description
CAP_NET_BIND
Bind to ports < 1024
CAP_SYS_ADMIN
Change system configuration
CAP_FS_MOUNT
Mount filesystems
CAP_PROC_KILL
Kill foreign processes
CAP_HW_RAW
Direct hardware access
Part 2: Development Checklist (0 → 100%)
Rule : Work linearly. Each task must be "Done" before moving to the next.
Phase 0: Infrastructure (Weeks 1-2)
#
Task
Dependency
Done Criteria
0.1
Repository Setup (Git, .gitignore, README)
-
Repo exists, cloneable
0.2
Document Coding Standards
0.1
STYLE.md exists
0.3
Build Cross-Compiler (x86_64-elf-gcc)
0.1
make crosscompiler succeeds
0.4
Build System (Makefile/Meson)
0.3
make builds everything
0.5
QEMU + OVMF Setup
0.4
make run boots QEMU with UEFI
0.6
CI Pipeline (GitHub Actions)
0.5
Push triggers build + boot test
Phase 1: UEFI Loader (Weeks 3-5)
#
Task
Dependency
Done Criteria
1.1
UEFI "Hello World"
0.5
Text visible in QEMU
1.2
Serial Output in Loader
1.1
Output in QEMU Serial
1.3
Load Kernel Binary from Disk
1.2
Kernel in RAM, address known
1.4
Load Initramfs
1.3
Initramfs in RAM
1.5
Get and format Memory Map
1.4
Struct with usable RAM available
1.6
Get GOP Framebuffer Info
1.5
Address, Width, Height, Pitch known
1.7
Find and pass ACPI RSDP
1.6
RSDP pointer passed to kernel
1.8
Parse Kernel Command Line
1.7
Args struct passed to kernel
1.9
Execute ExitBootServices()
1.8
No UEFI crash, Kernel running
1.10
Document Boot Protocol
1.9
BOOT_PROTOCOL.md written
Phase 2: Kernel Basics (Weeks 6-10)
#
Task
Dependency
Done Criteria
2.1
Kernel Entry (64-bit Long Mode verified)
1.9
RIP inside Kernel code
2.2
Serial Logger (kprintf + Ringbuffer)
2.1
kprintf() working
2.3
Log Levels (DEBUG/INFO/WARN/ERROR)
2.2
Filterable via cmdline
2.4
Panic Handler (Message + Halt)
2.3
panic() halts cleanly
2.5
Register Dump on Panic
2.4
All GPRs + RIP + RFLAGS
2.6
GDT Setup (Kernel/User CS/DS, TSS)
2.5
lgdt executed
2.7
IDT Setup (all 256 Entries)
2.6
lidt executed
2.8
Exception Handlers (Stubs 0-31)
2.7
Div-by-Zero caught
2.9
Page Fault Handler (Basic)
2.8
PF shows Address + Error Code
2.10
Stacktrace on Exceptions
2.9
RBP-Chain walking working
2.11
Load Kernel Symbols
2.10
Symbol names in Stacktrace
Phase 3: ACPI & Timers (Weeks 11-13)
#
Task
Dependency
Done Criteria
3.1
Validate RSDP
2.11
Checksum OK
3.2
Parse XSDT/RSDT
3.1
List of all tables
3.3
Parse MADT (APIC IDs, I/O APICs)
3.2
Struct with all APICs
3.4
Parse HPET Table
3.3
HPET Base Address known
3.5
Parse FADT (for Shutdown)
3.4
PM1a/PM1b known
3.6
Initialize Local APIC
3.5
APIC enabled, SVR set
3.7
Initialize I/O APIC
3.6
IRQ Routing configured
3.8
Initialize HPET
3.7
HPET ticks
3.9
HPET as Timer Source
3.8
Interrupt fires periodically
3.10
TSC Calibration via HPET
3.9
TSC frequency known
3.11
APIC Timer Setup
3.10
Scheduler-Tick possible
Phase 4: Memory Management (Weeks 14-18)
#
Task
Dependency
Done Criteria
4.1
Early/Bootstrap Allocator (Bump)
3.11
Allocates pages for paging
4.2
Memory Map → Free List
4.1
All usable pages known
4.3
Physical Page Allocator (Bitmap)
4.2
alloc_page/free_page works
4.4
Buddy Allocator (optional, better)
4.3
O(log n) Allocation
4.5
4-Level Paging Setup
4.4
PML4 → PDPT → PD → PT
4.6
Kernel High-Half Mapping
4.5
Kernel at 0xFFFF...
4.7
Remove Identity Map
4.6
Only High-Half active
4.8
Physical Memory Mapping
4.7
Physical RAM mapped
4.9
vmalloc (Virtual Kernel Allocation)
4.8
Arbitrary sizes mappable
4.10
Kernel Heap (Slab Allocator)
4.9
kmalloc/kfree working
4.11
Slab Caches for common objects
4.10
task_struct, inode, etc.
4.12
Enable NX-Bit
4.11
Data-Pages not executable
4.13
Enforce W^X Policy
4.12
No RWX mappings
4.14
Guard Pages for Kernel Stacks
4.13
Stack Overflow → Page Fault
4.15
KASLR (optional)
4.14
Kernel base randomized
Phase 5: SMP & Synchronization (Weeks 19-23)
#
Task
Dependency
Done Criteria
5.1
Per-CPU Data Structure
4.15
GS-Base points to Per-CPU
5.2
BSP Stack + Per-CPU Area
5.1
BSP runs with custom stack
5.3
AP Trampoline Code (16-bit)
5.2
Code placed under 1MB
5.4
Send SIPI to APs
5.3
APs start
5.5
APs → Long Mode
5.4
APs enter 64-bit mode
5.6
AP Stack + Per-CPU Setup
5.5
Each AP gets its own stack
5.7
AP reports to BSP
5.6
All CPUs accounted for
5.8
Spinlock Implementation
5.7
Ticket or MCS
5.9
IRQ-safe Spinlocks
5.8
No deadlocks on IRQs
5.10
Mutex (sleeping)
5.9
Long-term locks
5.11
RW-Lock
5.10
Reader/Writer semantics
5.12
IPI Framework
5.11
CPU-to-CPU Messaging
5.13
TLB Shootdown
5.12
Sync Page Table changes
5.14
Verify Atomics
5.13
atomic_add, cmpxchg, etc.
Phase 6: Scheduler & Threads (Weeks 24-30)
#
Task
Dependency
Done Criteria
6.1
Thread Structure (task_struct)
5.14
Struct defined
6.2
Create Kernel Thread
6.1
Thread exists
6.3
Context Switch (save/restore)
6.2
Register swap works
6.4
Run Queue (per CPU)
6.3
Threads enqueued
6.5
Scheduler Tick Hook
6.4
Timer calls schedule()
6.6
Basic Round-Robin
6.5
Threads context-switching
6.7
Thread Priorities
6.6
Higher priority goes first
6.8
sleep()/wakeup()
6.7
Threads blockable
6.9
Wait Queues
6.8
Wakeup on events
6.10
Preemption Points
6.9
Kernel preemptable
6.11
Idle Thread (per CPU)
6.10
HLT when nothing to do
6.12
Load Balancing (basic)
6.11
Work stealing
6.13
CFS-like Scheduler
6.12
Fair Scheduling
6.14
Thread Exit + Cleanup
6.13
Resources freed
6.15
Thread Join
6.14
Waiting for a thread
Phase 7: Processes & Userspace (Weeks 31-38)
#
Task
Dependency
Done Criteria
7.1
Process Structure (pid, address space)
6.15
Struct defined
7.2
Address Space per Process
7.1
Separate PML4
7.3
User-Kernel Page Separation
7.2
User can't see Kernel
7.4
User Mode Entry (iretq)
7.3
Ring 3 reached
7.5
Syscall Mechanism (SYSCALL/SYSRET)
7.4
Syscall works
7.6
Syscall Dispatcher
7.5
ID → Handler mapping
7.7
copyin/copyout (safe)
7.6
User data validated
7.8
Syscall ABI v1 documented
7.7
SYSCALL.md
7.9
Handle/FD Table per Process
7.8
Handles managed
7.10
sys_exit
7.9
Process ends
7.11
sys_write (stdout)
7.10
Output works
7.12
sys_read (stdin)
7.11
Input works
7.13
"Hello World" Userspace Binary
7.12
Runs, prints, exits
7.14
ELF Loader (ET_EXEC)
7.13
Static binaries loadable
7.15
ELF Loader (ET_DYN, PIE)
7.14
Position-Independent Execs
7.16
User ASLR
7.15
Stack/Heap randomized
7.17
Stack Canaries (User)
7.16
Buffer Overflow Detection
7.18
sys_brk / sys_mmap
7.17
Heap allocation
7.19
mmap MAP_ANONYMOUS
7.18
Large allocations
7.20
mmap MAP_SHARED
7.19
Shared Memory
7.21
munmap
7.20
Free memory
7.22
mprotect
7.21
Change permissions
7.23
fork() or spawn()
7.22
New Process
7.24
exec()
7.23
Replace program
7.25
waitpid()
7.24
Wait for child
7.26
Zombie Reaping
7.25
No zombie leaks
7.27
Process Groups
7.26
Job Control basis
7.28
Signals OR Event IPC
7.27
Async Notifications
7.29
kill()
7.28
Send Signal/Event
7.30
Environment Variables
7.29
envp to main()
7.31
argv Passing
7.30
argc/argv to main()
7.32
Central Capability Checks
7.31
Syscalls guarded
Phase 8: IPC & Synchronization (Weeks 39-42)
#
Task
Dependency
Done Criteria
8.1
Pipes (unidirectional)
7.32
pipe(), read, write
8.2
Pipes (bidirectional)
8.1
Optional
8.3
Named Pipes (FIFO)
8.2
mkfifo, open
8.4
Message Queues
8.3
mq_send/mq_receive
8.5
Unix Domain Sockets
8.4
Local socket IPC
8.6
Futex (Fast Userspace Mutex)
8.5
FUTEX_WAIT/WAKE
8.7
Condition Variables (User)
8.6
pthread_cond_*
8.8
Semaphores (User)
8.7
sem_wait/post
8.9
eventfd / signalfd (optional)
8.8
Event Notification
8.10
poll / select
8.9
I/O Multiplexing
8.11
epoll (better, optional)
8.10
Scalable I/O
Phase 9: VFS & Filesystems (Weeks 43-52)
#
Task
Dependency
Done Criteria
9.1
VFS Interfaces (inode_ops, file_ops)
8.11
Abstraction defined
9.2
Superblock Structure
9.1
FS instance managed
9.3
Dentry (Directory Entry) Cache
9.2
Fast path lookup
9.4
Inode Cache
9.3
Cached metadata
9.5
Path Resolution
9.4
/path/to/file → inode
9.6
Mount Table
9.5
Mountpoints managed
9.7
Mount/Umount Syscalls
9.6
mount(), umount()
9.8
Root Mount (Initramfs)
9.7
/ is mounted
9.9
Ramfs (RAM-based, simple)
9.8
Tmpfs-like
9.10
DevFS (/dev)
9.9
Device Nodes
9.11
ProcFS (/proc)
9.10
Process Info
9.12
SysFS (/sys)
9.11
Kernel objects
9.13
stat / fstat / lstat
9.12
Read metadata
9.14
Permissions (mode bits)
9.13
rwxrwxrwx
9.15
UID/GID per File
9.14
Ownership
9.16
Permission Checks
9.15
Access validated
9.17
Directory Ops (mkdir, rmdir)
9.16
Create/delete folders
9.18
Link / Unlink
9.17
Hardlinks
9.19
Symlinks
9.18
Softlinks
9.20
Rename
9.19
Move files
9.21
Truncate
9.20
Truncate file size
9.22
FAT32 Read-Only
9.21
EFI partition readable
9.23
FAT32 Read-Write
9.22
EFI partition writable
9.24
Block Layer
9.23
Disk abstraction
9.25
Page Cache
9.24
Disk data cached
9.26
Writeback (async)
9.25
Background sync
9.27
fsync / fdatasync
9.26
Explicit sync
9.28
ACLs (optional)
9.27
Extended permissions
Phase 10: Block Drivers (Weeks 53-58)
#
Task
Dependency
Done Criteria
10.1
PCIe Enumeration
9.28
All devices found
10.2
BAR Mapping
10.1
MMIO registers accessible
10.3
MSI/MSI-X Setup
10.2
Interrupts configured
10.4
Virtio Common Setup
10.3
Virtqueues initialized
10.5
Virtio-blk Driver
10.4
Disk read/write in QEMU
10.6
Request Queue
10.5
Async I/O
10.7
Scatter-Gather I/O
10.6
Large transfers
10.8
AHCI Controller Init
10.7
Ports detected
10.9
AHCI Command Issue
10.8
Disk I/O works
10.10
NVMe Controller Init
10.9
Admin Queue
10.11
NVMe I/O Queues
10.10
Submissions/Completions
10.12
NVMe Namespace
10.11
Disk readable
10.13
Partition Table (GPT)
10.12
Partitions recognized
10.14
Bootable USB Image
10.13
Boot on real hardware
Phase 11: Custom Filesystem (Weeks 59-70)
#
Task
Dependency
Done Criteria
11.1
On-Disk Format Design
10.14
Documented
11.2
Superblock
11.1
FS identifiable
11.3
B-Tree Implementation
11.2
Insert/Delete/Search
11.4
Inode Table (B-Tree)
11.3
Inodes persistent
11.5
Directory B-Tree
11.4
Name → Inode
11.6
Extent Allocation
11.5
Space for files
11.7
Free Space Tracking
11.6
Bitmap or B-Tree
11.8
Read Path
11.7
Read files
11.9
Write Path (in-place)
11.8
Write files
11.10
Copy-on-Write Semantics
11.9
Never overwrite in place
11.11
Atomic Root-Pointer Updates
11.10
Crash-safe
11.12
Checksums (CRC32C)
11.11
Data integrity
11.13
Checksum Verification
11.12
Corruption detected
11.14
mkfs Tool
11.13
Create new FS
11.15
fsck Tool
11.14
Repair FS
11.16
Crash Recovery Test
11.15
Simulate power loss
11.17
Snapshots (CoW-based)
11.16
Create snapshot
11.18
Snapshot Rollback
11.17
Revert to snapshot
11.19
Compression (LZ4)
11.18
Compressed blocks
11.20
Compression (ZSTD)
11.19
Better ratio
11.21
Subvolumes
11.20
Separate namespaces
11.22
Quotas
11.21
Space limits
11.23
Online Resize
11.22
Enlarge FS
11.24
Defragmentation
11.23
Optimize extents
Phase 12: Networking (Weeks 71-85)
#
Task
Dependency
Done Criteria
12.1
Virtio-net Driver
11.24
Send/receive packets
12.2
Network Buffer (sk_buff)
12.1
Manage packets
12.3
Ethernet Frame Parsing
12.2
MAC addresses identified
12.4
ARP Table
12.3
IP → MAC mapping
12.5
ARP Request/Reply
12.4
ARP functional
12.6
IPv4 Header Parsing
12.5
IP packets identified
12.7
ICMP Echo (Ping)
12.6
Ping Reply functional
12.8
Routing Table (basic)
12.7
Forward packets
12.9
UDP Sockets
12.8
send/recv
12.10
DNS Resolver
12.9
Name → IP
12.11
DHCP Client
12.10
Automatic IP
12.12
TCP State Machine
12.11
RFC 793 States defined
12.13
TCP Connect (3-Way)
12.12
Connection established
12.14
TCP Send/Recv
12.13
Data transfer
12.15
TCP Retransmission
12.14
Reliability
12.16
TCP Congestion Control
12.15
Reno/Cubic
12.17
TCP Out-of-Order
12.16
Reassembly
12.18
TCP Close
12.17
FIN/ACK handled
12.19
Socket API (BSD-like)
12.18
socket/bind/listen/accept
12.20
SO_REUSEADDR etc.
12.19
Socket Options
12.21
IPv6 (optional)
12.20
Dual-Stack
12.22
Intel e1000 Driver
12.21
Real hardware
12.23
Realtek RTL8139/8169
12.22
More hardware
Phase 13: USB & Input (Weeks 86-95)
#
Task
Dependency
Done Criteria
13.1
xHCI Controller Detect
12.23
Controller found
13.2
xHCI Register Access
13.1
MMIO working
13.3
xHCI Reset
13.2
Controller ready
13.4
Device Context Setup
13.3
DCBAA configured
13.5
Command Ring
13.4
Send commands
13.6
Event Ring
13.5
Receive completions
13.7
Port Status Change
13.6
Device detected
13.8
Address Device
13.7
USB address assigned
13.9
Device Descriptor
13.8
Device identified
13.10
Configuration
13.9
Device configured
13.11
USB Hub Support
13.10
Hubs functional
13.12
HID Class Driver
13.11
Keyboard/Mouse detected
13.13
HID Report Parsing
13.12
Interpret input
13.14
Keyboard Driver
13.13
Keys → Keycodes
13.15
Keymap (US/DE)
13.14
Layout correct
13.16
Dead Keys
13.15
Special characters support
13.17
Mouse Driver
13.16
Movement + Buttons
13.18
Mouse Acceleration
13.17
Configurable curve
13.19
Input Event Framework
13.18
/dev/input/eventN
13.20
USB Mass Storage
13.19
Mount USB sticks
13.21
EHCI Fallback (optional)
13.20
Older hardware support
Phase 14: Audio (Weeks 96-102)
#
Task
Dependency
Done Criteria
14.1
Audio Subsystem Design
13.21
Documented
14.2
Intel HDA Controller
14.1
Registers accessible
14.3
HDA Codec Enumeration
14.2
Codecs found
14.4
HDA Widget Tree
14.3
Audio paths known
14.5
HDA Output Stream
14.4
PCM playable
14.6
HDA Input Stream
14.5
Recording possible
14.7
Audio Buffer Management
14.6
DMA works
14.8
Audio Mixer (Kernel)
14.7
Volume Control
14.9
Audio Daemon (User)
14.8
Streams mixed
14.10
Per-App Volume
14.9
Individual volume levels
14.11
WAV Playback
14.10
Play .wav files
14.12
Sample Rate Conversion
14.11
Resampling
14.13
AC97 (QEMU Fallback)
14.12
Works in QEMU
Phase 15: Graphics & Compositor (Weeks 103-120)
#
Task
Dependency
Done Criteria
15.1
Framebuffer Driver (GOP)
14.13
Settable pixels
15.2
Double Buffering
15.1
No tearing
15.3
Triple Buffering
15.2
Smoother output
15.4
VSync Timing
15.3
Stable 60 FPS
15.5
2D Primitives (rect, line)
15.4
Drawable shapes
15.6
Blit (memcpy optimized)
15.5
Copy sprites
15.7
SIMD Optimization (SSE/AVX)
15.6
4x faster rendering
15.8
Alpha Blending
15.7
Transparency
15.9
TrueType Parser
15.8
Read .ttf files
15.10
Glyph Rasterizer
15.9
Letters to bitmaps
15.11
Glyph Cache
15.10
Avoid re-rasterizing
15.12
Subpixel Rendering
15.11
LCD optimized text
15.13
Text Layout Engine
15.12
Word wrapping
15.14
Kerning
15.13
Letter spacing
15.15
Unicode/UTF-8 Support
15.14
International characters
15.16
Bidi (optional)
15.15
RTL languages
15.17
Display Protocol Design
15.16
Documented
15.18
Shared Memory Surfaces
15.17
Apps share buffers
15.19
Surface Handles
15.18
Kernel managed
15.20
Damage Tracking
15.19
Redraw only changed regions
15.21
Compositor Process
15.20
Starts up
15.22
Compositor Blending
15.21
Combine windows
15.23
Z-Order Management
15.22
Window stacking order
15.24
Focus Management
15.23
Active window
15.25
Hit Testing
15.24
Click routing
15.26
Input Routing
15.25
Events to active app
15.27
Window Decorations
15.26
Titlebar, buttons
15.28
Shadows
15.27
Drop shadows
15.29
Rounded Corners
15.28
Aesthetic corners
15.30
Animations (Easing)
15.29
Smooth UI effects
15.31
Cursor Rendering
15.30
Mouse pointer
15.32
Cursor Themes
15.31
Custom pointers
Phase 16: Desktop Shell & Widgets (Weeks 121-135)
#
Task
Dependency
Done Criteria
16.1
Widget Base Class
15.32
Inheritance possible
16.2
Event Dispatch
16.1
Pass events to widgets
16.3
Layout Engine
16.2
Box Layout, Grid
16.4
Label Widget
16.3
Display text
16.5
Button Widget
16.4
Clickable
16.6
TextBox Widget
16.5
Enter text
16.7
Checkbox
16.6
Toggle on/off
16.8
Radio Button
16.7
Exclusive choice
16.9
Slider
16.8
Select values
16.10
Dropdown/Combobox
16.9
Select from list
16.11
ListView
16.10
Scrollable list
16.12
TreeView
16.11
Hierarchy view
16.13
Scrollbar
16.12
Scrolling content
16.14
Menubar
16.13
File/Edit menus
16.15
Context Menu
16.14
Right-click menus
16.16
Dialog (Modal)
16.15
Popup windows
16.17
Message Box
16.16
Alerts / Confirmations
16.18
File Dialog
16.17
Open/Save prompts
16.19
Progress Bar
16.18
Display progress
16.20
Taskbar
16.19
Show open windows
16.21
Start Menu
16.20
App launcher
16.22
System Tray
16.21
Tray icons
16.23
Desktop Icons
16.22
Double-click launches
16.24
Wallpaper
16.23
Desktop background
16.25
Clipboard Service
16.24
Copy/Paste text
16.26
Clipboard Bitmap
16.25
Copy/Paste images
16.27
Drag & Drop
16.26
Drag files/items
16.28
Theme Engine
16.27
Colors/Styles
16.29
Dark Mode
16.28
Toggle dark theme
Phase 17: Applications (Weeks 136-160)
#
Task
Dependency
Done Criteria
17.1
Terminal Emulator
16.29
Shell running inside
17.2
PTY Subsystem
17.1
/dev/pts/*
17.3
Shell (sh-compatible)
17.2
Execute commands
17.4
Core Utils (ls, cat, cp...)
17.3
Basic tools working
17.5
Notepad v1
17.4
Open, Edit, Save
17.6
Notepad: UTF-8
17.5
Unicode handling
17.7
Notepad: Undo/Redo
17.6
Revert changes
17.8
Notepad: Find/Replace
17.7
Search
17.9
Notepad: Tabs
17.8
Multiple files
17.10
Notepad: Line Endings
17.9
LF/CRLF
17.11
Notepad: Large Files
17.10
Virtual scrolling
17.12
Notepad: Syntax Highlight
17.11
Code styling
17.13
Notepad: Autosave
17.12
Crash Recovery
17.14
Calculator v1
17.13
Basic arithmetic
17.15
Calculator: Parser
17.14
Shunting-Yard
17.16
Calculator: History
17.15
Past calculations
17.17
Calculator: Scientific
17.16
sin/cos/log/^
17.18
Calculator: Variables
17.17
x = 5
17.19
Paint v1
17.18
Canvas, Brush
17.20
Paint: Shapes
17.19
Rect, Ellipse, Line
17.21
Paint: Colors
17.20
Color Picker
17.22
Paint: Layers
17.21
Multiple layers
17.23
Paint: Selection
17.22
Cut/Copy sections
17.24
Paint: Undo Stack
17.23
History
17.25
Paint: Save BMP
17.24
Export image
17.26
Paint: Save PNG
17.25
Compressed export
17.27
File Manager v1
17.26
Browse, Open
17.28
File Manager: Copy/Move
17.27
Relocate files
17.29
File Manager: Delete
17.28
Remove files
17.30
File Manager: Rename
17.29
Change names
17.31
File Manager: New Folder
17.30
Create directories
17.32
File Manager: Thumbnails
17.31
Image previews
17.33
File Manager: Quick View
17.32
Peek contents
17.34
File Manager: Permissions
17.33
chmod GUI
17.35
Settings App
17.34
System settings
17.36
Settings: Display
17.35
Resolution, DPI
17.37
Settings: Mouse
17.36
Sensitivity
17.38
Settings: Keyboard
17.37
Layouts
17.39
Settings: User Mgmt
17.38
Manage users
17.40
Settings: Network
17.39
IP configuration
17.41
Settings: Sound
17.40
Volume, Devices
17.42
Settings: Date/Time
17.41
Timezone
17.43
Settings: About
17.42
System info
17.44
Image Viewer
17.43
View BMP/PNG/JPEG
17.45
Audio Player
17.44
Play WAV
17.46
Network Tools
17.45
ping, traceroute
17.47
Simple Browser
17.46
HTTP GET, basic HTML
Phase 18: System & Security (Weeks 161-175)
#
Task
Dependency
Done Criteria
18.1
Users/Groups Database
17.47
/etc/passwd, /etc/group
18.2
Password Hashing
18.1
bcrypt/scrypt
18.3
Login Service
18.2
Authentication
18.4
Session Management
18.3
Login → Desktop
18.5
su / sudo
18.4
Privilege Escalation
18.6
Capability Sets
18.5
Per-process Caps
18.7
Sandbox Profiles
18.6
App isolation
18.8
Seccomp-like Filters
18.7
Syscall whitelist
18.9
Code Signing
18.8
Signed apps
18.10
Signature Verification
18.9
Run only signed apps
18.11
Secure Boot Chain
18.10
UEFI → signed Kernel
18.12
Crash Reporter
18.11
Collect dumps
18.13
Log Persistence
18.12
Ringbuffer to file
18.14
Audit Logging
18.13
Security relevant events
18.15
Timezone Database
18.14
Correct local time
18.16
Locale Framework
18.15
i18n support
Phase 19: Power & Hardware (Weeks 176-185)
#
Task
Dependency
Done Criteria
19.1
ACPI Shutdown
18.16
Clean poweroff
19.2
ACPI Reboot
19.1
System reset
19.3
ACPI Sleep (S3)
19.2
Suspend to RAM
19.4
Hibernate (S4)
19.3
Suspend to Disk
19.5
CPU Frequency Scaling
19.4
P-States
19.6
Thermal Management
19.5
Throttling
19.7
Battery Status
19.6
Laptop support
19.8
ACPI Button Events
19.7
Power Button triggers shutdown
19.9
GPU Detection
19.8
VGA/GPU detected
19.10
KMS-like Layer
19.9
Mode Setting
19.11
Simple GPU Accel
19.10
2D Blit via GPU
Phase 20: Installation & Recovery (Weeks 186-195)
#
Task
Dependency
Done Criteria
20.1
Installer: UI
19.11
Graphical installer
20.2
Installer: Disk Detect
20.1
Detect available drives
20.3
Installer: Partitioning
20.2
Create GPT
20.4
Installer: Format
20.3
Create FS
20.5
Installer: Copy System
20.4
Transfer files
20.6
Installer: Bootloader
20.5
EFI entry created
20.7
Installer: User Setup
20.6
Create first user
20.8
Installer: Time/Locale
20.7
Configuration
20.9
Recovery Mode
20.8
Safe Boot option
20.10
Recovery: Safe Graphics
20.9
Fallback Framebuffer
20.11
Recovery: fsck GUI
20.10
Repair FS
20.12
Recovery: Rollback
20.11
Restore last snapshot
20.13
Recovery: Shell
20.12
Root command line
20.14
Update System
20.13
Install packages/updates
20.15
Update: Signatures
20.14
Verify before install
20.16
Update: Rollback
20.15
Revert if update fails
Phase 21: Polish & Release (Weeks 196-210)
#
Task
Dependency
Done Criteria
21.1
Performance Profiling
20.16
Find bottlenecks
21.2
Input Latency < 16ms
21.1
Responsive UI
21.3
Compositor Perf
21.2
Stable 60 FPS
21.4
Memory Leak Check
21.3
Zero leaks
21.5
Stress Testing
21.4
Stable under load
21.6
Kernel Unit Tests
21.5
Automated test suite
21.7
Integration Tests
21.6
QEMU CI pipeline
21.8
Docs: Dev Guide
21.7
Developer documentation
21.9
Docs: Driver Guide
21.8
How to write drivers
21.10
Docs: ABI Reference
21.9
Syscall API documented
21.11
Docs: User Manual
21.10
Manual for end users
21.12
Release Image: ISO
21.11
Bootable CD
21.13
Release Image: USB
21.12
Live-USB flash
21.14
Release Notes
21.13
Changelog prepared
21.15
Release Candidate
21.14
RC ready for next phases
Phase 22: Swap & Disk Encryption (Weeks 211-220)
#
Task
Dependency
Done Criteria
22.1
Swap Partition Support
21.15
Swap area recognized
22.2
Swap File Support
22.1
File-based swap works
22.3
Page-Out Policy (LRU)
22.2
Pages pushed to disk
22.4
Page-In (Demand Paging)
22.3
Pages retrieved on access
22.5
OOM Killer
22.4
Kills process on memory exhaustion
22.6
Swappiness Parameter
22.5
Configurable swap aggression
22.7
Crypto Primitives
22.6
AES, SHA, ChaCha20 tested
22.8
/dev/urandom
22.7
CSPRNG + RDRAND
22.9
LUKS-like Volume
22.8
Encrypted Block Device
22.10
Key Derivation
22.9
Argon2/PBKDF2
22.11
Encrypted Root Boot
22.10
OS boots from encrypted partition
22.12
Key Management
22.11
Kernel keyring
Phase 23: TLS & Cryptography (Weeks 221-235)
#
Task
Dependency
Done Criteria
23.1
RSA Implementation
22.12
Sign/Verify/Encrypt works
23.2
ECDSA / Curve25519
23.1
Modern cryptography
23.3
X.509 Parsing
23.2
Read certificates
23.4
Certificate Chain Val.
23.3
Verify up to Root CA
23.5
Trust Store
23.4
Embedded trusted CAs
23.6
TLS 1.3 Handshake
23.5
ClientHello → ServerHello
23.7
TLS Record Protocol
23.6
Send/receive encrypted data
23.8
TLS Session Resumption
23.7
Fast reconnects
23.9
HTTPS Client
23.8
HTTPS GET works
23.10
Certificate Pinning
23.9
Extra security for OS updates
Phase 24: WiFi & Bluetooth (Weeks 236-260)
#
Task
Dependency
Done Criteria
24.1
802.11 MAC Frame Parsing
23.10
Decode WiFi frames
24.2
802.11 Mgmt Frames
24.1
Beacon, Probe, Auth, Assoc
24.3
WiFi Scanning
24.2
Find available networks
24.4
WPA2-PSK Handshake
24.3
Encrypted connection
24.5
WPA3-SAE (optional)
24.4
Modern standard
24.6
WiFi Driver (iwlwifi/rtl)
24.5
At least one chipset working
24.7
Connect/Disconnect
24.6
Network roaming
24.8
WiFi Power Save
24.7
Idle power management
24.9
Network Manager GUI
24.8
Select WiFi in Settings
24.10
Bluetooth HCI Layer
24.9
Address BT controller
24.11
Bluetooth L2CAP
24.10
Logical channels
24.12
Bluetooth SDP
24.11
Service Discovery
24.13
Bluetooth Pairing (SSP)
24.12
Connect devices
24.14
BLE GATT (optional)
24.13
Low Energy devices
24.15
Bluetooth Audio (A2DP)
24.14
Headphones support
Phase 25: Advanced Networking (Weeks 261-275)
#
Task
Dependency
Done Criteria
25.1
Packet Filter / Firewall
24.15
Inbound/outbound rules
25.2
NAT (Masquerading)
25.1
IP translation
25.3
Firewall Config Tool
25.2
CLI/GUI to set rules
25.4
NTP Client
25.3
Time syncs automatically
25.5
NTP System Clock Sync
25.4
RTC + NTP combined
25.6
mDNS / DNS-SD
25.5
Resolve hostname.local
25.7
NFS Client (v4)
25.6
Mount remote filesystems
25.8
SMB/CIFS Client
25.7
Access Windows shares
25.9
VPN (WireGuard-like)
25.8
Encrypted tunnels
25.10
VPN Config + GUI
25.9
Configure VPN in Settings
Phase 26: Package Manager & SDK (Weeks 276-295)
#
Task
Dependency
Done Criteria
26.1
Package Format (.npkg)
25.10
Spec documented
26.2
Package Metadata
26.1
Read manifest (Deps, Ver)
26.3
Dependency Resolver
26.2
Resolve dependencies
26.4
Install/Remove Package
26.3
Working operations
26.5
HTTP Package Repository
26.4
Fetch index
26.6
Repository Signatures
26.5
Verify GPG-like signatures
26.7
System Update
26.6
Upgrade all packages
26.8
Update Rollback
26.7
Revert failed updates via Snapshot
26.9
SDK: Stable API Headers
26.8
Versioned headers
26.10
SDK: ABI Versioning
26.9
libfoo.so.1 → libfoo.so.2
26.11
SDK: pkg-config equivalent
26.10
Build flags for libraries
26.12
SDK: Cross-Compiler
26.11
Compile from Linux for PromptOS
26.13
App-Manifest
26.12
Declare required permissions
26.14
CLI Package Manager
26.13
npkg install/update
26.15
GUI Software Center
26.14
Graphical app store
Phase 27: Peripherals & Printing (Weeks 296-310)
#
Task
Dependency
Done Criteria
27.1
Print Subsystem Design
26.15
Architecture documented
27.2
Print Spooler Daemon
27.1
Manage print jobs
27.3
IPP (Internet Printing)
27.2
Network printers
27.4
USB Printer Class Driver
27.3
Detect USB printers
27.5
PostScript/PDF Render
27.4
Print simple documents
27.6
Print Dialog (GUI)
27.5
Apps can initiate print
27.7
Webcam / V4L-like
27.6
USB camera → Video stream
27.8
Webcam App (Preview)
27.7
Display camera feed
27.9
Scanner Support (SANE)
27.8
USB scanner → Image
27.10
SD-Card Reader
27.9
Mount SD cards
27.11
Touchpad Multitouch
27.10
2-finger scroll, pinch-to-zoom
27.12
Touchpad Gestures Config
27.11
Adjust in Settings
Phase 28: Accessibility & Monitors (Weeks 311-330)
#
Task
Dependency
Done Criteria
28.1
Accessibility Tree
27.12
AT-SPI-like widget roles/states
28.2
Screen Reader Basics
28.1
TTS engine, focus tracking
28.3
Screen Reader Navigation
28.2
Keyboard-driven UI tour
28.4
High Contrast Mode
28.3
System-wide high contrast
28.5
Zoom / Scaling
28.4
Scalable UI
28.6
Full Keyboard Nav
28.5
Tab/Enter reaches all elements
28.7
IME Framework
28.6
Complex input methods
28.8
CJK Input
28.7
Chinese/Japanese/Korean
28.9
Compose-Key / Dead-Keys
28.8
Diacritics support
28.10
Multi-Monitor (EDID)
28.9
Detect multiple screens
28.11
Multi-Monitor Layout
28.10
Configurable arrangement
28.12
Per-Monitor HiDPI
28.11
Different scaling per screen
28.13
Monitor Hot-Plug
28.12
Plug/unplug while running
28.14
Notification Daemon
28.13
Apps can send notifications
28.15
Notification Popups
28.14
Toast notifications visible
Phase 29: Advanced QA & v1.0 (Weeks 331-350)
#
Task
Dependency
Done Criteria
29.1
POSIX Compliance Tests
28.15
Test libc against standard
29.2
Syscall Fuzzer
29.1
Random syscalls → no crash
29.3
Filesystem Fuzzer
29.2
Corrupt FS-images → no panic
29.4
Network Fuzzer
29.3
Malformed packets → no crash
29.5
Soak / Endurance Tests
29.4
Stable for 72h continuous run
29.6
Memory Leak Check
29.5
No kernel leaks under load
29.7
Lock Contention Profile
29.6
No deadlocks, hot locks optimized
29.8
HW Compatibility Matrix
29.7
Documented working hardware
29.9
CVE / Patch Process
29.8
Defined workflow for security fixes
29.10
Release Gates / Criteria
29.9
Checklist for every release
29.11
Automated Regression CI
29.10
CI blocks regressions
29.12
Reproducible Benchmarks
29.11
Performance measurable
29.13
Version 1.0
29.12
🎉 Ready as Daily Driver
Part 3: Architectural Decisions (MANDATORY before coding)
These decisions fundamentally impact the architecture. They must be answered before writing code.
Option
Description
Pro
Con
POSIX-like
fork(), exec(), FDs, signals
Portability, familiar
fork() is slow/complex
Clean Break
spawn(), Handles, events
Modern, simple
Zero portability
Hybrid
Handles internally, POSIX in libc
Best of both worlds
More work
Recommendation : Hybrid. Internal handles, POSIX via libc shim.
Option
Description
Pro
Con
Static
Everything in one binary
Simple, no deps
Large, no shared code
Dynamic
Shared libraries (.so)
Smaller, updates easy
Weeks of extra work
Recommendation : Static until GUI runs, then transition to Dynamic.
Option
Description
Pro
Con
xHCI only
USB 3.0+ only
Modern, single driver
Legacy HW unsupported
xHCI + EHCI
USB 3.0 + 2.0
High compatibility
Two complex drivers
Recommendation : xHCI only. Legacy hardware is rare.
Option
Description
Pro
Con
IPv4 first
IPv6 later
Faster to market
Hard to retrofit
Dual-Stack
Both from day 1
Future-proof
High initial effort
Recommendation : IPv4 first, but design socket API to be IPv6-ready.
Option
Description
Pro
Con
AC97
Standard QEMU
Fast to build
Emulation only
Intel HDA
Modern Hardware
Bare Metal ready
Very complex
Recommendation : Intel HDA. AC97 is obsolete.
Option
Description
Pro
Con
Framebuffer
GOP, no GPU
Simple
Slow
GPU Later
Prepare KMS-like
Extensible
High abstraction overhead
Recommendation : Framebuffer with a clean abstraction layer for future GPU support.
Option
Description
Pro
Con
FreeType/HarfBuzz
Existing Libs
Fast GUI
Not "from scratch"
Custom TrueType
Built entirely self
Full control
Months of work
Recommendation : Custom parser for basic glyphs, HarfBuzz later for complex shaping (Arabic, etc.).
Option
Description
Pro
Con
btrfs-like (CoW)
Snapshots, Checksums
Modern, safe
Complex
ext4-like
Journaling, simpler
Proven
Fewer features
Recommendation : CoW-based. Crash-safety without a journal is elegant.
Option
Description
Pro
Con
Android-like
Manifest per App
Fine-grained
Complex infra
Unix + Sandbox
UID/GID + optional profiles
Simpler
Less modern
Recommendation : Unix as a base, Sandbox-profiles for critical apps.
Define 1-2 concrete configurations for driver priorities:
Component
Recommendation
CPU
Intel Core (Gen 8+) or AMD Ryzen
Disk
NVMe (Primary), AHCI (Fallback)
NIC
Intel i225/i226 (Primary), e1000 (Fallback)
USB
xHCI (Intel/AMD integrated)
Audio
Intel HDA (Realtek Codec)
GPU
Framebuffer only (GOP), Intel iGPU later
Part 4: Resources & References
Topic
Document
UEFI
UEFI Specification 2.10
ACPI
ACPI Specification 6.5
x86-64
Intel SDM Vol. 1-4
PCIe
PCI Express Base Spec 5.0
NVMe
NVM Express Base Spec 2.0
xHCI
xHCI Specification 1.2
USB
USB 3.2 Specification
Intel HDA
High Definition Audio Spec 1.0a
ELF
ELF-64 Object File Format
TrueType
TrueType Reference Manual
Appendix A: Syscall List v1 (Draft)
This list is a starting point. Expand as needed.
No.
Name
Description
0
sys_exit
Terminate process
1
sys_spawn
Start new process
2
sys_exec
Replace program
3
sys_waitpid
Wait for child
4
sys_getpid
Get own PID
5
sys_getppid
Get parent PID
6
sys_kill
Send Signal/Event
No.
Name
Description
10
sys_open
Open file
11
sys_close
Close handle
12
sys_read
Read
13
sys_write
Write
14
sys_seek
Change position
15
sys_stat
Metadata
16
sys_fstat
Metadata via handle
17
sys_mkdir
Create directory
18
sys_rmdir
Delete directory
19
sys_unlink
Delete file
20
sys_rename
Rename
21
sys_readdir
List directory
No.
Name
Description
30
sys_mmap
Map memory
31
sys_munmap
Unmap memory
32
sys_mprotect
Change permissions
33
sys_brk
Expand heap
No.
Name
Description
40
sys_pipe
Create pipe
41
sys_dup
Duplicate handle
42
sys_dup2
Replace handle
43
sys_poll
I/O Multiplexing
44
sys_futex
Fast Userspace Mutex
No.
Name
Description
50
sys_socket
Create socket
51
sys_bind
Bind address
52
sys_listen
Listen
53
sys_accept
Accept connection
54
sys_connect
Connect
55
sys_send
Send
56
sys_recv
Receive
57
sys_setsockopt
Socket Options
No.
Name
Description
60
sys_clock_gettime
Read time
61
sys_nanosleep
Sleep
No.
Name
Description
70
sys_ioctl
Device control
71
sys_mount
Mount
72
sys_umount
Unmount
73
sys_reboot
Reboot/Shutdown
74
sys_sysinfo
System info
Appendix B: Time Estimation
Phase
Weeks
Cumulative
Infrastructure
2
2
UEFI Loader
3
5
Kernel Basics
5
10
ACPI & Timers
3
13
Memory Management
5
18
SMP & Sync
5
23
Scheduler & Threads
7
30
Processes & Userspace
8
38
IPC
4
42
VFS & FS
10
52
Block Drivers
6
58
Custom FS
12
70
Networking
15
85
USB & Input
10
95
Audio
7
102
Graphics & Compositor
18
120
Desktop & Widgets
15
135
Applications
25
160
System & Security
15
175
Power & Hardware
10
185
Installation
10
195
Polish (RC)
15
210
Swap & Disk Encryption
10
220
TLS & Cryptography
15
235
WiFi & Bluetooth
25
260
Advanced Networking
15
275
Package Manager & SDK
20
295
Peripherals & Printing
15
310
Accessibility & Multi-Monitor
20
330
Advanced QA & v1.0
20
350
Total: ~350 Weeks ≈ 6.7 Years (Full-time, single developer)
The original 210 weeks covered ~60% of a full OS.
The new phases 22–29 add ~140 weeks for the missing areas.
Significantly faster with an AI agent or team.
Good luck with the development!