Back in 2012 when we were in 8th standard, discussing about our dreams, among the voices of Chocolate Fountains or getting dream bike, there was a voice "Developing my own Operating System one day", that was my friend Nikhil. ...
Operating System is almost an integral part of any Computer Science or related Discipline's curriculum. Though it is quite rare to find courses that actually gives a hands on experience of developing an OS as a part of undergraduate curriculum. Not only it makes one appreciate the beauty of one of the most magnificent piece of engineering, evolution of modern computers can easily be traced down the line.
This is one of my dream project and is solely developed for educational purpose. I am forever indebted to the OSDev community for providing a great platform of absolute gem, Viktor Engelmann for his sincere and consistent efforts in delivering Video Tutorials (wyoos.org), Mr James Molly for providing tutorials for even absolute beginners with beautiful short descriptions of the literature along side the code, BrokenThorn Entertainment for OS Development Series, Mr. Ciro Santilli for guiding me during the development and ofcourse the Linux Community for being always a goto place whenever stuck.
Pre-Requisites:
- C
- Assembly Language
- Linker Scripting
- System Programming
- Computer Organisation and Architecture
- Theory of Operating Systems Optional: Compilers
I started developing OS back in my 2nd year but I failed miserably. Few advices:
- Theory First: For many projects, one can follow theory along the tutorial, for me I have always preferred project based approach to learn any new concept. NOT THIS TIME. Since compared to any other topic, there is very limited resources available compared to other topics, it get difficult for new commers to get comfortable with the technicalities.
- Starting Point is not always the beginning: To get a good understanding of OS, it is important to have basic knowledge of its pre-requisites and it is a terrible idea to start your journey directly from OS.
- Hello World of Pre-Requisites: Concepts of OS itself is extremely vast, merely being in a state to understand syntax is not enough. It needs a firm grip over the programming language. Having a good command over C, Assembly Language, Linker Scripting etc is extremely crucial to understand/write codes independently.
- Recursion is not for Faint Hearted Ones: No matter what, there will be multiple times when it is difficult to understand the literature due to engineering technicalities, google it. Oh unable to understand even that? Google it. Unable to Understand even that, google it.... (and recurse it down till you get it, no shortcuts)
- One Man Army: It is wonderful if you can tear it off on your own, but incase you are having difficulties, feel no shame in seeking help from experts (Politeness and patience are the keys).
- Start from 0: Over the period OS has evolved to be matured, powerful and hence complex. It is always good to set realistic and simpler goals in the beginning. Even your bootloader able to recognise your kernel image file is a good start.
Finally, this project is merely an attempt to learn the concepts, many parts of it has been adapted from above mentioned resources. Also, I have tried to keep it free from bugs but I would absolutely love to hear at satyamcrj@gmail.com
Happy Birthay Nikhil! Rest In Peace!