Every mainstream distribution - Ubuntu, Debian, Fedora, Arch, openSUSE - ships essentially the same upstream kernel, patched and versioned differently. What actually differs between them is everything built around it. Understanding that split makes it much easier to reason about why two "Linux machines" can feel like entirely different operating systems.

What the kernel contributes

  • Hardware support and drivers
  • Process and memory management
  • The system call interface every program relies on
  • Core subsystems like networking, filesystems, and security modules (SELinux, AppArmor)

Distributions mostly don't rewrite this layer; they select a kernel version, apply a patch set (sometimes substantial, as with Ubuntu's HWE kernels or RHEL's long-term backports), and configure which drivers and features are compiled in.

What a distribution adds

Layer Example choices
Package manager APT (Debian/Ubuntu), DNF (Fedora/RHEL), pacman (Arch)
Init system systemd (most), OpenRC (Alpine, Gentoo option)
Default shell Bash (most), Zsh (recent macOS, some distros)
Release model Fixed releases (Ubuntu, Debian) vs. rolling (Arch)
Philosophy Stability-first (Debian), latest-packages (Arch), enterprise support (RHEL)

See Package Management and systemd and Services for more on the first two rows.

Why this distinction matters practically

  • Troubleshooting: a kernel bug (e.g. a driver issue) will show up across distributions; a package or configuration bug is usually distro-specific.
  • Following instructions online: a command that works on Ubuntu (apt install nginx) has a direct equivalent on Fedora (dnf install nginx) but isn't the same command - the underlying software is often identical.
  • Choosing a distribution: you're mostly choosing a package manager, release cadence, and support model, not a fundamentally different operating system. Check what kernel and distro you're actually running before assuming either:
uname -r        # kernel version
cat /etc/os-release   # distribution name and version
6.8.0-45-generic
PRETTY_NAME="Ubuntu 24.04.1 LTS"

/etc/os-release is the standardized, machine-readable way to identify a distribution - prefer it over parsing /etc/issue or distro-specific files, which aren't guaranteed to exist everywhere.