Ubuntu 11.04 has been released today. Why is that despite the announcement of a new and innovative user interface (Unity) and the inclusion of critical building blocks for private clouds (among others) I don’t get the excitement I used to have when a new release of a major distribution came out?
Maybe I just grew numb of the claims of revolutionary features and disruptive technologies. Or it could just be that I believe that “featurism” doesn’t equate to software quality, usability and future proofing.
I’ve been involved with Linux in one way or another for far too long now (ever since I saw the original message posted by Linus in the comp.os.minix newsgroup back in 1991), and I’ve played with every major distribution under the sun. You name it: SLS, Slackware, Yggdrasil, RedHat, SuSE, Conectiva, Mandrake, Debian, Gentoo, Ubuntu, etc., all got their fair share of the flavor of the month hardware that I had at the moment (still remember running the first few of these on a 386SX 20Mhz). And there was a time when I could literally recite from memory the complete boot process including every executable and config file, and remember the layout of the init rc system for each of these installations. There was also a time when I could quickly take a look a the kernel source code to understand certain behavior, or even fix an annoying bug.
Nowadays things have grown significantly more sophisticated. The diversity in hardware has increased by orders of magnitude, generating additional kernel complexity (and this not only affects the drivers subsystems), the multitude of commercially supported distributions striving to survive and make money compete for the latest and greatest differential feature that will allow them to see their market share increase by a slim percentage, and the overzealous competition with Microsoft forces the proliferation of capabilities that most of the end users will never need.
And the additional complexity doesn’t stop there: software engineering became increasingly more complex by adding layers of abstraction on top of layers of abstraction under the (false) pretension of “more efficient programming models”, for dubious programming productivity gains at best in many cases. I am not saying that taking away pointer arithmetic from the average developer responsibilities doesn’t help avoid common mistakes and potentially increases software reliability, but it seems that nowadays programmers can’t even code a simple quicksort without resorting to the latest and greatest class part of their favorite object oriented language toolkit library (and maybe some of those people should not call themselves programmers either, but that is beyond the point).
There is nothing inherently wrong with having options, particularly when you don’t need to pay for them (at least directly), and with squeezing a few more drops of productivity out of every programmer, but bloat comes at a price: complexity is the natural enemy of software reliability (and usability). And when I say reliability, I also mean security, code maintainability and general system stability.
Going back to the central topic of Linux distributions: what is that a Linux distribution must absolutely provide? A relatively easy way to install a stable system, a good package management system that handles package dependencies (even reverse dependencies) well,reasonable defaults, a consistent strategy to the installation of additional packages and timely updates. This is not much more than what you could get with RedHat 3.0 about 15 years ago. So how did Linux distributions spend the last 15 years?
I am not advocating throwing away what we have and installing OpenBSD (BTW, Theo, source code patches and recompilation as the official method of updating your kernel and your basic distribution in 2011 truly sucks!); what I am really saying is that we should seriously spend some time understanding what is absolutely needed and cleaning house in the major Linux distributions. Is there a reason why we need several word processors? And why is that we would want to have 2 or 3 different window managers?
And to the developers: I’m not saying that everyone should become a demoscene wizard, but thinking and coming up with an algorithm on your own once every a while, rather than gluing classes together all the time can be a quite fulfilling experience.
Opensource is based on the noble idea of diversity tolerance, but it’s also based on less altruist principles such as Darwinism and “benevolent dictatorships”. It seems to me that the Linux Kernel benevolent dictatorship works (at least to a point), but the survival of the fittest principle is definitively not working when it comes to modern Linux distributions.
