Why I Use Gentoo Linux
I’ve used a number of GNU/Linux distributions over the last few years. Going back a few years, I experimented with both Debian and (the now defunct) Corel Linux. More recently, I’ve used Gentoo, Arch, and Ubuntu. I even briefly installed Fedora Core on a test machine. I’ve also experimented with some other distributions, primarily in virtual machines. The short of it is that I have used to some degree or another a moderate number of distributions.
However, the vast majority of my GNU/Linux experience has been confined to machines running Gentoo. I have run it as my primary operating system for over two years, excepting the week a few months back when I briefly ran Ubuntu. The only other distributions I consider myself moderately familiar with are Debian and Arch. I ran Debian for a week or so in 2002 before switching back to Windows so I could use some software for a course I was taking at the time, and Wine was nowhere near as useful as it is today. I’ve also played with it sporadically on various machines (physical and virtual) since 1999. Arch is a simple and easy-to-understand distribution, and I’ve used it enough in a virtual machine to feel moderately comfortable with it. Even with all this experience, however, I can’t seem to shake my Gentoo installation. It simply seems to fit my needs and usage patterns the best so far.
Before you read on and proceed to dissect my arguments, keep in mind what I’ve said above about my experience, and also that as much as I am telling the world why I use Gentoo, I’m asking for information about other distributions in the following areas, and reasons why people use a particular distribution.
With that in mind, no other distribution has managed to stay installed on my computer as long as Gentoo has, and no other distribution has struck the same chord in my mind. I know some of you in the back are shaking your heads now, thinking to yourselves, “Oh geez, not another ricer. I wonder what kind of ridiculous flags he’s passing to GCC.” I know this might disappoint some of you, but my CFLAGS are rather mundane. So in the spirit of dispelling any assumptions you may have made, I’ll open this post with a list of things that aren’t reasons why I use Gentoo.
Bad (but Common) Reasons
Compiler Optimization
My current CFLAGS are a rather simple “-O2 -march=athlon-xp -pipe”. In the past, I’ve added -fomit-frame-pointer, but my machine is currently set up to be more of a debugging station, so on my x86 machine, omitting the frame pointer is a bad idea. I have little desire to encourage GCC to produce broken code by passing obscure optimization flags that I don’t understand. Even if highly detailed optimization were a goal of mine, it’d be on a package-by-package basis. Aside from that, I also understand that GCC doesn’t currently have an optimization level above -O3 (that’s stable and documented&emdash;I suppose it’s possible there are undocumented levels).
Perhaps more important is understanding that for most applications out there, advanced optimization is going to net me something on the order of a single-digit percentage increase in performance. This difference might be significant for a long-running statistical analysis program that takes hours or days to produce results, but is probably completely irrelevant for general desktop applications, which make up the bulk of my computer usage. Compiler optimization might get a lot of press, but it’s hardly a reason for me to use Gentoo. After all, Arch Linux provides i686-optimized binaries, and the time spent compiling is hardly going to make up for any advantage I’d get over those.
USE Flags
Don’t get me wrong. USE flags can have their uses, especially on an embedded platform, where removing unneeded functionality can be the difference between a program working and a program not working. However, it seems like in Gentoo, they’re used to a ridiculous excess. Perhaps more annoying is the fact that managing them can be something of a small nightmare. Personally, I’m looking for a full-featured desktop. I don’t particularly care if I use a given feature now. I may use that feature in the future, and I don’t really want to recompile 15 packages at that point. As such, I tend to turn on just about every optional feature there is. It ends up being an exercise in micromanagement trying to keep up with new flags, removed flags, and flags that transition from being local to global or vice versa. I can understand why some people might find them useful, but I’ve rarely seen a case where distributions like Arch or Ubuntu don’t provide sensible settings. In addition, they sometimes offer (especially in Debian-derived distributions like Ubuntu) multiple packages that provide the equivalent of USE flags (e.g. PHP extensions).
The Feeling of Learning
Some people seem to think they’ll learn to use and master GNU/Linux or other UNIX-like systems by watching compile output scroll by. This is, of course, nonsense. Sure, you might pick up a new command or two, but you can do that by getting a directory index of /bin or /usr/bin. If you’re really determined to learn how to use the command line and how to administer a system without a fancy GUI tool, you can do this on any distribution. The details may vary from distro to distro, of course. Now, Gentoo’s lack of fancy GUI tools may facilitate this learning somewhat, by forcing you to use the command line if you want to get anything done, but it’s definitely not one of the reasons I use Gentoo.
So Why Do I Use Gentoo?
With that rigmarole out of the way, we can concentrate on the reasons I actually do like and use Gentoo. They may or may not be the ones you were expecting at the start of this article. They also may rely on broken assumptions about other distributions. Feel free to enlighten me.
Rolling Upgrades
To be perfectly honest, this is probably the single most important thing to me (at this point), for two reasons. The first is that nothing irks me more than having to do a massive upgrade every six months. The potential for breakage is greater, and after an upgrade, you might have to spend several days fixing any problems as opposed to fixing a small problem or two every few days or weeks. Maybe it’s a question of preferences. The second reason is that, I admit it, I like to live on the edge. I don’t necessarily need stability, and I enjoy having new packages available shortly after they’re released, not after they’ve been quality controlled for six months to two years by another set of developers. Might this lead to some stability and incompatibility problems? Sure. However, I am confident in my ability to work around or to fix problems as they come up. I even report bugs or submit patches on occasion.
This isn’t to say that Gentoo is alone in this feature. Arch Linux does a reasonable good job of this as well, providing both rolling upgrades and quickly updated packages, even being faster than Gentoo in many cases. Looking at other distros, however, Ubuntu has no such option, unless you always want to run the currently in development version. Even this doesn’t work completely, as once the upstream version freeze is in effect, you’re stuck with the older packages for a couple of months. Debian Sid is reasonable, though it still seems behind in some areas. Fedora Rawhide is yet another option, but I haven’t played with that enough to make an informed decision at all.
Easy Package Creation
Creating a new ebuild (the script that describes how to build and install a package) is very easy, and I’ve done it quite a few times. Arch’s PKGBUILD is fairly simple as well, though they seem like second-class citizens compared to genuine binary packages, unlike in Gentoo, where an ebuild in an overlay is fully equivalent to any other ebuild. Debian is more or less a nightmare, so far as I can tell. Sure, there’s checkinstall, but it has the same second-class citizen flavor I found in Arch.
Sane Dependency Tracking
I realize the heading isn’t incredibly descriptive, and the Debian zealots out there are probably screaming that Debian has absolutely wonderful dependency handling. Hey, I agree with you. What I’m talking about here is whether or not there is a difference between a package that you install manually and one that was pulled in as a dependency. Gentoo handles this with something called the world file, a list of packages that were explicitly installed by the user. This allows for things like emerge –depclean, which removes any unused dependencies. (There is some risk of an inconsistent system, especially if USE flags have changed or if packages have incorrect or incomplete dependencies. Newer versions of portage have helped to mitigate this risk, and there is a sequence of steps to follow when upgrading that can more or less prevent it.) Arch also keeps track of this information, though I’m not sure if it does anything with it. I’m not sure I’ve ever uninstalled anything on my test Arch installs, so maybe I just haven’t yet seen it in action.
Debian and Ubuntu, for all their strengths, have historically had no such functionality in this area. Each and every package installed was the same as far as the package manager was concerned. When I ran Ubuntu, I used debfoster to handle this. In later installs in a virtual machine, I’ve used Aptitude, which also does this well. However, the raw apt tools and Synaptic have historically been blind to Aptitude’s extra metadata, making for a semi-inconsistent system if you forget to use Aptitude for everything. However, as I recall, one or both of them has added better functionality for this feature. Comments are welcome, because nothing’s more annoying than accumulated dependency cruft, except perhaps excessive hyperbole. Don’t worry. I only have so much hyperbole left for this article.
Number of Available Packages
It’s quite possible that, technically, Debian may have more packages, but many of them are older, more esoteric ones, and many of the rest are split packages, so comparing raw package counts is a lousy idea, in any case. However, in my experience, there are very few packages I’ve wanted to install that weren’t available in Gentoo. In those few cases, it’s been easy to add an ebuild to my local overlay.
Arch has quite a limited database, even taking into account the community-provided stuff. Maybe I just use a bunch of esoteric packages that happen to be available in Gentoo. Either way, I’d have to maintain several personal PKGBUILDs in order to effectively use Arch. If its number of packages were larger, it’d be a strong contender for my next install. Debian and Ubuntu are pretty good in this area, but even there, there are imperfections (from my angle, of course). I prefer Gentoo’s easy-to-use vmware-server ebuild to the process of installing manually. It’s not that installing manually is difficult, but I do prefer to keep everything managed by the package manager, where possible. (And to those of you cringing at the thought of VMWare, sorry, I’m not a free software-only person. I do prefer it when it provides the features I need, but if it doesn’t…)
Configuration File Management
This is admittedly something of a stretch. Arch lacks a coherent tool for maintaining and merging configuration files at the moment, though dotpac seems nice. It’d be nice if it were in the primary repositories so I didn’t have to download and use a PKGBUILD. Debian-derived distros like Ubuntu seem to handle this to some extent, but it seems more like I’m expected to manually merge in changes. Maybe I just haven’t worked with it enough. I’ve either not made many modifications or not had the system installed long enough to have to upgrade many configuration files. Gentoo’s situation is simple, with excellent tools like etc-update and dispatch-conf. Other distributions could possibly learn a thing or two here.
Documentation
Gentoo has a very good set of documentation available on its website, with ample HOWTOs, guides, and reference documentation to keep anyone busy for a while. It doesn’t have everything, and some of the documentation could do with a nice QA check, but overall, it’s very good.
Conclusion
Are there other reasons I use Gentoo? Probably. I’ll be the first to admit that a big one is probably familiarity. It takes a while to get used to a new system. I have little doubt that I could get very comfortable using Arch, Debian, or Ubuntu. But for right now, I just don’t have a compelling reason to switch. Certainly, Gentoo’s not for everybody. A lot of people will be more comfortable using a well-tested, stable system like Debian or Ubuntu. Some bleeding-edge users will find Arch to be wonderful. But for the rest of us, Gentoo is an excellent option, as long as you like waiting for your packages to compile. I don’t, really, but hey, nothing’s perfect, right?
Nice article.
I woud like to switch from Gentoo to another distro(Gentoo its so time consuming), but there’re some things in Gentoo, that I can’t live without:). For example: is there something like emerge –depclean in other distros. I can’t find anything good enough.
Well, there is similar functionality, I guess. But basically, it’s still the same things I mentioned in the article. On Debian-based systems you can use debfoster to produce a similar effect, and newer Ubuntu systems or even Debian might have better functionality in this regard–I haven’t tried. Also, aptitude can keep track of this kind of thing.
With Arch Linux, I think you have to use a special option to remove unused dependencies when you uninstall a package. If you later want to “clean out” like depclean does, you have to get a list of orphans from pacman and remove them by hand or script or whatever. It’s doable, but depclean is still simpler.
I haven’t really used any Red Hat system enough to know what the various options are.
[...] of any real reasons to keep it running Gentoo, other than the reasons stated in my popular post on why I use Gentoo. So, I suppose I’ll transition it at some point, perhaps. But perhaps [...]
[...] Jason Lynch [...]