Goal: write a simple operating system in as few lines as possible.
- Shell with basic commands
- Memory Management
- Physical memory manager (bitmap allocator)
- Paging with 4KB pages
- Kernel heap allocator
- GUI
- Framebuffer graphics (800x600x32)
- Window system with dragging, minimize, maximize, close
- Double-buffered rendering
- Mouse and keyboard input
- GNOME-style desktop with top panel and dock
- File System
- In-memory VFS with directories and files
- Process Management
- Process control blocks (8 max processes, 32 max threads)
- Round-robin preemptive scheduler (thread-based)
- Context switching between threads
- Per-process page tables (shared by threads)
- User Mode
- Ring 0/Ring 3 separation
- 24 syscalls (write, read, exit, fork, exec, wait, pipe, kill, signal, thread_create, thread_join, futex_wait, futex_wake, etc.)
- TSS for privilege level switching
- IPC
- Pipes with blocking read/write
- Signals (SIGINT, SIGKILL, SIGUSR1, SIGUSR2, SIGTERM, SIGCHLD)
- Per-process file descriptor tables
- Threading
- Kernel threads (up to 32 system-wide)
- Thread syscalls (thread_create, thread_exit, thread_join, gettid)
- Thread-local storage (TLS) support
- Futex-based synchronization primitives
- Threads share address space, have separate kernel stacks
- Networking
- NIC driver
- TCP/IP stack
- Sockets API
- Storage
- ATA/IDE disk driver
- Persistent filesystem (ext2 or FAT)
- Exec from filesystem paths
- Virtual Memory
- Copy-on-write for fork
- Demand paging
- Swap space
- mmap/munmap
- Shared memory
- Time
- RTC driver
- System time (gettimeofday)
- sleep/alarm syscalls
- I/O
- dup/dup2 syscalls
- select/poll
- waitpid for zombie reaping
- Security
- Users and groups
- File permissions
- Multicore
- SMP support
- Per-CPU scheduling
- Power
- ACPI
- Shutdown/reboot
