Gentoo builds packages from source on your machine. The stereotype that follows is about performance — compiling for your exact processor — and it is largely beside the point. The real reason people run Gentoo is USE flags: you decide which optional features are compiled into every package on the system, and what is therefore not installed at all.
USE flags, which are the actual idea
A package on any other distribution is compiled once by a maintainer with a fixed set of options, and everyone gets that build. If it was built with PulseAudio support, PulseAudio is a dependency, whether or not you use it. On Gentoo you say what you want and every package is built accordingly.
# /etc/portage/make.conf
USE="-systemd -bluetooth -X wayland pipewire pulseaudio -gnome kde"
ACCEPT_LICENSE="-* @FREE"
MAKEOPTS="-j4"
# or per package, in /etc/portage/package.use/
media-video/ffmpeg x264 x265 -vaapi
www-client/firefox -telemetryA minus sign removes the feature and, usually, its dependency chain with it. That is how a Gentoo system ends up genuinely without systemd, without X11, or without any Bluetooth stack anywhere — not disabled, but never built. No other mainstream distribution offers that, and for an embedded system, an appliance, or someone with strong opinions about what belongs on their machine, it is the whole justification.
The cost is that a flag change can trigger a large rebuild, and that combinations nobody else runs are combinations nobody else has tested.
There is no version number
Gentoo is rolling. What gets published is a dated stage3 tarball — a minimal bootstrap system, rebuilt roughly weekly — and you install by unpacking one and building upwards. Current stage3 sets are dated within the last few days at any time.
The other choice made at install time is the profile: a named set of defaults for USE flags and system packages. The current generation is 23.0, which moved to a merged /usr layout and turned on toolchain hardening by default. Migrating an older system to it means rebuilding the toolchain and then everything else — the sort of maintenance event that comes with the territory.
eselect profile list # every profile available
eselect profile set 1 # repoints /etc/portage/make.profile
eselect news read # ALWAYS read these before a big updateeselect news is not optional reading. Gentoo announces breaking changes and required manual steps through it, and skipping them is the usual reason a Gentoo system breaks.
The binary packages that changed the trade-off
Gentoo has run an official binary package host since the end of 2023, and most write-ups have not caught up. You can install a full KDE or GNOME desktop, LibreOffice and a browser without compiling them. The mirrors now carry considerably more than the original announcement described — alongside the generic x86-64 set there are x86-64-v3 builds for any processor with AVX2, plus hardened, LLVM and musl variants, and arm64 equivalents. The main sets are refreshed daily.
# /etc/portage/binrepos.conf/gentoobinhost.conf
[binhost]
priority = 9999
sync-uri = https://distfiles.gentoo.org/releases/amd64/binpackages/23.0/x86-64/
# then
emerge -avuDNg @world # -g = use binary packages where possibleSet FEATURES="getbinpkg" in make.conf to make it permanent, and FEATURES="binpkg-request-signature" to refuse anything unsigned. New stage3 installations arrive with a binhost already configured; existing systems have to add it.
Three honest caveats. The binaries are built with generic flags and the default USE settings, so the moment your USE flags differ, Portage compiles that package locally anyway — which is correct behaviour and also the reason a heavily customised system benefits less. The host carries stable packages only, not the testing branch. And the profile version has to match.
The sensible modern position is a mixture: binaries for the enormous packages you have no opinions about, source for the ones you do.
Portage, in the commands you will actually type
| Command | Does |
|---|---|
emerge --sync | Update the package tree |
emerge -avuDN @world | The full system update. Ask, verbose, update, deep, new USE flags |
emerge -av firefox | Install something |
emerge -av --depclean | Remove orphans. Read the list first — it is not always right |
revdep-rebuild -v | Rebuild packages with broken library links |
emerge -pv package | Show what would happen, and which USE flags apply |
equery uses package | Which USE flags a package supports, and what they do |
dispatch-conf | Merge updated configuration files. Do this after every update |
The one setting worth getting right on day one is MAKEOPTS, which controls parallel compilation. Gentoo’s own guidance is that the number of jobs should be no more than the lesser of your thread count and your RAM divided by 2 GB — recent GCC can use one and a half to two gigabytes per job, so an eight-thread machine with 8 GB of memory should be running -j4, not -j8. Getting this wrong is how a build ends with the OOM killer rather than a package.
systemd or OpenRC, genuinely your choice
Gentoo supports both as first-class options. OpenRC is the traditional default; systemd is fully supported, and every stage3 flavour is published in both forms, as are the binary packages. You pick at install time by choosing the matching stage3 and profile.
This is unusual and worth knowing about even if you never install Gentoo: it is one of the few distributions where “I would rather not run systemd” is a supported configuration rather than a project of your own.
What it actually costs
Published, reproducible figures for compile times are thin on the ground, and anyone quoting a precise number is quoting their own hardware. The honest shape of it: most packages build in seconds to minutes and you will not notice them. A handful — the compiler toolchain, a web browser, LibreOffice — are hours, and they are the ones that recur, because browsers update constantly. That is precisely the gap the binary host exists to fill.
The other cost is attention. A rolling source distribution asks you to read the news items, merge configuration files, and occasionally work out why a package will not build with your particular combination of flags. That is not difficult; it is regular. Budget an hour every few weeks, not zero.
Who should run Gentoo
- Anyone who genuinely needs a system built without something — no systemd, no X11, no Bluetooth, a specific TLS library everywhere — rather than merely with it turned off.
- People building appliances or embedded images, where every package that is not present is one that cannot break or need patching.
- Anyone who wants to understand how a Linux system fits together. Installing Gentoo by hand teaches more in a weekend than a year of using something that installs itself.
- People who enjoy the maintenance. This is a real category and there is nothing wrong with it.
Who should not
- Anyone who wants the newest packages with less ceremony. That is Arch — rolling, binary, and a fraction of the time commitment.
- Anyone chasing performance. Compiling for your own processor produces differences you will struggle to measure outside a benchmark. It is not a reason.
- Servers you are responsible for. An update that needs a decision from you is the wrong property for a fleet. Use Debian or Rocky.
- Anyone new to Linux. Gentoo assumes you can read a build log and reason about a dependency graph. Come back when you can.
- Machines with little memory or slow storage. Compilation is the most demanding thing you can ask of a computer, and the binhost only helps where your USE flags match the defaults.
Related
- Arch Linux — rolling without the compiling, and the usual alternative
- How Packages Work — dependencies, sonames and why a USE flag change cascades
- What the Kernel Does — relevant when you start configuring your own
- Package Management — apt, dnf and pacman, for comparison with Portage
