Well, this may need a little bit of introduction. To start with, we’re going to fix some definitions, to make sure we’re all talking about the same thing.
- Computer : Here, we’re going to put the “computer” name on any programmable device – that is, a machine that is able, under certain structural limitations, to execute any instruction one told it to execute. If you take a watch or a hammer, they’re made for a single purpose (measuring elapsed time since you set it up and smashing poor innocent things) and are really bad at doing anything else. The engineer that conceived them knew what use they had and made them so that they could achieve this goal with maximum efficiency for a minimum price. A programmable device, on the other hand, isn’t made for a specific task. Its purpose is as vague as possible, so that it could be used in a lot of different applications – lots of which the engineer didn’t think of at the time he conceived the thing, leading sometimes to important reliability issues.
Examples of computers : cellphones, desktop computers (the ones with the screen, the keyboard, the mouse, and the pack of wires), laptop computers, ATMs, radios, modern washing machines… In fact, pretty much anything including electronic components nowadays.
- Software : A set of instructions for a computer, also called program or application. The instructions given to a computer is called software in order to contrast with the machine itself, which is called hardware : one is soft, easy to change, whereas the other is hard, fixed, permanent.
Examples of software : Microsoft Word, Adobe Flash, Mozilla Firefox, operating systems, iPhone apps…
- Operating system (introductory and non-definitive definition) : As of today, computing hardware takes the form of electronic chips that manipulate small pulses of electric current in order to operate and communicate with each other. Since ordinary human beings can’t measure, analyse, and produce such currents, there needs to be some kind of diplomatic help between them and the machine, explaining to the machine how to makes use of its hardware capabilities (screen, keyboard, mouse, touchscreen, supersonic screw driver…) so that it can communicate with the user. Technically, this takes the form of software that one puts into the machine before the user starts using it, telling it how to interact with the user. This program is called an operating system. It provides an interface – a link – between something making use of the machine (human being or program) and the machine itself, essentially for convenience and reliability reasons.
Examples coming later.
Now that I’ve defined some wording, it’s time to define what I’m going to use it for. And to do this, I’m going to talk a little about my personal life. Don’t worry, it won’t be long.
As long as I remember I’ve been living with computers around, and as long as I can remember my mother always told approximately the same thing about them : “Oh, hell, can’t those machines just work properly ?”. As I grew up, I realized that she wasn’t the only one saying that about computers : almost anyone that wasn’t literally born with them around seemed to think the same thing about em. Curious. Why didn’t I have so much difficulties using it all ? As I analyzed my actions, I gradually realized that I just had learned to work around various issues and illogical behaviors of the machine that my mommy just couldn’t ignore. Digging through it further, I quickly found out that very often, those failures didn’t come from hardware issues like burned out component or short circuits, but from software errors, that by nature should very easy to correct.
Becoming more experimented at the task of analyzing computer issues instead of just working around them, I discovered that whereas the software running on my desktop computer was almost always guilty, one kind of software was a lot more guilty than any other kind of software. It was this fellow guy whose goal is to talk with me and other programs : the operating system. On the other hand, studying other operating systems (especially those running on my Nokia cellphones and on some high-end portable audio players) made me learn that designing a good consumer-oriented operating system which totally rocks could be possible with only a bit more work. I hence thought that someone already did it for desktop computers, and tried to find it in the vast world around. I tried for quite a long time. Tried Mac. Tried Linux. Tried to tweak Windows. Tried BSD. But all those systems, as I gradually figured out, failed by design at that task of being a good operating system for most people I knew about. So I decided to try and fix this problem by, if not making one by myself, at least trying to give someone interested in the task the keys for that. This is why this blog is born.
Let’s put the plan of the following discussion :
- First, we’re going to study some existing operating systems, from various points of view. This way, we’re going to gradually improve the blurry definition we’ve given before, and introduce things that make a good operating system, and things that make a bad operating system.
- Then, we’re going to put it together, picturing what are the issues that a good operating system is here to address.
- Next, we’re going to describe how an operating system matching all these goals could be actually made.
- And finally, if everything goes fine, we’re going to study an actual implementation of the operating system conceived before.
Hope you’ll be around for all this time, and hope I’ll be too of course… And now, if you’re ready, let’s get started !