Required Knowledge #
-
Basic Computer Science - You should have a good grasp on theorertical concepts like binary and hexadecimal systems, data structures and algorithms and abstraction among other things.
-
Programming - You need to be familar with the nooks and crannies of languages like C and C++. On top of that, good coding practices are something you have to follow for it is not okay to write inefficient software.
-
Assembly - You should know about and have written code in Assembly before. If not, read a book or watch a video, then come back to this section.
-
Memory - You need to know about the structure of computer memory, how data is written onto it and a lot more when you’re going to be writing code.
-
UNIX/ Linux Experience - There’s a clear reason why we prefer Linux as our primary development environment. Therefore you need to be aware of how to harness the full power of the terminal as it is going to save you a lot of time.
-
Emulators and Virtualizers - Tools like QEMU, VirtualBox and Bochs are something you should know about beforehand for they provide a buffer between your host and test system.
-
Version Control - Writing OS code is tough and there are going to be so many iterations to your code that it’ll be hard to keep track of what change happened when and what works. You are just one typo away from system crash. Infact, Linus Torvalds built Git for the exact same reason while working on Linux. Therefore knowledge of version control is important and always has been.
-
The Concepts - You need to dive deeper into how Operating Systems work before trying to build one. This going to require through knowledge of CPU architecture, compiler development, etc.
-
Ability to Read the Manual - Get ready to read a whole lot of documentation because no one has the time to answer already answered questions.
There is a reason for gatekeeping in the OS Dev community for this is not a beginner task rather a huge undertaking. This is not the way you learn programming but something you do after years of experience. Therefore it is okay to postpone this project until you have checked off all the points in the above list.