As various people keep asking me about OS development, I decided to put up a page with links to various useful websites to get people started.
If you are going to start writing your own OS, the first piece of advice I can offer is to USE VERSION CONTROL. I cannot emphasise this more. As soon as you know you have the safety net of the previous ‘x’ versions of code you can be free to try things out, explore and break your code at will, then go back and try again.
If you’re like me, and like the practical nature of computer science, and would rather get stuck in and start writing something, start here: Bran’s Kernel Development Tutorial. This tutorial set is an excellent starting point for anyone wanting to toy with operating system code.
Next, if you’re looking for tutorials on a specific aspect of operating system development, I recommend reading the “Bona Fide OS Developer” website. Although at the time of writing, the material on there is under redevelopment and reorganisation, but the web site is still one to watch. Furthermore, the forums are active and highly informative!
Speaking of forums, the OSDev Forums are another fantastic resource for the budding operating system developer. Many of my questions have already been asked and answered to a staggering level of detail on these forums, both in implementation and theory.
And finally, the trove of operating systems development that is the OSDev Wiki. This single site contains everything from boot loaders to file systems and beyond, read it.
Operating system development is not an easy task. Good kernels take years of careful design and programming to come to fruition.
Once you’ve gotten the momentum going, don’t stall! Remember that you can always tackle other things (as there are hundreds of tasks to do with any operating system) so if one aspect is giving you problems, move on for a while.
With your operating system up and running to some degree, you’ll quickly miss the convenience of the standard libraries you’re used to writing code with. To this end, for C coders, I recommend looking at NewLib.
NewLib is designed for use in embedded platforms, but provides much of the standard libraries and only requires a handful of implemented features before you can use it in your system. (See the OSDev Wiki for details on that, hint: search ‘newlib’).
Best of luck!