Operating System Designers

An OS designer is someone who considers OperatingSystemsDesignPrinciples, UserStories, functional requirements, and other such things and creates the concepts to reconcile them all. So for example, LinusTorvalds is not an OS designer since Linux is a carbon copy of Unix.

A good OS designer is someone who knows and is willing to use all existing OperatingSystemsResearch, but never performs any such research themselves (at least, not as a designer). This might not be the case for all design fields, but given the enormous amount of operating systems research which has been underutilized, abandoned or just plain ignored, it is certainly the case with OS design. And since most UIs properly belong to the OS, it shouldn't surprise that the same goes for them too.

An architect is someone who reuses existing designs and tailors them to the situation at hand. Or the reverse. It all depends on whether you want to say that FrankLloydWright was a bad designer or a bad architect for ignoring user needs. This page goes by the first convention; a designer creates, an architect reuses. So in selecting the features that constituted Minix' variation from Unix' architecture, to be able to implement it on a very primitive cpu, AndrewTanenbaum did architectural work.

see "Systems Software Research is Irrelevant", Rob Pike, August 5, 2000 (mirror) http://www.eng.uwaterloo.ca/~ejones/writing/systemsresearch.html


Ongoing OS designs:

Good OS designers:

Bad OS designers:

In each of the following, it would be interesting to hear what they should have done, in addition to the critique of what they did do. E.g. in Plan9, which things should have been made more uniform? Want more details?

Why is PlanNine bad design? Because it's not uniform. Processes aren't files in Plan 9 but only represented by them. For Plan 9 to be perfectly uniform, it should be possible to write to a file to halt a process, copy a bunch of files to clone it, and write to a couple of files to restart them. IOW, fork() would've been a user-level script. And that's only judging Plan 9 by its own standards.

At the time Plan 9 was made, it should really have been an object oriented OS (files are just crippled cases of objects) and the imperative notion of giving commands to fids should have been done away with by aggregating and nesting messages. Instead of "goDown(a); goDown(b); goDown(c); do(d)", it should've been passTo: #(a b c) message: d.

And of course, Plan 9 lacks caps. This is important since getting rid of superuser and having a decent security scheme was one of the much vaunted features of Plan 9.

Then there's other stuff like that Plan 9's namespace is globally inconsistent. This is a deficiency they recognized, but have never fixed. Well, you can't fix it if you stick to the concept of "binding" filesystems to a namespace with mounts, you have to use bridging with translators or portals instead.

And of course, the crippling limitation that each directory can only have one parent directory. They came up with the "wonderful" sop of union directories instead.

Why is HURD bad design? Because the only innovation in it are translators, and by "innovation" I mean something that's been discovered in the last 30 years. Translators occurred notably in GrassHopper. What's a translator? It's a replacement for a "mount". A translator isn't something that's attached to a namespace but rather lives within a filesystem to dynamically extend it.

Why is EROS bad design? Because there is a kernel, it's neither OO nor functional, its capability scheme is 30 years old, the kernel holds all caps instead of their being distributed throughout the system. This is not state of the art!

Why is SynthesisOs bad design? As I understand it, it does nothing that SmalltalkLanguage doesn't do. It just compiles high-level source code into native code at runtime. Yawn.

This assessment is both unfair and incorrect. Synthesizing kernels do not simply compile existing code JustInTime; rather, they generate new low-level driver code (off of an existing template, presumably) which is optimized specifically for each I/O service call. The premise is that the overhead of generating new code is offset by the greater efficiency of the optimized drivers. - JayOsako

Okay, fine. Then how is it different from a JIT + a dynamic optimizer that you call before you have any proven need for optimization? As opposed to Self's dynamic optimizer which only gets called after you have a proven need to optimize stuff ...

When the only innovation in your OS is a different use for a compiler, it's really taking LanguagesAreOperatingSystems a little bit too far. -- rk


[section deleted -- provides no insight beyond that many, many OSes are simple knock-offs of each other]


There are a large number of aspiring amateur OperatingSystemDesigners on the web today, a handful of whom have actually produced working and sometimes even innovative systems. The remainder of this has been relocated to OperatingSystemsImplementation.

Writing's fine as long as it's never, ever confused with designing or indeed suggested that one has anything to do with the other. The difference is mentioned in LanguageDesignersOnWiki, and here's a few points to help illustrate the distinction.

You're not an OS designer if,
  1. you assume that a kernel exists in 2002
  2. you refer to LinusTorvalds in any way, shape or form, except as caveat and condemnation
  3. you refer to C/C++ as a high level language past 1980

You don't even know the meaning of the term if,
  1. you think that a bootloader is part of an operating system
  2. you seriously advise people to clone an existing project and improve it
  3. you call yourself a coder


[I once wrote and shipped a special purpose OS, purely to save a deal that Sales made in a stupid way (they promised things that didn't exist and had never been discussed). In a sane world it wouldn't have been necessary. I wasn't trying to do a "good" design in some absolute sense, I was just trying to do something fast as damage control, and I succeeded, so I'm happy about it as a job well done. I would never try to defend any of its features as compared to some ideal, but its features were perfectly adapted to the microscopic problem it was solving. There's nothing for me to be ashamed of; on the contrary, I'm proud of it. Yet I don't see a non-derogatory category above in which to list this (if, hypothetically, I were to want to list it). Surely there's room in the world for special-purpose technology like that.]

As Doug points out in LanguageDesignersOnWiki, even coming up with a crippled, stripped down version of something can be a challenging design job requiring lots of creativity. Two things though. First, this page isn't limited to OS designers on this here wiki, so if we were to list everyone who ever did any sort of design on an OS, the list would be useless. Second, you'll have to provide more description for others to decide if you actually did any designing. Third, there's nothing wrong with being an OS writer if that's what you're paid to do.

[The contract was going to be lost because a certain feature was ten-fold slower than it needed to be (causing lost data); since millions were at stake, every senior engineer had checked out the system, and they all agreed that the existing OS could not be sped up 10-fold in this area. So I designed and wrote a new OS that did that one thing as fast as the hardware allowed, yielding the 10-fold increase in performance necessary. I also invented and implemented a pure-declarative UI language to drive the user interface, which was integrated into that special purpose OS, and got a couple of guys to port a slew of device drivers over to it. Not bad for a 3 month project, which was all the time that was available to save the contract.]


See LanguagesAreOperatingSystems
CategoryOperatingSystem CategoryRant

EditText of this page (last edited August 25, 2007) or FindPage with title or text search