4.2 KiB
klange's OS Development Repo
I'm writing an OS because I'm bored and want a massive project to suck up the little pieces of my time for the next few years.
Testing it Out
Grab bootdisk.img
from the git repo and load it into a virtual machine. The bootdisk will start GRUB with a single menu entry to boot the kernel off of the same diskette.
For example, you can boot the disk in qemu
:
qemu -fda bootdisk.img
Or you could set up a VirtualBox machine and load the floppy image.
Goals and Roadmap
Overall, the goal of this project is to write a relatively POSIX-compatible OS from the ground up. With a focus on generic hardware functionality and universal specifications like VESA, I hope to eventually get something fairly complete in terms of what an OS should be. At some times, I may focus on an actual piece of complex hardware (I am looking to write a basic driver for Intel graphics cards based on the X driver and the Mesa components), but in general, I will stick to generic interfaces.
Basic Goals
- Create a working modular monolithic kernel capable of executing arbitrary ELF binaries
- Write, from scratch, a C standard library using past experience in writing standard library functions
- Support POSIX threads
- Implement an existing file system, specifically EXT2
- Be able to manipulate VESA modes to run at an optimal resolution for graphics
- Handle basic networking on a virtual Ethernet device (DHCP, TCP, etc.)
Loftier Goals
Some things are far easier said than done, but I like to say them anyway. The time span for these depends greatly on how quickly the basic goals are completed and can range anywhere from a few months to years from now.
- Create a working implementation of Wayland under VESA (will be slow)
- Port Qt (under Wayland) and some Qt apps
- Support audio in a way that doesn't suck like Linux's mess of libraries and mixers
- Various hardware-specific drivers (primarily for my T410):
- Intel graphics driver, with acceleration so Wayland isn't slow
- Realtek wireless driver, with WPA2
- Specific drivers for the Thinkpad itself (or just acpi?)
Roadmap
Currently, I have a kernel capable of reading its multiboot parameters, which is terribly un-useful. The current, ordered, plan of attack is as follows:
- Finish James M's tutorial (second half), which covers:
- Paging
- Heap
- VFS
- Initial RAM Disk (except I'll probably use my own format for the directory structure)
- Multitasking
- User mode
- Finish basic kernel functionality
- Loading ELF binaries and executing them in user mode
- Complete system call table
- Get a better semblance of users and groups
- Write a file system driver for a real file system
- Target is EXT2, but might do FAT
- Move OS development images to some form of virtual drive (VDI or something QEMU compatible)
- Implement a VESA mode handler
- Requires a Virtual 8086 monitor
- Need to be able to use graphics modes and still have output, so write a framebuffer terminal
- Complete libc
- Enough to run basic unix tools...
- Port some basic UNIX tools
- a shell (bash and zsh, because I like bash, but the office uses zsh)
- ls, mv, rm, etc.
- here's a real test: perl
- Implement networking
- IPv4
- Ethernet driver for QEMU or VirtualBox
Anything beyond this point is part of the 'Loftier Goals' section
- Wayland compositor
- based on specifications for a Wayland environment
- Port some of the Wayland sample applications
- Write my own!
- Port Qt
- Specifically, for Wayland
- Qt is huge and has its own standard library, might need more extensive libc
- Need to support C++-built stuff, so will probably need a C++ stdlib.
- Audio drivers
- Maybe before Qt?
- Should support software mixing at least, hardware under a virtual machine, maybe my Intel hw
References
I'll be more detailed here eventually, but for the most part, I have been using: