The Atalanta Systems Guide to Open Source Operating Systems
One of the most common questions for newcomers to Linux is “Which Linux version should I use?” or “Which Linux version is best?”. I’m also asked for my professional recommendations about which OS, or which distribution people should run, especially by people new to the idea of using an open-source operating system. I had this conversation again very recently, and felt it would be worth publishing my own experiences and recommendations.
Broadly speaking, computer use tends to be divided between workstation/desktop and server. In the review that follows, I’ll try to approach the discussion from both perspectives.
Red Hat
For many people, especially in the commercial business world, Red Hat is Linux. If you work with Linux professionally, my experience is that the vast majority of machines you will meet will be running Red Hat.
Back in 2003 Red Hat changed the world. Until then Red Hat (by this stage at version 9) was entirely free. You could buy support from Red Hat, but all the software, all the binary packages, all the patches were freely available. Red Hat changed the rules - they announced that henceforth Red Hat would be producing two versions - an enterprise grade, commercially supported, paid-for ‘Enterprise Linux’ (these days referred to as RHEL), and a ‘community edition’ - called Fedora Core. The idea was to use Fedora as a community driven, fast-moving, entirely free and open test bed, from which technology would trickle down to the more stable enterprise edition.
So how does Red Hat shape up in 2009?
On the server, Red Hat is unquestionably the industry leader. I’ve deployed and managed many hundreds of RHEL 2, 3, 4 and 5 boxes, and can say without a doubt that it is very highly reliable and stable. Documentation is generally of high quality, and on account of its status as the industry standard, there’s also a vast amount of information available on the internet. Red Hat commercial support has generally been good, on the few occasions I have had to use it.
One big advantage of RHEL, since version 5, is the adoption of the yum package management and dependency solving tool. Coupled with a decent understanding of RPM, and when best practices are followed (i.e. not mixing repositories and randomly installing third party packages), this provides what is, in my view, the ultimate *nix package management solution.
A further benefit of Red Hat is they have a large number of incredibly smart people working on some very clever tools - a quick glance at the suite of stuff coming out of Red Hat’s Emerging Technology (ET) labs reveals a huge depth of well-written and carefully thought out utilities. Most of these have good documentation and active mailing lists and IRC channels. They’re also frequently written in Python, and are very open to patches and contributions.
On the down side, the implication of a very stable platform is a very slow release cycle. This means certain packages can get really quite significantly out of date - Ruby and Python are obvious examples, but similarly the Apache webserver, Tomcat, PHP, MySQL - these have been patched for security but few if any upstream features or improvements make it into the Red Hat repositories. This can be mitigated in some ways - Red Hat sell an Application Stack, which provide an updated LAMP platform, and there are reliable community projects which provide newer version of the stock packages.
Another disadvantage is that Red Hat’s Licensing structure means that cost can quickly get expensive if there is a requirement for anything not in the ‘base’ channel - so clustering support, virtualisation, the application stack and other add-ons can be quite a budget breaker.
On the desktop, RHEL ships with Open Office and Firefox, and for the very simplest of tasks will be adequate. However, manual intervention will be required to get java and flash plugins working, and the default music and video playback capabilities are primitive. Notionally Red Hat is suitable for the desktop, but it’s rarely used in this environment.
CentOS
As soon as Red Hat announced their plans for commercial linux, groups of people sprung into action. Being an open-source company from the very beginning, Red Hat agreed they would continue to provide source rpms for all their software (to subscribers). Thus immediately it became possible to rebuild a free-as-in-beer RHEL from the sources, having removed logos and not freely distributable content. Thus the CentOS project was born.
CentOS has most of the advantages of advantages of Red Hat - being 100% binary compatible, it’s exactly as reliable and stable, only it’s absolutely free.
You don’t get official commercial support, and there is a delay between the release of the latest Red Hat point release, and the CentOS equivalent. This can be several weeks, or more.
CentOS users tend to be seasoned Red Hat users, and frequently seem to occupy the higher strata of professional Linux users. This means that for the clueful, the community support is generally excellent. I know many of the CentOS core developers personally - they’re a super bunch.
Although it is perfectly possible to run CentOS as a workstation distribution, taking advantage of its reliability and stability, this is a somewhat manual undertaking. Not a problem if you’re a seasoned Linux administrator, don’t need the latest and greatest desktop toys, and don’t mind a bit of work and research to get things up and running. However, the same comments for Red Hat apply here: CentOS on the desktop is possible, but unusual.
Fedora
If you want to know the future of Linux, track Fedora. It’s fast moving, pretty and powerful.
Everything you would expect in RHEL is in Fedora, but much newer. RHEL is ultimately built from Fedora, so in effect you get a very good idea of what’a going to be in future releases.
Releases are frequent, but generally of high quality. There is no easy upgrade path between editions - the principle is simple: You keep backups? Fine, just reinstall periodically. It is possible to upgrade with yum, but I can’t recommend it. Maybe the process has improved since I last tried it, but if you want an upgrade that is guaranteed to work, just reinstall.
On the desktop, Fedora is cutting-edge - there is plenty of good quality, community-contributed documentation for getting the usual requirements set up.
Debian
Debian, for me, just gets it right. I’ve used Debian consistently since ‘Potato’, and have found it reliable, easy to keep up-to-date, logical, and secure. It’s very portable - running faithfully on eleven platforms, and quick and easy to install.
At any time there are three Debian branches - stable, testing and unstable. Stable is as its name suggests - solid, reliable and slow to change. Testing is generally pretty up-to-date, and pretty fast-moving - it represents what the next Debian stable release will be, and periodically is frozen, and then becomes stable. Unstable (also called Sid) is bleeding edge, very fast moving, and occasionally broken.
A frequent criticism levelled at Debian is that it can get out of date. Once stable is released, only security updates will be applied, meaning the latest and greatest features never make it in, and as time elapses, it begins to look a bit long in the tooth. In fairness, this is no different for Red Hat or CentOS. However, Debian has a well-designed backports system, which enables newer packages to be built using the stable tool chain. These naturally carry the risk of compromising the stability of the system, but it’s a reasonable compromise. Furthermore, Debian Testing is usually every bit as stable as Fedora or Ubuntu, and pretty much equivalent in freshness.
One huge win is the breathtaking number of exceptionally well-maintained packages that are available out of the box. At last count there were something like 15000 packages available across all platforms. Debian maintainers have earned a (rather unfair) reputation as somewhat grumpy, and perfectionist and pedantic - precisely the people you want to ensure consistently high quality of software in your community operating system.
For a server OS, Debian is ideal. The package maintainers sometimes have their own peculiar ways to manage things, but they’re generally well documented and well thought out. Most packages also come with a curses-based configuration tool which sets up the most commonly used setups out of the box. Many times when I’ve needed to get something up and running very quickly, in a way I can trust and rely on, I’ve turned to Debian.
Debian’s ‘political’ credentials are unmatched. By default they ship only software released under a respected open source license. This extends to the Firefox browser, which is shipped as ‘Iceweasel’ - with the non-free components removed. The Debian maintainers also take a firm line on the linux filesystem hierarchy - rubygems, for example, are forced to be installed in /var/lib/gems, and are not in the default shell path.
This can make getting drivers for proprietary hardware a challenge, but again, there are good repositories available which provide these packages. Use on your own conscience, and at your own risk.
Ubuntu
Ubuntu is a funny beast. Based on Debian sources, it ought to share all the benefits of Debian, but with the added bonus of commercial support and marketing from an increasingly recognised brand.
Ubuntu has invested heavily in making stuff work automatically - installation is via a live cd, with almost no user interaction. Most of the system is automatically configured, and auto-discovery of hardware requiring third party drivers, together with easy tools to obtain and install the drivers means that an Ubuntu system is pretty much the best guarantee you have to get a system that ‘just works’ out of the box.
As a result of this ease of use, Ubuntu has made big strides towards making Linux publicly available and easy. Coups such as preinstallation on consumer hardware - both netbooks and Dell workstations, have made Ubuntu the name most non-geeks think of when Linux is mentioned. Within the system, a good job has been done making everything look the same, and pleasant to use.
The downside to all this is that the general quality of Ubuntu’s six month releases has been seriously questioned. Several releases, including the most recent, have been characterised by really quite dreadful reports of instability and unreliability. Ubuntu’s commitment to making third-party drivers available has also been a two-edged sword. They can’t guarantee their stability or quality, yet they’re shipped with Ubuntu. There’s been some interesting debate around this subject in the Linux press recently - read more about it here.
Ubuntu is also, of course, run entirely for profit. Unlike the Debian project, which enjoys a sort of democratic process, the decision as to what makes it into each Ubuntu release is largely made by Canonical.
The blessed antidote to all this is that Ubuntu does offer a Long Term Support (LTS) distribution, every two years. While the initial release stands every chance of being as buggy as any other, after a few months these are mostly ironed out, and by the time of the next release, it’s generally pretty reliable. The great thing is it’s then available and supported for a further 30 months. A predictable two-year release cycle, with commercial support, offering a general package level which is, on average, slightly newer than Debian stable, is actually a pretty good recipe for success. By way of a reference, I would say that of all the laptops I have used, my favourite has been one running Hardy Heron (8/04 LTS).
Slackware
Slackware was my first Linux distribution, and for many years was my favourite. Its philosophy is simple and old-fashioned. Provide a stable, up-to-date platform, using the latest stable releases of userland tools, with a vanilla kernel from kernel.org. Packages are distributed in the form of tarballs, or software is installed from source.
Slackware makes the assumption that you aren’t stupid, you know what you’re doing, and you can read manual pages.
I still have a soft spot for Slackware - it is always pretty up-to-date, has a simple, manual, text-based installer, and reliably provides a lean, fast system.
It’s a good way to learn about Linux - almost nothing is provided for you - you have to work it out from the fine documentation.
The obvious drawback is the lack of a dependency-solving package manager. This makes it tricky to install software if you made a mistake in the installation process, or if you want to install something not provided by the distribution. Third-party package tools exist which go some way to addressing these issues, but these are not officially supported. For more information see Slapt-get.
Suse
Suse is another Linux company that has changed. Based in Germany, and originally named SuSE, they were early innovators, putting a huge amount of effort into Live CDs, the KDE desktop, and their integrated system tool, YAST. They were also one of the early supporters of a 64 bit kernel.
Novell purchased SuSE GMBH in 2003, and rebranded to SUSE. Shortly after, in 2005, there was the release of the community edition (opensuse) with the paid-for enterprise editions continuing (Suse Linux Enterprise Desktop/Server).
Suse is very well regarded, particularly on the European continent, and in the world of high performance computing. It is also RPM based, however, my impression is that provision for non-distro packages is not as great as for the Fedora/CentOS/Red Hat family.
The big weakness is that Suse lacks a CentOS equivalent - there is no freely available Enterprise Suse, which to me leaves them marginalised. I’m very rarely called upon to manage a Suse machine.
On the desktop, Suse has always been excellent. Their paid-for Enterprise Desktop is slick, clean and has all the third-party features built in as standard.
Mandriva
In the earlier days of Linux, Mandrake was a popular option for users for whom installing Debian or Slackware was a bit challenging. Originally based in Paris, it had quite a cult following, after the first release, forked from an early Red Hat version.
Between 2003 and 2004 Mandrake operated under bankruptcy protection, emerging in 2005 with a merger with Brazilian Linux provider Connectiva, and forming a new entity ’Mandriva’.
Years ago I used Mandrake for a few clients, and found it to be very good - easy to use, and reliable. I’ve used Mandriva once or twice since, and have observed that it has quite a flowing amongst new users who haven’t gone down the Ubuntu route. However, I’ve not got much experience of it. It’s probably worth playing with.
Gentoo
I’ve never used Gentoo in anger. Years ago, when Gentoo was in its infancy, and still had a cute cow as its logo, I gave it a try. The concept is simple enough - take the BSD approach of maintaining a source tree and scripts which enable systematic building of packages and tools, and deploy it on Linux. A further motivation is the ability to customise everything, and tweak and tune everything, down to the compile options. One of the claims is that this allows the user to build a very highly tuned system. In many way’s it’s the perfect geek system, and as it celebrates its tenth birthday, it’s clear it’s doing something right!
I’ve also found Gentoo documentation to be amongst the best on the internet, and the gentoo users and maintainers I’ve met at conferences are invariably highly skilled and pleasant.
I’d say if you have the time to fiddle, Gentoo could be a lot of fun. I’m a pragmatist, and like to be able to install and remove packages in seconds, so a binary based distribution suits my purposes better.
OpenSolaris
I really like Solaris. In many ways it can deliver on its claim to be “The most advanced OS in the world”, boasting the world’s best and most advanced filesystem (ZFS), one of the finest observability tools in the industry (dtrace), cutting edge OS features (predictive self-healing and secure execution) and a range of three powerful virtualisation technologies (Zones, Xen and Virtualbox). At Atalanta Systems we readily deploy and support Solaris on both intel and Sparc, with a high degree of success.
Unfortunately, Solaris lacks a number of features we come to expect as standard, for example there’s no CIFS/SMB support, and it entirely lacks an integrated, modern, networked package management system. There are ways around the packaging problem - I’ve used NetBSD’s pgksrc on Solaris, and there are a few projects which use an apt-like tool to provide some of the packages you’d find in the Linux world. I’ve also recently discovered Portaris - a port of the Gentoo portage system to the Solaris system.
However, strictly speaking, standard Solaris isn’t quite open source. It’s freely available, but you need to buy a support contract to get patches, and there’s no CentOS equivalent.
But, over the last five years or so, Sun has been manoeuvring to open source most of (and ultimately all of) their code base. Beginning with dtrace, and accelerating in 2007 with the successful poaching of Debian founder Ian Murdock, and the release of OpenSolaris in 2008, they’ve taken huge steps.
Open solaris is fully open source, it has up-to-date tools, and an excellent packaging system. It works very well on the desktop, with all the usual requirements readily available. However, like Fedora and Ubuntu it’s on a fast, regular release cycle, and can’t really be considered stable or fit for production.
If you want to find out more, there are OpenSolaris user groups in most big cities. I’ve been to several of the London ones - they’re full of interesting people, and Sun provides free food and drink!
I’ll be continuing to keep my eye on OpenSolaris - when and if they provide a stable LTS-like edition, it could well be a force to reckon with.
*BSD
Of course Linux isn’t the only free and open source operating system - the *BSD family have actually been around even longer, but just aren’t as fashionable or as well-known. With its heritage in the earliest years of Unix, the *BSD family, are, as you might expect, highly mature and stable. There’s a perception that they’re harder to use, and more old-fashioned, but I find this to be a bit of a myth.
FreeBSD
FreeBSD is probably the most popular and easiest to get going. It’s the most commercially recognised, and has a fine body of documentation and a responsive online community.
Traditionally the system is small, lean and very fast. Packages can be installed as pre-built binaries, or using the standard BSD-style ports system.
FreeBSD is a much unappreciated backbone of the internet. I’ve run a number of sites on it, and it’s absolutely rock solid, reliable, secure and performant.
In addition to these benefits, FreeBSD also supports Sun’s ZFS and Dtrace, and with Jails has an equivalently lightweight and powerful container-based virtualisation solution.
Last time I used FreeBSD on the desktop, it felt like it was lagging behind Linux. Setting up X was a fairly manual task, and the process of getting the usual flash and java plugins was tedious. Likewise, support for proprietary equipment - particularly wireless chipsets and graphics cards is not as pervasive. I have no idea of the state of 3d desktop experience.
NetBSD
NetBSD aims to be really quite incredibly portable. I’ve run NetBSD on Alpha, SGI, Sparc, Zaurus, and 32 and 64 bit intel platforms. For me this has largely been for entertainment, but I could conceive of a situation in which a person wanted to make use of some esoteric hardware and run a first rate Unix on it. Particularly on the Sparc platform I’ve also found it to be blisteringly fast.
A big advantage of NetBSD is its excellent pkgsrc system. Similar in concept to the FreeBSD ports system, it again is highly portable - I’ve run it on Solaris and Slackware, and also use it on my macbook to provide up-to-date opensource packages.
OpenBSD
I have very little experience of OpenBSD. It has a reputation for being highly secure, and is popular for routers and firewalls on account of its excellent built-in PF firewall/routing software.
Most of the advantages and disadvantages of FreeBSD apply, only there are fewer packages, and the system is not optimised for speed in the same way.
Conclusion
I hope you’ve derived some benefit from this little run down of my experiences and, to an extent, prejudices, with the wide range of open source operating system options. In general I can make the following recommendations:
If you require commercial support, I would use Red Hat every time. Most of the time, I would use CentOS in an environment where there is already some Red Hat adoption. I also tend to use CentOS in new, large environments, because my puppet modules and packaging expertise become reusable.
I can also recommend Debian for servers, especially for single server deployments, and where you want to throw something together quickly. Debian is also well supported by puppet.
I think FreeBSD is definitely worth playing with, especially if you don’t already have significant Linux experience, and are prepared to try something a little different. I’ve not deployed it in a large scale environment, and while it is supported by puppet, I have no experience of doing so. Keep your eyes on OpenSolaris - the potential is there for this to be a world beater.
For a workstation, I would chose between Ubuntu LTS and Debian, with Fedora bringing up the rear.
While I do adore Debian, for the every day user, Ubuntu has the benefit of being entirely painless to set up - out of the box, pretty much everything works. In a development environment, I would then run virtual machines using KVM, VMware or VirtualBox, matching the OS of my deployment platform. It also has the benefit of being reasonably up-to-date, and predictably stable.
While Fedora is excellent, I don’t feel the need to stay on the bleeding edge, and I don’t want to have to rebuild my machine every six months.
For those who are interested, at the time of writing, the Atalanta Systems infrastructure runs on a mixture of Debian stable, Solaris 10 and CentOS 5. My Linux laptop runs Ubuntu LTS, and my workstation runs CentOS 5. Most of my daily work is carried out on MacBook Pros with VWware Fusion virtual machines running Debian and CentOS. CentOS and Red Hat are the most represented amongst our clients, with Solaris, Debian and FreeBSD also in use in a number of places.