The Perfection of the OS and the Purpose of Generic Design

Posted By: Beholder, March 8th, 1999

Is a perfect OS possible? In a word: No.  The reason some of us take on the challenge of designing, and implementing a new OS, is to try to make something that is currently not perfect, into something that IS perfect. Perfect, however, is a relative measurement.  A perfect OS would need to be designed from the ground up, knowing the user (notice no pluralization), and the hardware it will be running on. It would have to know both of these elements quite intimately.  This as, we can guess, would not be feasible, or of much use to anyone but the target user.  The whole point of designing an operating SYSTEM, is to create something that is usable by a group of people.  The more generic the design, the larger the possible group can be.  This is why one of the principles of UniOS, is a simple, generic design.

Making something that is generic and simple is not an easy task. Imagine your target market being single and multi-purpose servers, gaming machines, office productivity machines, and industrial control machines. Each of these types of computing tasks are very different, and therefore require different methods as to how the computer processes.  Some would say, that changing how a computer processes, usually requires a change in the OS, and probably a change in the software design.  This is a correct assumption about our current set of operating systems, because they were designed to work that way. No OS is truly generic enough to change HOW it processes.  Processing is not just the number crunching (that is pretty much optimized for any platform), but it's how the system functions as a whole.  For example, things like task scheduling, memory swapping, inter-process communications, and I/O.  All of these elements, and how they function, comprise the systems processing method.

Adaptive Processing will be a keystone to the design of UniOS.  Each element of the system will be designed with platform independence in mind, and therefore must be generic enough to be able to recompile on the target system, with the processing needs of the target in mind.  In essence, a program(object) should be more of a description of how it should work, rather than the nitty-gritty details.  The only way for an Operating System to make any headway into a saturated market is to design it to do anything, do it well, and do it on all kinds of machine architectures.

How this is to come about is still not decided. If UniOS is to have a kernel, then it must be able to support multiple kernel types, to allow for this level of flexibility. If it is to be a simple collection of code objects in memory, then they must have multiple ways of processing programmed in.

binEng's Reply to this document

As you yourself mention, perfection is relative. Not only that; often perfection even is subjective. But no matter how personal the judgement of perfection is, there is one thing that is objective; that of the object's properties related to the individual's idea of perfection. We can be assured that the idea of perfection differs from person to person. This leads to the conclusion that no single piece of software can ever be perfect, if we define (universally) perfect as perfect for every person. So, to maximize the "perfection rating", the object - software system in this case - needs to be adaptive. This is just along the lines with what you wrote. However, you makes it sound somewhat misleading, the point is not to make the OS so generic it can be used for every purpose and by everyone, to get as large user-base as possible. Windows does that. Therein lies not the solution, as MS painfully clearly has shown with their costly (but widely used) experiments.

The system should not be basic to be able to cover a lot of uses. That is the wrong way to go, and only creates the "master of none" syndrome. Without specialization, such systems become pointless. Without an edge, they become blunt. A different approach is preferred. The system shouldn't delibrately describe generic ways - it should describe /no ways at all/, but build a consistent and logic - almost axiomatic - system. In that way, there is nothing to stop specialization of single systems in any desired direction. That includes a generic system, if that's what's wanted.

Of course, that's an exaggeration and simplification. Designing something for nothingness - or rather /leave out/ parts of the design, isn't
something that lets itself be done just like that. The answer is more complex.

The answer is abstraction, platform-independence and consistence in the design (no context-specific compromises). To get sufficient abstraction and consistence, object-orientation should prove useful, if not necessary.

This is what I try to do with mOS. Simple rules, context-free features, yet capable of advanced tasks.