Minix 3.2.0: One step closer to the promise of highly reliable OS
groups.google.com
groups.google.com
Simplicity I'll grant, but the reliability argument doesn't really strike me as relevant. Having overseen many thousands of server years worth of uptime, it's almost never the kernel's fault when something breaks. Linux is pretty solid. Most of us are far more limited by the reliability of our applications.
There are niches where higher-assurance kernels are worth it, and maybe that's where microkernels can shine.
This doesn't mean its design is inherently more reliable. Anything can be made reliable with enough eyeballs. I think a design goal of Minix is to increase the reliability per eyeball ratio, particularly when it comes to extending the kernel. Reliability, modularity, performance, and testing are all trade-offs. It's also pretty easy to find a configuration that one would think "should work", but actually causes Linux to suffer, complain, and crash.
The relevant measure isn't the number of eyeballs, but whether they're the correct eyeballs. The wrong eyeballs can decrease reliability.
I suspect the answewer is "no, not entirely" due to other limitations of the model: ports under 1024 are root-only, regular users can't call chroot(), etc etc - but there have been solutions proposed/designed/implemented for most of this stuff , they just haven't had much uptake.
The biggest reason is that it's just easier. Easier to build a new host, install services. If you need to bring the vm down it only affects one application. And so on.
Other important differences:
* The MINIX project now uses `git` as its version-control systemIt was not meant as a jab at minix, i thought others would appreciate the continued interconnection between Linus and AST. I apologize that I did not explain my comment in greater detail.
Moreover, vcs used to manage Minix'es source has zero impact on the merit of using one kernel architecture over the other.
[EDIT]: I understand that the "kernel war" argument is not what you meant, nevertheless Minix using Git is hardly a twist in Linux vs Minix history.
What does hindsight have to do with anything? It seems that any discussion about the relationship of two individuals is always retrospective...
With some of the personalities involved in various high profile OS projects, and the numerous flame-wars, that's a useful detail.
Would I be right in assuming that Minix has put on a bit of weight since then?
Can you sell me on why I should be interested?
For lack of a better definition of dependability, let us adopt this one: A device is said to be dependable if 99% of the users never experience any failures during the entire period they own the device. By this definition, virtually no computers are dependable, whereas most TVs, iPods, digital cameras, camcorders, etc. are. Techies are willing to forgive a computer that crashes once or twice a year; ordinary users are not. Home users aren't the only ones annoyed by the poor dependability of computers. Even in highly technical settings, the low dependability of computers is a problem. Companies like Google and Amazon, with hundreds of thousands of servers, experience many failures every day. They have learned to live with this, but they would really prefer systems that just worked all the time. Unfortunately, current software fails them.
The basic problem is that software contains bugs, and the more software there is, the more bugs there are. Various studies have shown that the number of bugs per thousand lines of code (KLoC) varies from 1 to 10 in large production systems. A really well-written piece of software might have 2 bugs per KLoC over time, but not fewer. An operating system with, say, 4 million lines of code is thus likely to have at least 8000 bugs. Not all are fatal, but some will be. A study at Stanford University showed that device drivers – which make up 70% of the code base of a typical operating system – have bug rates 3x to 7x higher than the rest of the system. Device drivers have higher bug rates because (1) they are more complicated and (2) they are inspected less. While many people study the scheduler, few look at printer drivers.
The Solution: Smaller Kernels
The solution to this problem is to move code out of the kernel, where it can do maximal damage, and put it into user-space processes, where bugs cannot cause system crashes. This is how Minix 3 is designed."
* I have a friend who was an engineer for Tandem (now HP) in the 90's. They tested their servers in a demonstration for the government/defense department by taking them to a shooting range and running a benchmark test while firing indiscriminately with automatic weaponry. The story goes that the transaction processing declined precipitously as chips, blades, and motherboards were shattered. It went from millions, to thousands, to just a few dozen transactions per second with no data loss when a bullet clipped the serial jack they were using to log the benchmark. They got a very large order afterwards from the government/military.
I don't know if it actually happened (a Google search doesn't show anything), but having been shown by him the redundancy built into all levels of their architecture, and heard the stories about real failures in exchanges, air traffic control, and other critical never-turn-off deployments they do, I believe it could have. Reliable computing is possible.
Anyway, if you like anecdotes, I saw with my very own eyes the network cable between two OpenBSD firewalls chopped with an axe to no detrimental effect. So there. Monolithic kernels are superior to motherfucking axes.
God they were awful. The conservatism of design meant that although the hardware was fine and redundant and reliable, the software was crap; user hostile and buggy.
They would have been far better off making reliable clusters rather than make a machine internally redundant.
And expensive. Something around a million dollars for a 75 MHz machine (Stratus) in 1997.
People have varying tolerance levels depending on what they're using. We have an insanely low tolerance level for jet failure (the safety checks and expense that goes into airfare is extremely high) due to the public nature of the failures. We have higher tolerance level for car failures even though they claim the lives of far more people every year. We have an extremely high tolerance level for personal computer failure.
I'd like to be wrong. Contrary to your statement, I find myself, as a techy, to be far more critical of computer failure than the average user. I will discontinue use of poorly written software much quicker than my non-techy family or friends.
It's just another classic risk/reward tradeoff. End users tolerate more risk from computers in exchange for the benefits.
Also, if you look at the design of Minix 3, they do address many of the concerns you mention. There's an infrastructure for checkpointing applications, and a “resurrection” server that acts as a configurable watchdog service for the entire software stack from device drivers to web servers.
The real goal of the microkernel architecture is to make these watchdog services as reliable as possible (there's only a few thousand lines of heavily audited code running beneath them). That, combined with user-space device drivers (so faulty hardware or driver code doesn't bring down the whole system) would address most of your concerns.
No surprise, that's the path they are headed down. I even see that this release includes a "block device fault injection driver" for simulating hardware failures.
Argh. The author just had to specify that the unsophisticated 12-year-old is a girl. Because, hey, a 12-year-old boy might be a larval hacker, right?
> or a grandfather
Old people is another category of people who hopelessly "unlike" the presumed Linux Magazine reader. They certainly aren't interested in microkernels, but let's make sure they feel suitably old and marginalized if they ever try to change that.
But hey, it's not like programmers need to update their Internal Information Hashmap. Just put something in there once and leave it alone since that thing is delicate and updating it can sometimes crash your mind.
Do any non-toy web browsers run on Minix 3?
If they could get full-screen webkit/chrome with auto-updating working, there's a lot of potential use-cases that open up. A truly reliable, always-on web device with low power requirements? Sign me up.
When collecting repositories for searchco.de I literally have spent hours hunting around on many project pages looking for the page which points you at how to get the source for a project. Its usually buried in a wiki page in the developer subdomain. A simple link from the homepage with "Get Source" would save myself and im certain a lot of others a great deal of time.
Linus Torvalds' post to comp.os.minix newsgroup.
What has that to do with Minix now?
Linux caches in RAM pages of files it reads. It will evict them at the drop of a hat if it needs to.
Sadly, no matter how many blog entries appear on the subject, people still expect to see free ram, and think linux is bloated when they don't see any.
If you don't like that behavior, I don't know if any OSes leave "free" ram untouched. They might call it free though, even when it's used by the OS for caching.
On the issue of microkernels vs monolithic, I prefer microkernels for their elegance in theory. If one appears with performance in the ballpark of linux, that glibc supports and that will run linux userland with no problems, I'll switch. I will not, however, give up functionality in the name of ideology.
$ free -m
total used free shared buffers cached
Mem: 2009 1491 518 0 466 363
-/+ buffers/cache: 661 1348
Swap: 1992 0 1992
Here, you want the number 1348, which is the "free" memory you have, not the number "518" which at first glance is the "free" memory."It was only with the third version, MINIX 3, and the third version of the book, published in 2006, that the emphasis changed from teaching to a serious research and production system, especially for embedded systems. A few of the many differences between MINIX 2 and MINIX 3 are given here.
Going forward, we are making a serious effort to turn MINIX 3 in an industrial-grade system with a focus on the embedded market, especially for those applications that need high reliability and availability."
But I'm fairly skeptical about how much use (if any) Minix is getting outside research and education. Aren't there already widely deployed HR/HA OSs that target the embedded market? What real advantages does Minix have over something like VxWorks?
Does VxWorks come with source code? I guess this might be critical to some type of applications.
For me the positive is to see more microkernel architectures getting spread.