I feel that our wiki is structured in such a way that it misleads newcomers to focus on the wrong aspects of OS development. They all seem to spend a lot of time on something that has essentially very little to do with operating systems: how to set up a development environment and make a very basic piece of software boot on the bare metal. Operating systems are really about two things:
managing resources and
providing a clean programming interface. We go into details about conventions that anyone could look up, such as how to interact with some arcane piece of hardware or what the on-disk structure of a particular file system is but we fail to teach the core of the subject. And to make things worse, their code invariably ends up with procedural abstractions but no interface abstractions (in just the same manner the
Bare_Bones terminal knows about VGA, which is something no sane programmer would ever design).
I propose we actually start recommending that people write their operating systems in user mode and move what are currently the introductory articles into some sort of
Interesting Side-Projects category. Before you label my proposal as controversial, think of some of the advantages:
- People can start working on their operating systems right away and learn what they are all about.
- They get to use all the regular debugging tools they would when writing application programs.
- They are more or less forced to use nice abstractions, a practice that should hopefully rub off.
(PS: I also have a feeling it might keep some of the adventurous-yet-unwilling youngsters out of our hair because pretending a file is a disk, moving blocks of memory around in a process' address space, or getting signals and changing contexts is less flashy than the delusional "I'm working on the next Windows".)