Yo:
Kevin wrote:
Quote:
For me, what comes next is attempting to create something that does surpass existing OSs. For this "good enough" isn't even close to adequate. An OS is like a hierarchy of abstractions (e.g. boot code, with kernel/s on top of that, with drivers on top of that, with things like VFS and GUI on top of that, with applications and things on top of that). If one piece is only "good enough" (not even close to adequate) then it's far better to replace it with something that actually is adequate before too much depends on it (or to put it another way; you don't build a sky-scraper on sand). Until I reach the point where I'm unable to think of a way to improve the design of the boot code, I refuse to bother with the kernel.
As you write your kernel only as a hobby, you can choose to do it this way. You'll never get a working OS this way, because there's always something to improve in each layer, but there's no requirement that a hobby project ever creates a final product. So, yes, that may be a fine way for you. It probably doesn't work quite as well if you want to get a result in the forseeable future.
While I always, always try to have the most holistic design that takes as many generalized and specific hardware cases into consideration, it is almost inevitable that I will come back to even "perfectly" designed code and have to make changes, if not do large re-designs iterations.
It is the fact that I am (self-assertion) very strong in kernel design that ensures that when I do need to change something, it can be done quickly, smoothly and efficiently. Both sides of this argument are "correct", from my experience: you don't proceed until you have the most perfect design you can have for the component you need to code, with the information currently available to you; but you will also inevitably have to return to even the most pristinely conceptualized of code to change it as more perfect, and in-depth design takes place in later components.
I stopped "re-writing" long ago. Version control in, halts to progress out.
Thorough research -> perfect design to the extent possible with the information available at the current stage -> move on to next stage -> repeat.
EDIT: Basically, this:
Love4Boobies wrote:
A good design would have to be flexible enough to allow for the requirements to change over time.
My approach to design is:
The level of perfection of a design is directly related to the scope of the factors, knowledge and requirements it takes into consideration. It is impossible to achieve truly lastingly perfect design. The only thing that is possible is perfection of design within the ambits of the current scope of known and predictable factors.--Peace out,
gravaera