In November 2004 I began to write my own operating system. I hoped to use it as my "usual" OS at some point in the far future. At the moment however it is just some project I can learn much from. It's currently targetet to the i386, but should theoretically be rather portable.
The System consists of some low-level code, which does the memory and cpu initialization and scheduling, some high-level code, which does interprocess-communication, and a lot of small driver processes which get started during system boot and then provide the services needed by higher-level applications, either other drivers or applications. This way every function has a well defined place and right-boundaries are clearly visible. Furthermore a bug in a high-level driver does only compromise the subsystem the driver handles, but not the memory for example, because the most drivers run in ring 3, that is userspace.
If you'd like to have a look, or even contribute some code or ideas, the code is accessible at http://jens.schicke.hvf-bs.net/mpmk/ as a darcs repository. I'll write some licence soon, actually it's already clear it'll be open source, the question rather is what kind of open.
i386 segmented memory core | testable |
---|---|
- syscalls | testable |
- task exit | missing |
- scheduling | testable |
i386 drivers | some |
- idle process | done |
- io ports | testable |
- irq access | unclear interface |
- mmap | testable |
- taskd | incomplete |
generic drivers | some |
- VGA console | far from done |
- AT keyboard | far from done |
documentation | far from done, unstructured |
system library | far from done |
posix library | missing |
applications | missing |