It’s been awhile since I switched all of my machines from the Gentoo Linux distribution to something else; about a year, in fact. Now that I’ve had some time to look back, I can articulate the reasons why I switched. Upon reflection, it’s clear that Gentoo Linux has no business being compared to the leading desktop distributions. It is good for entirely different purposes, like kernel and package development, but its advantages in these areas give it considerable disadvantages when used as a desktop distribution.
Popular reasons given for trying Gentoo:
- It’s very customizable
- You learn more
- It’s bleeding edge
Gentoo is very customizable
Yeah, it is. You can use “USE” flags when installing your software to compile in the features you want. So, for example, you can selectively disable printing support in all of your applications, which avoids installing the printing dependencies, and I guess saves you some memory in your application. I would always wonder why my application had some missing feature and would come to find I had neglected to set a USE flag when compiling the software. To fix, this would require me to: save my work and shut down the application (always annoying), find the right USE flag that matters (is it “mp3” for mp3 support, or “mpeg3”? Do I need any other arcane combination of USE flags to get this working?), edit some files to include the new USE flag, and then recompile the program. The recompilation can be impossibly annoying, especially on a big application like Abiword.
Secondly, I don’t _ever_ remember removing USE flags; instead, I was always adding them. To save myself some headache there really should have been an option to “include all USE flags,” which is essentially how the major binary distributions are compiled. I don’t care about a little extra memory here or there, or a few extra dependencies installed on my system. Life is too short to contemplate whether you use the spell checker or will in the future; it’s too short to decide whether you can handle a 3MB spelling library on your disk because your word processor requires it as a dependency when the USE flag is set. While USE flags are an interesting idea, for average desktop use they’re just added complexity.
You learn more
Yeah, you do learn more, because you’re forced to. To get support for hardware and 3rd party drivers, I ended up recompiling my kernel literally hundreds of times (across many systems). This is kind of useful, because now I know how the kernel is organized. But on the whole, I don’t consider staring at that ncurses menuconfig UI for hours, selecting options and trying not to forget anything, and issuing the same commands over and over again to recompile and reboot as time well spent. Sometimes, it’s nice to learn something new; but after that, it just becomes tedium. Gentoo forces you to stay with the tedium even after you’ve learned the concept. Again, while this is useful in some circumstances, like testing CVS kernel builds & modules and developing for the kernel, for desktop use it’s just a huge, incredible pain.
One part of Gentoo that you “learn about” is something no one really wants to learn about because no one cares, and that’s the intricacies of the package management system (Portage). Most of my time spent on meta-computing in Gentoo was editing the various mask definition files, which set rules for which versions of packages can be installed. I was trying to “coax” (more like fustigate) Portage into “letting” me install what I wanted and to not clobber my package the next time I try and upgrade. This can require unmasking a package and all of its dependencies, which, if you’ve ever tried to install an experimental version of GNOME, means tracking down tons of packages and their dependencies in turn and manually specifying the package names and versions to Portage. If you’re interested in using experimental software, this can become really time consuming, and often causes forced downgrading or broken software when doing a system upgrade. I know a lot about Portage now after fighting with it for a few years, but the knowledge is not something I intended to learn nor is it useful. It’s just extra cognitive noise that comes with using the system.
Bleeding Edge
See major deficiency number 1 in the next section.
Major Deficiencies in Gentoo
Aside from the spurious advantages of Gentoo, there are some of the major, fundamental deficiencies in the distribution that I’ve come to see in retrospect.
Constant breakage
Gentoo is bleeding edge, and the upgrades come fast and furious — so I upgraded often. Many times I was prevented from upgrading, usually with Portage telling me that something had changed in the package structure and some of my package upgrades were blocked. Great, thanks. How about you just take care of it? No, usually I have to manually uninstall the application that has been moved somewhere else, and then reinstall the moved version, so Portage’s worldview doesn’t fall apart.
While that is just poor usability (software should be taciturn with its problems), Gentoo breaks in more insidious ways. Sometimes it will start compiling software and the versions of the dependencies are such that you get compilation breakage. So instead of telling me the packages are incompatible, the compilation fails. Now I have to go searching through the compiler failures for some obscure reference in a source file that hopefully uses some key words that indicate which package is at fault. Lord help you if you’re outside of X and have to figure out a creative way to log the output of the build so you can review it with scrolling once the build fails.
As a software developer I understand the issues at hand here, but as a user of a distribution, they’re issues that I just don’t want to deal with — especially when I issue a system-wide upgrade command and go to bed, which is necessary due to the next problem:
Installing software takes time
A lot of time… if you use any applications with a large source base, beware! Upgrading something like Open Office can take hours. The general recommendation is “don’t watch it install, go do something else!” Before we got some nice scheduler upgrades in the kernel, “doing something else” with your computer was impossible. Now that Linux can handle compiling software and keeping a GUI responsive, that’s not so much of an issue. But, honestly, people don’t want to wait for software to install. Usually I won’t “foresee” my need for a program an hour before I need it, and responsibly tell Portage to get the software for me, so that in an hour it’s ready when I need it. If you abruptly install a new application, it’s because you need it now; Gentoo’s software model breaks another core tenet of usability: instant gratification. I don’t want to have to put distcc Knoppix in my car radio so that my car can help compile my software from the parking lot, but that’s often what is necessary to get anything installed in a reasonable amount of time.
Compilation is not free
Compilation is not free; treating it like it’s free is a fallacy. You tie up the power of your computer, usually for a couple of hours if you’re installing anything substantial (like the new Firefox), which means you can’t do anything else intensive for that time period. You’re forced to stop working in GIMP and go get a glass of chocolate milk while your system is busy getting the latest MonoDevelop, which you need installed to continue your work.
Secondly, there’s a ton of wear and tear on your system. Pushing the processor at 100% for hours at a time can cause some serious heat, and will usually crash a system that’s poorly cooled that would have otherwise run fine (or at least crashed at a later date). Many times I would wake up in the morning to find my machine completely hung because it overheated due to night compiles. Lots of heat wears down components and invariably generates more noise.
Possibly worse is the churn happening on your hard drive. Gigs of source code (source is always bigger than the binary) are downloaded to be compiled into a the final binary version, after which the source is then thrown away. Factor in all of the temporary files created during compilation and you’ve got significant hard drive churn that comes from the way applications are installed. The package management in Gentoo probably resulted in 10x more writes to the hard drives than I caused by modifying my own data and using my applications. More writes means shorter life on the hard drive, and no one likes to have a failed disk.
Compiling everything you install is already bad enough for system resources, but when Gentoo pushes out package upgrades, often they’re only small patch changes or package revisions, like (1.10.2 -> 1.10.2a) which require huge recompilations. The upgrades that come from small package changes almost never should require a full recompilation; package maintainers, how about you flag whether a package upgrade (a->b) requires a full recompile, thus avoiding the whole upgrade ordeal if possible?
There are many more things to be said, but will probably become irrelevant in the future because Gentoo is improving so quickly. The deficiencies I’ve outlined above are fundamental in that they’re intrinsically tied to the way Gentoo works, and so can’t really be “fixed” unless we get some significant technology changes. On the whole, it’s a well-engineered distribution with a thriving user community. It’s just not purposed as a desktop distribution. If that’s your usage model, Gentoo is not for you. The reason I ultimately moved away from Gentoo is because I realized it was not built to cater to my desktop usage model, and that there were other distributions out there that did the job better.