Two years on Gentoo

Compiling an OS is pretty comfy

Neofetch output of my system

It’s been about two years since I unironically installed Gentoo Linux. And not just for meme purposes like installing LFS or posting on the Gentoo subreddit, I’ve been using it like a normal OS for two years. That’s the longest I’ve been on any Linux distro. Since two years is a decent amount of time to use an OS, I think I can now write about my thoughts on using Gentoo. I’m a casual end user, not someone who really digs deep.

I started on Linux Mint, then quickly moved to Manjaro, then quickly again to vanilla Arch, and then to EndeavourOS after Nvidia drivers went FUBAR. I was happy with Arch-based distros for a while and had no intention to switch. I switched to Gentoo because I merely felt like trying something new.

Thoughts on Gentoo

Compiling isn’t too bad

If you know anything about Gentoo, it’s probably that the distro is source-based. Which means that all programs are compiled locally, with a few exceptions. I have a 13600K, a fairly powerful CPU, so compile times are fine. Infamous packages like GCC or Rust take about 15 minutes each. I’m honestly more concerned about the heat output from my computer rather than the compile time, but a new GCC version only comes out once every few months so it’s alright.

Compile times really aren’t bad, even with a weaker CPU. There are binary packages for large ones, and a Gentoo update isn’t like a Windows update; you aren’t stuck at the “Restarting…” screen. You can just let the computer run for a while you work or even resume the compile after a cold boot.

USE flags and customization

This is the most frequently stated reason to use Gentoo: USE flags. These control features built into software when compiling a package. For instance, I have an image viewer has a webp flag. If this is enabled, the image viewer can view .webp images, but the libwebp package will become a dependency. Without the flag, I don’t have to install libwebp on my system. By customizing USE flags, you can customize packages to have or not have certain features. This can reduce the package size, remove some dependencies, or enable additional features you do want.

You can also enable or disable parts of the kernel to your liking. For example, I can remove Realtek Ethernet drivers because my motherboard uses an Intel controller. I can get rid of ext4 support because I only use btrfs, and I can turn off AMD CPU options because I have an Intel processor. Kernels and packages on binary distros like Debian or Arch have a lot of unnecessary features enabled because the developers need to cover a wide variety of hardware and software needs. A customized Gentoo install can have some incredibly fine-tuned software on it.

While all of this is super cool, maintaining a list of tens or hundreds of USE flags is not fun to manage. You might have to undo a USE flag on one package to install another, and the more you customize the more fragile your system becomes. You also don’t get a significant benefit in performance or size in most cases from making minimal packages. To me, USE flags and customization are nice features to have, but they aren’t why I’ve stuck with Gentoo for two years.

Semi-rolling release?

This is what I like the most about Gentoo: it combines the advantages of both rolling release and static release distros. I used Arch-based distros for a long time because I like having up-to-date packages. But rarely, and I really mean rarely, something would go wrong with Arch. My first encounter was the Nvidia catastrophe which crashed Xorg (more of an Nvidia problem though), and the second was an EndeavourOS update messing up a Wi-Fi driver DKMS on a laptop with no Ethernet port. There was a third problem after I moved away from Arch, a GRUB issue that prevented systems from booting until manually intervened.

These issues are rare and fixable. But, rolling release distros tend to face more problems than say, Debian. It’s always been one or the other: static release for stability, or rolling release for the bleeding edge.

And that’s where Gentoo says yes to both. Gentoo has two “branches” of packages: stable and unstable, where unstable is equivalent to Arch packages. Stable packages are, well, more stable and tested, but they can be up to a few months behind the most recent version.

Gentoo uses stable packages by default, but you can easily switch to unstable for individual packages or the whole system. My setup uses unstable packages for some programs I want up-to-date, such as the web browser, music player, and text editor. The rest, such as libraries and compilers, are on the stable branch. I find this to be the best way to stay close to the bleeding edge where I want it, but still have the rest of the system use more stable software.

This state is equivalent to a partially upgraded Arch system; which sounds bad, but the nature of Gentoo allows it. As long as a package is compiled against your system’s dependencies, it should work. I have yet to encounter an unstable package break because it was compiled against a stable library version. Gentoo also has the equivalent of *-git packages like Arch, so you can use the absolute bleeding edge if you want.

There are occasional issues with manually choosing package branches. Sometimes, a package might only come in an unstable version. At other time, if you want to upgrade a package to an unstable version, it might need a few dependencies to also become unstable. Unless you’re willing to let the whole system run unstable (just like an Arch install), sometimes a stable package version might hold you back. But honestly, this is a minor problem.

AUR equivalent

Gentoo has an AUR equivalent called overlays. The AUR is better overall because of the absolute number of software you can download. I missed the AUR a lot when first using Gentoo. However, I think overlays are better integrated into the package manager, Portage.

Convenient AUR helpers like yay exist, but the official Arch documentation recommends manually installing AUR packages. Gentoo has a config file where you list the overlays you want, and Portage takes care of everything else. Sure, some unknown maintainer can abandon a package or write a malicious ebuild (pkgbuild equivalents), but that also applies to the AUR.

Overall, overlays are nice to have. They provide a lot of extra software and I think they are well maintained. The AUR might win for the sheer number of packages, but overlays still provide most software you’ll need; and I definitely prefer them to PPAs.

NixOS? 👀

I’m happy with Gentoo. It’s stable, I get the benefits of both rolling release and static release, has a lot of packages, and a great wiki. Tinkering around with a custom kernel and packages is fun and unique. I have no problems with the OS and plan to use it for a while. It’s also the only distro so far that I haven’t moved off of after two years.

The only contender that might cause me to hop is NixOS. I’ve heard a lot of good things about this distro, particularly the system config approach and reproducibility. Having everything about a system’s configuration stored on one file sounds amazing, there’s a massive amount of packages in the repository, and reproducibility means near-perfect stability. If Gentoo ever gives me a headache in the future, I might switch over.

Sure, my recent headache of Windows messing up my Gentoo install caused a lot of trouble, but that’s Windows’ fault. Until Gentoo itself actually presents a massive problem, I’m fine with sticking with it.