Not-just-for-fun OS development
Posted: Mon Sep 26, 2022 4:11 pm
Hello everyone,
I realized that most of people here develop their own OS for fun and to learn OS development itself, I guess. I started the development of Tilck exactly for the same reasons: at the beginning, I didn't plan to make it Linux-compatible and it was called "ExperimentOS", a place where I could have fun making experiments in the OS field. But, after some time, my practical & goal-oriented mindset kicked in and I decided that I cannot simply spend so much time working on something that big just for fun. Development could be funny, but it must have at least some tiny chance of becoming useful in the "real-world" one day in the future. That's when I decided to make it compatible with Linux and set in stone the rule that it must run many useful 3rd-party applications written for Linux/POSIX. Writing non-test userspace applications for Tilck was practically banned as idea. If I had to write something, if should work on Linux the same way as on Tilck.
As you can guess, at this point a fair amount of fun just went away. I had to spent quite some effort debugging stuff and trying to understand why it didn't work as expected. Also, had to support any fancy Linux syscall that libmusl wanted to use, instead of just sticking with the simplest ones (e.g. readv() instead read() etc.) because I didn't want to have "my own libc". So, it was a lot less fun, but it felt like more useful at the end. Indeed, a lot of people in the industry (Linux kernel devs) were impressed by that.
The side effect of my very conservative and practical choices (C language, monolithic architecture, combability with Linux) was that not only the whole project less fun and more complicated to develop, but it didn't trigger much interest in OSDEV community. Over time, I realized that almost the entire OSDEV community (here and outside) is either interested in:
- just-for-fun projects where people decide to re-write the whole software stack, from the kernel to the UI, including a browser, text editors etc.
- working on big mainstream projects like Linux and FreeBSD.
As you can see, my project doesn't fit in neither of those categories: it's not production-ready so that Linux hackers / embedded developers would be interested in patching it somehow, but it's neither fun like the other projects: there is a ton of focus on automated testing, coverage etc. and zero interest in making colorful windows to appear on the screen.
Therefore, my question is: how many of you are investing effort on developing something not-just-for-fun? I mean, do you have a long-term plan to make your project usable in the real world by the industry or the home user, even if it will have only a tiny chance of getting it there? What would be the advantages of your OS compared to what currently exists? I mean, if you're writing a desktop OS, you'll be inevitably competing at least with the mainstream Linux distributions: how do you plan to steal some of their market? And.. are you sure that your should be writing a kernel for achieving that, instead of just consuming Linux as kernel and making its GUI more powerful and user-friendly?
To me, writing the next "desktop OS" is so hard to achieve as goal that not even Linux succeeded in that in 30+ years, despite running on billions of machines. A more approachable (even if still insanely hard) goal would be write a special-purpose operating system, like a real time OS for embedded devices. Do anybody has goals like that? And again, what's your plan to make it, even if it's a 1 in 100 shot ?
Vlad
I realized that most of people here develop their own OS for fun and to learn OS development itself, I guess. I started the development of Tilck exactly for the same reasons: at the beginning, I didn't plan to make it Linux-compatible and it was called "ExperimentOS", a place where I could have fun making experiments in the OS field. But, after some time, my practical & goal-oriented mindset kicked in and I decided that I cannot simply spend so much time working on something that big just for fun. Development could be funny, but it must have at least some tiny chance of becoming useful in the "real-world" one day in the future. That's when I decided to make it compatible with Linux and set in stone the rule that it must run many useful 3rd-party applications written for Linux/POSIX. Writing non-test userspace applications for Tilck was practically banned as idea. If I had to write something, if should work on Linux the same way as on Tilck.
As you can guess, at this point a fair amount of fun just went away. I had to spent quite some effort debugging stuff and trying to understand why it didn't work as expected. Also, had to support any fancy Linux syscall that libmusl wanted to use, instead of just sticking with the simplest ones (e.g. readv() instead read() etc.) because I didn't want to have "my own libc". So, it was a lot less fun, but it felt like more useful at the end. Indeed, a lot of people in the industry (Linux kernel devs) were impressed by that.
The side effect of my very conservative and practical choices (C language, monolithic architecture, combability with Linux) was that not only the whole project less fun and more complicated to develop, but it didn't trigger much interest in OSDEV community. Over time, I realized that almost the entire OSDEV community (here and outside) is either interested in:
- just-for-fun projects where people decide to re-write the whole software stack, from the kernel to the UI, including a browser, text editors etc.
- working on big mainstream projects like Linux and FreeBSD.
As you can see, my project doesn't fit in neither of those categories: it's not production-ready so that Linux hackers / embedded developers would be interested in patching it somehow, but it's neither fun like the other projects: there is a ton of focus on automated testing, coverage etc. and zero interest in making colorful windows to appear on the screen.
Therefore, my question is: how many of you are investing effort on developing something not-just-for-fun? I mean, do you have a long-term plan to make your project usable in the real world by the industry or the home user, even if it will have only a tiny chance of getting it there? What would be the advantages of your OS compared to what currently exists? I mean, if you're writing a desktop OS, you'll be inevitably competing at least with the mainstream Linux distributions: how do you plan to steal some of their market? And.. are you sure that your should be writing a kernel for achieving that, instead of just consuming Linux as kernel and making its GUI more powerful and user-friendly?
To me, writing the next "desktop OS" is so hard to achieve as goal that not even Linux succeeded in that in 30+ years, despite running on billions of machines. A more approachable (even if still insanely hard) goal would be write a special-purpose operating system, like a real time OS for embedded devices. Do anybody has goals like that? And again, what's your plan to make it, even if it's a 1 in 100 shot ?
Vlad