Friday, July 10, 2009

Gentoo to Ubuntu Migration Part 3: Conclusion

And now for the long-overdue and gripping conclusion of my Linux distribution journey. Over the last few posts, you've witnessed my curious initial dabblings with Slackware, my coming of age with Debian, and finally being all grown-up with Gentoo. I suppose that makes the Gentoo-to-Ubuntu switch my midlife crisis.

Cheesy metaphors aside, I should probably start out with a disclaimer that this isn't an anti-Gentoo post in anyway. My position on Linux distributions has always been that the best one is the one that works for you. In other words, it's a matter of personal preference. So this series is really a journey of how my preferences have evolved over time.

In a word, the biggest motivator for me was time. Gentoo is great but time consuming, both in terms of man-hours required to manage it, and the CPU time required for constant compiling. That may be a bit misleading to those who don't know Gentoo: once you have a stable setup, you really don't need to compile any additional packages (except security updates). However, I'm an obsessive tinkerer and upgrader, so I can't help but do an "emerge -vuD world" (i.e. update all packages on the system) every week or so.

The upside to having all packages built on your local machine is immense flexibility. This is supported via Gentoo's portage system, in particular, "USE" flags. USE flags typically correspond to build options passed to a source package's configure script. For anyone who's ever done a "./configure --help", you've probably noticed that most non-trivial packages have compile-time options. Typical examples include whether or not to build support for such things as: graphics, sound, internationalization/multi-lingual, different video and sound codecs, ssl, etc. An obvious example: if you have a server that has no connected monitor ("headless"), it's reasonable to build all your packages without X11 (Linux's core graphics API) or sound support.

As with many things that offer such flexibility, "with great power comes great responsibility". For myself, I took advantage of Gentoo's system, and had very specific configurations for each of my multiple machines. Sometimes I'd even do things like globally removing support for a feature, except for one or two packages. What this ultimately led to was tricky system updates: since so much open source software is "in-flight" (i.e. undergoing continuous development), package upgrades often introduced incompatibilities.

So, at least in my experience, at best half the time, I could get by with "emerge -vuD world", wait a few hours for all the new packages to recompile, and come back to a functioning, upgraded system. Unfortunately, the other half the time, I was tracking down "blocking" packages, playing version-specific games, tweaking config files, changing USE flags, etc. Consider, when there are dozens, sometimes hundreds of packages to be updated, all compiled from source, any one could break the build process---you can't really "set it and forget it". It requires some baby-sitting, or at least periodical checkups to make sure the upgrade is still progressing.

When I had more free time, I enjoyed this process. But my commute and job are leading to attention-starvation of all my hobbies, one of which is maintaining my Linux systems. (Which means, hopefully, someday I'll have the time to switch back to Gentoo.)

In short, I don't have the time for source-based distributions. Well, that's easy enough, as most distributions are binary-based anyway. But which one? I basically defaulted to Ubuntu: it's one of the more popular distributions, which should count for something. It's also based on Debian, with which I had previous experience, so, hopefully, I would find it semi-familiar. It also has role-specific flavors, i.e. Ubuntu Server (for servers), and MythBuntu (for MythTV)---in theory, I could have one operating system for all my computers, and quickly and consistently manage them.

So, given all that backstory and rationale, here I am today, running Ubuntu on my main workstation. I run Ubuntu Server on my file server/NAS box, as well as my backup server. But I still haven't completely switched: my firewall/gateway/NAT box runs OpenBSD, although I don't intend to ever change that. My parents' and my MythTV still run Gentoo. Since these systems are used by other people (my parents and wife, respectively), I didn't want to disrupt anything until I was sure I had a viable solution (plus my parents are 150 miles away!).

Overall, I feel I'm generally saving time using Ubuntu over Gentoo. But I won't go so far as to say it's been perfect. Even though I had experience with Debian (Ubuntu's baseline), there's still a learning curve. And as I've learned more about Ubuntu, I've developed a little collection of gripes (those will be the topic of some future blog post).