Linux isn't one operating system; it's a kernel and a thousand distributions built on top of it. It's free, it's modular, and it powers nearly every cloud VM, container, supercomputer, and Android phone on the planet. If you write backend software, you ship to Linux.
← Back to Foundations| Distro | Family | Package Manager | Where You See It |
|---|---|---|---|
| Ubuntu | Debian | apt | Default cloud VM, beginner desktops, dev laptops. |
| Debian | Debian | apt | Stable servers, the upstream of Ubuntu. |
| Red Hat Enterprise Linux (RHEL) | Red Hat | dnf / yum | Big enterprises, banks, government. |
| Fedora | Red Hat | dnf | Cutting-edge upstream of RHEL; developer workstations. |
| Alpine | Independent | apk | Containers — minimal, ~5MB base image. musl instead of glibc. |
| Arch | Independent | pacman | Rolling-release; tinkerers and "I use Arch btw". |
| Amazon Linux | Red Hat | dnf | EC2 default; tuned for AWS. |
The kernel runs in privileged mode and talks to hardware. Your programs run in user space and ask the kernel for things via system calls (open, read, write, fork, execve). A crash in user space kills one process; a kernel crash is a panic.
Files, directories, devices (/dev/sda), pipes, sockets, even running processes (/proc/1234) appear in the filesystem. One small set of syscalls (read, write, ioctl) handles them all. This is what makes shell pipelines so powerful.
Processes form a tree, rooted at PID 1 (init, usually systemd). New processes are created with fork() (clone the parent) followed by execve() (replace memory with a new program). Threads share memory via clone().
/bin, /usr/bin — executables./etc — system config./var — logs, mail, variable state./home — user home directories./proc, /sys — virtual filesystems exposing kernel state./dev — device nodes./tmp — scratch space, often wiped on boot.| Tool | What It Does |
|---|---|
bash / zsh | The shell — your text-based interface to the OS. |
ssh | Secure remote login. The way you reach a server. |
systemd | Init system + service manager. systemctl start nginx. |
cron / systemd timers | Scheduled jobs. |
iptables / nftables | Firewall rules. |
top / htop / ps | See what's running and what's eating CPU/memory. |
strace / perf / bpftrace | Trace syscalls and profile performance — Linux's killer feature. |
journalctl | Read system + service logs. |
Docker, Kubernetes, and the entire container revolution are built on Linux kernel features: namespaces (process/network/filesystem isolation) and cgroups (CPU and memory limits). Containers are not VMs — they're just Linux processes pretending they're alone.
No license fees per VM, no audits, no per-core charges. Cloud providers couldn't have built a $200B/year industry on a per-seat OS. The same property lets Amazon, Google, and Meta tune the kernel for their workloads.
Same kernel, same syscalls, same tools across every machine — laptop, container, EC2 instance, Raspberry Pi. The "works on my machine" gap collapses when "my machine" is also Linux.
Windows Subsystem for Linux runs a real Linux kernel under Windows, so developers can use Linux toolchains on a Windows laptop without dual-booting. It's how a lot of .NET shops standardized on Docker.
vim with no GUI will not feel that yet.