toaruos/README.md
2011-01-20 20:01:23 -06:00

82 lines
4.3 KiB
Markdown

# 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 ##
Clone the git repository and run `make` and `sudo make install` (yes, the `sudo` is necessary because of how I am building my floppy image). This will build a working `bootdisk.img` that you can load with an emulator. If you have QEMU installed, you can then run `make run` to start the emulator. You should see a GRUB menu with one entry which should boot into the kernel.
My testing environment is a combination of QEMU and VirtualBox.
## 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 *done*
* 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:
* [James M's kernel development tutorials](http://www.jamesmolloy.co.uk/tutorial_html/index.html)
* [Bran's Kernel Development Tutorial](http://www.osdever.net/bkerndev/) *completed*
* [Skelix's OS tutorial](http://en.skelix.org/skelixos/)