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

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: