If you've seen me around, you might have noticed that there is one massive project I want to accomplish: building an operating system from scratch. However, my college got in the way many times as it always does, keeping me from putting serious effort into the project. So, with my degree in the bag, it is finally time to walk the road to My Ultimate Training System.
So, how did I even decide to undertake this journey? Let me take you back to two years ago. I had just started my internship at the company where I'm still working. My task was to convert some internal tooling, consisting of multiple script files, into a whole application with front- and backend. At the start, I was researching software architectures which made me fall in love with the subject. Especially the microkernel architecture took my breath away.
One day, when I was travelling back home by train, I was messaging with my best friend, Valentin. We were talking about this microkernel architecture I had just discovered that week. The following conversation ensued:
Valentin: "So, this microkernel architecture, du you know any examples of software that use it?"
Me: "Hmm, I cannot give you any examples from the top of my head, but I'm quite sure there are plenty. I mean, the main feature is having a core system handling the communications and plugins having the business logic."
Me: "There is still a lot I have to learn about this architecture, but damn, it's interesting!"
Valentin: "That for sure it is!"
A small moment of silence creeps in, the train passing by field after field.
Me: "You know what.. I'm going to build my own operating system! From scratch!"
Valentin: "Are you insane?! Do you know how long that'll take?!"
Me: "Hahaha, yeah, it'll most likely be a 10-year project or so, but hell, why not!"
And so, the idea of building my operating system was born.
It's been two years since I've decided to walk the path of the operating system. But, as I said, college managed to get in the way of my plans. However, now that I finally have my degree, some free time has opened up. Still, diving in a project of this magnitude like a headless chicken isn't the way to go.
Recently, I read a post on Dev.to on things to do when starting a side project. The first step stood out to me most: Announce Your Idea. Now, I have thrown my idea around here and there in some comments and on my blog, but I have never really sat down to think and plan what I want to do.
That was until a late evening. I was feeling pooped as hell and not motivated to do anything. I told my partner: "Bleeeehhh, I'm pooped; I cannot focus; I cannot do anything tonight; tonight SUCKS!". He looked at me and almost literally picked me up from the bed. Before I knew, he'd put me on a chair in the living room with a book and notebook. Next, he squashed a pair of headphones on my head and set a vinyl in the player with some Bob Marley (don't ask me why, I don't know it either). Without realising, my brain was swinging along with Marley 10 minutes later and producing all sorts of strange creative stuff.
You don't "just" build an operating system. You need knowledge for that, and lots of it too. So, before I even dare start writing a single line of code for my operating system, I need to work on that brain! I managed to create a high level overview of what I think I need to learn to get started and in which order.
- Learning about Computer Architecture and Organisation;
- Learning C Programming;
- Learning Assembly Language;
- Learning about Operating System Structure;
- Building MUTS!!
Gaining this knowledge won't fall out of the sky magically in my brain, unfortunately. Boy, would it be interesting for that to happen! But no, I need books for this, and I have started with the first one this week! I have got a big list of all the books that I could find that would be interesting for this project. However, reading them all would take me... an eternity. So, I've tried to keep the list short, for now.
- Write Great Code - Understand the Machine by Randall Hyde
- Write Great Code - Thinking Low-Level Writing High-Level by Randall Hyde
- C Programming - A Modern Approach by K.N. King
- The Art of Assembly by Randall Hyde
- Modern Operating Systems by Andrew Tanenbaum
- Operating Systems from 0 to 1
Still inspired, I'm now trying to announce my idea to you all! I hope this gives you a bit of background for my motives even to dare touch this project. Believe me, I'm scared to bits and almost shitting my pants. Still, I also feel exhilarated and motivated to work on this fantastic project. Even if it fails miserably, I'm confident that I will learn so much along the way that it won't be a waste of time.
But more importantly, I want to share my strides and struggles with you all. The first idea I have is to keep writing articles and posting them on my blog. Furthermore, I want to cross-post my articles to Dev.to, and maybe to Medium and other dev communities. I'm not too sure about the last two, but if you have any ideas on that, please do let me know!
I also do have one other idea, but I'd like your opinion on that too. Would it be interesting if I stream my C and Assembly programming on Twitch, sowing my learning process and progress on the languages? Afterwards, I can upload the stream to my YouTube channel, so you can watch it later.
Finally, I would like to ask you: Do you have any ideas on how you'd like to keep updated on projects like this? Things that I can do to expose it more, so I can hold myself accountable to stay motivated even during the tougher learning times. I'm curious to see what you think!
The road to My Ultimate Training System will be a long one, that is a given. Projects like these will have their ups and downs, but I'm hoping that I can stick to my plan. The learning possibilities are endless, which is what motivates me the most. Naturally, the development of my operating system will be open source. There is one question that always lingers in the back of my brain: Will I, or anyone, ever use my OS seriously? That, I won't know until I've "finished" it. However, I'd like to think that one day I'll run my OS on a device and use it for simple tasks. That is the end goal for now.