Linux has opinions. So do the people who build it. Understanding those opinions — where they come from and what they produce — turns Linux from a confusing maze into a coherent design.
System Philosophy
Every design choice in Linux traces back to one of these principles. Once you know them, the quirks stop feeling like bugs and start feeling like intentional trade-offs.
Articulated at Bell Labs in the 1970s: write programs that do one thing and do it well; write programs that work together; write programs that handle text streams. This is why Linux has hundreds of small tools (ls, grep, sort, uniq, cut) rather than a few large ones. Each tool is a precision instrument. You compose them with pipes.
# Who are the 5 most active users right now?
who | awk '{print $1}' | sort | uniq -c | sort -rn | head -5
# Each command does one thing.
# The pipe connects them.
In Linux, almost everything is represented as a file you can read, write,
or both. Your hard drive is /dev/sda. Your keyboard is
/dev/input/event0. Your CPU temperature is readable at
/sys/class/thermal/thermal_zone0/temp. Running process memory
maps are at /proc/self/maps. One interface — read/write
— governs everything. This is why shell scripting is so powerful:
you use the same tools on configuration files, hardware, and running processes.
$ cat /proc/self/maps
55a3f1234000-55a3f1236000 r--p ... /usr/bin/cat
7f8b2c000000-7f8b2c200000 r--p ... /usr/lib/libc.so.6
7ffd3a800000-7ffd3a821000 rw-p ... [stack]
# Three segments of cat's own process:
# the binary, its C library, and its stack.
# All exposed as a readable file.
Free as in freedom, not as in price. The Linux kernel is licensed under the GPL — you can read it, modify it, run it, and distribute your changes, but any changes must also be shared under the same terms. This creates a virtuous cycle: every improvement becomes available to everyone. Different licenses (MIT, Apache, LGPL) have different terms. Understanding them matters more than you might think once you're contributing.
GPL v2/v3 — Share-alike required; Linux's license
MIT — Do almost anything; no requirements
Apache 2 — Like MIT + explicit patent grant
LGPL — Library version; linking okay w/o share-alike
AGPL — GPL extended to network/SaaS use
Point release distros (Ubuntu, Fedora, Debian Stable) ship a tested, frozen snapshot of software every 6–24 months. Between releases, only security patches come through. Rock-solid, but your software versions age. Rolling release distros (Arch, openSUSE Tumbleweed) have no "version" — you run perpetually current software. No reinstalls, no big upgrades. But an update can occasionally break something if you're not paying attention.
cat /etc/os-release
# VERSION_ID="24.04" → point release
# VERSION_ID="" → rolling
# Debian Testing is a middle ground:
# rolling relative to Debian Stable,
# but packages spend time in testing first.
Binary distros (Ubuntu, Arch, Fedora) ship precompiled programs. Install runs in seconds. Source-based distros (Gentoo, NixOS in some modes) compile everything from source for your exact hardware and configuration. That means hours of compile time but fine-grained control over what gets built and how. The AUR is a hybrid: you get a script (PKGBUILD) that compiles the software for you automatically.
Binary, fast: Ubuntu, Arch, Fedora
Hybrid AUR: pacman + PKGBUILD scripts
Source, control: Gentoo Portage, Nix
(compile times: hours to days)
Some distros and desktop environments ship with everything configured and working — integration is the goal. GNOME, Ubuntu, KDE Plasma: you open the box and it works. Others ship with almost nothing and expect you to compose your own system — minimalism is the goal. Arch, i3, Sway: you install the exact components you want and nothing else. Neither is wrong. The question is how much you want to learn vs how much you want things to just work.
← Minimal Integrated →
Arch+i3 · Debian+XFCE · Ubuntu+GNOME
(you build) (balanced) (it's built)
On Linux, almost all configuration lives in plain text files in your home directory, named with a leading dot (hidden by default) — hence "dotfiles." Your shell prompt, your editor behavior, your terminal colors, your window manager key bindings: all text files. Advanced users track these in a git repository so their entire working environment is version-controlled and portable to any machine. "Ricing" is the community term for investing in a highly customized, visually distinctive setup.
~/.bashrc # bash config
~/.config/i3/ # i3 window manager
~/.config/nvim/ # Neovim
~/.config/alacritty/ # terminal
~/.Xresources # X11 settings
ls -la ~ # see your own dotfiles
The through-line: These principles all reinforce each other. Small composable tools + file-based configuration + open source + your choice of minimalism or integration = a system you actually understand and control. That's not a selling point. That's just what it is.