It's written from scratch, with love, in zig.
Currently trying to figure out the feature set needed to port binutils and a shell (zsh maybe?).
The feaures are loosely:
- A userspace
- A TTY implementation
- A libc port (should be easy enough once we have a posix like abi)
- A filesystem
The roadmap to achieve this is:
- VGA graphics mode
- VGA terminal
- Initialise the interrupt descriptor table
- MoreCore allocator
- Configure the GDT with kernel and user segments for long mode
- Read the root system descriptor table
- Read the MADT
- APIC setup
- PS/2 Keyboard input
- PIT timer
- Paging: allocating pages and mapping them to virtual addresses
- Paging: mmap and a std.heap.PageAllocator
- Lapic timer
- Scheduler (basic scheduling of threads)
- Set up the TSS and get exceptions handled from threads
- Implement wait, yield and sleep
- Implement an event queue and terminal thread that listens to keyboard events
- Run lspci from the keybaord listener as a thread
- Implement the proc/sys filesystems for pci devices
- Processes and elf loading: move lspci out into its own binary
- Basic userspace + entrypoint
- Syscall ABI for memory mapping
- Filesystem service for embedded tar
- Keyboard service
- TTY service
- PCI device discovery
- SATA/IDE driver
- Read/write FAT-32 filesystem (over IDE)
- Open and write syscalls
- Create a standard library for userspace programmes
- Exec syscall
- Fork syscall