22 June 2007

Linux reloaded

Linux users are fiddlers.

They like to poke stuff, prod around, fix this and that, curious like little monkeys. They can be extremely individualistic, never satisfied by someone else's solution, willing to customise the very last bit of everything.

That's why there's such a plethora of Linux "flavours" on the net: every taste is catered for by a niche community of fellow fiddlers. It's quite a rare event when one distribution emerges as a major player, calling to itself a wide number of sysadmins, developers, hobbyists and other variegated humanity. It's even rarer to see a not-for-profit enterprise gain and maintain such a high level of quality and success through the years, instead of waning and eventually fold or "sell out" to market forces.

Debian and Gentoo are two of a kind. Apparently very different in their approach to technical issues, they actually manage to channel their developers' and users' geeky enthusiasm in something bigger, thanks to explicit and implicit ideological premises which look much more similar than what their communities might think.Gentoo is the ultimate fiddlers' choice. The implicit philosophy is rooted in believing the user must have total and complete freedom with their software, without being obstructed by the distribution developers in any way. Absolutely everything is “tweakable”, as close to the metal as possible, as faithful to upstream sources as possible. You can rebuild an entire system literally from scratch, modifying every flag, every variable that you care of (and more) and still end up with a configuration which will (usually) allow for easy maintenance and upgrade; applications will look and work pretty much as their original developers intended, with very little distribution-specific glue.

The problem of this approach is that there is no opt-out. Very few packages have a pre-built binary, and even then switching between binary versions and regular ones is not really foolproof. This means long compilation times, and a more stressed hardware overall. The community is a bit more anarchic than the average bunch of Linux geeks (if possible) and efforts to institutionalise it resulted in alienating several key developers, and accusations of getting too close to the disparaged "political" model followed by Debian. The original founder moved on (to Microsoft, the enemy!), then dwindled back to find its child creature having changed too much for him to bear. It's not clear if Gentoo will "still matter" in a few years.

Debian started in a similar way (much earlier than Gentoo), but slowly settled on a very different philosophical stance. If Gentoo's credo is "as bare as possible", Debian wants to be "as perfect as possible"; Debian developers won't release sub-par solutions, systems that (might) fail to deliver, even when the alternative is to not release anything at all. They'd rather think something through, to come up with ideas which are rational and solid, than to introduce short-lived hacks that might, one day, wreck your system or embarrass the developers.

This philosophy produced what is currently regarded as the best software packaging system ever deployed (dpkg/APT), which manages to be both extremely simple for users to adopt, and extremely flexible for developers to customise. It also resulted in the biggest software repository ever maintained, with thousands of packages available for dozens of supported architectures, whose maintenance is an extremely challenging task by itself.

This also reflects in Debian's social stance, which is both more logical and radical than any other distribution. While Linux vendors will usually play in a very grey area, mixing commercial and not-for-profit interests (with very little safeguards for both parties), the original Debian community unapologetically chose to always guarantee the interests of not-for-profit initiatives (and the rights of end-users) over corporative greed.

While Linux communities usually favour informal structures and processes, Debian developers laid out a complex (and often Byzantine) system to guarantee that participation be open to everyone on a fair basis, and that solutions be transparently chosen in democratic ways.

The problem of this approach is that, in the very apolitical geek community, it can look very slow and "untidy". Lists and forums are prone to flame wars and politicisation, slowing the pace of development. Zealotry, that very human phenomenon which routinely appears as soon as social laws are drawn, runs wild in the non-technical elements of the community, sometimes forcing it to introduce unpopular changes (if extremely logical ad precise).

Recent examples of this behaviour include the year-long license "purge" (dozens of packages were removed from the repository or forced to explicit their license as GPL), the ABI migration (a change in the GCC compiler which required all packages to be rebuilt or modified, delaying release of the 3.0/"Sarge" release) and the fight with the Mozilla community (which, after becoming a corporation, challenged Debian's independence in handling their sources, to which Debian developers replied by ditching the official Firefox/Thunderbird names and logos in their builds, replacing them with ironic Iceweasel/Icedove counterparts -- a move, they say, which was then technically obligatory on legal grounds). These were all but uncommon events for Linux distributions, however only Debian managed to choose the most unpopular ways to resolve them... because they were, strictly speaking, the most radical and logical as well.

This "infrastructural" work (both legal and technical) allowed Debian to eventually emerge with two major releases in a relatively short frame, and a very good outlook for the future; while all distributions experience a shrink of efforts based on their codebase, Debian produced a spin-off that emerged as possibly the most popular distribution for non-geeks (Ubuntu), the revolutionary "LiveCD" approach (pioneered by Knoppix), and went on to become the de-facto standard for new efforts.


This post started with the idea of explaining why yesterday, on my laptop, I switched from using Gentoo back to Debian. Having experienced Gentoo for a year, I grew a bit tired of huge compilation sequences; moreover, the pace of changes and breakages in the "portage" package repository is currently very high. I used to rave for the latest and greatest version of each application, but now I find that 99% of my requirements are well catered for by year-old software. So I moved to Debian's stable release (4.0/"Etch"), whose rock-solid quality I already know. I used to run the unstable "Sid" branch, but I no longer need bleeding-edge stuff, neither need I heavily tweak a system in order to make my laptop devices work, which was the experience that had led me to Gentoo. I know that the Debian community is massive, and there are thousands of support resources on web and IRC, so I'm confident that, should I have a problem, somebody will know the solution already. And I know that I'm running software with a social purpose, to which I can contribute something back without feeling that I'm just being used for cheap labour.

Is this a sign that Linux is finally mature, stable, and ready for the masses? Or it's just that I'm getting old?

For sure, I’m still a fiddler; and that’s why I still run Linux.