Linux Tutorial / What Is Linux? Understanding the Kernel, Distributions, and Open Source

Strictly speaking, Linux is a kernel: the part of an operating system that manages resources between hardware and programs. What people install as a “Linux operating system” is usually a distribution that combines the kernel with commands, libraries, and tools for installing and updating software. This distinction explains why Ubuntu and Rocky Linux are both Linux-based systems but do not work in exactly the same way.

Is Linux a kernel or an operating system?

Both expressions are used, but they refer to different scopes. The Linux kernel is the core program of an operating system. In everyday conversation, a Linux operating system usually means the complete, usable system built around that kernel. Accordingly, “updating the Linux kernel” and “installing Linux” do not describe the same task.

The kernel allocates CPU time and memory to running programs and handles filesystems, networking, and hardware through device drivers. Programs use interfaces provided by the kernel rather than controlling storage devices directly. The official Linux kernel documentation likewise distinguishes the kernel from the interfaces used by programs outside it.

Commands that copy files, web browsers, web servers, and graphical desktops are not parts of the kernel itself. They run in user space and call on kernel functions when needed. Many Linux distributions include tools from the GNU Project, but not every user-space program comes from GNU. The GNU Project's explanation of GNU and Linux discusses this relationship in more detail.

What are the main parts of a Linux system?

For a first mental model, it helps to think of three layers. This is a simplification: a real system also has a boot process and many components in between.

  1. Hardware: the physical CPU, memory, storage, network devices, and other components.
  2. Linux kernel: the software that manages hardware resources and provides common facilities to programs.
  3. User space: the area where shells, commands, system services, libraries, graphical environments, and applications run.

For example, when you run a command in a terminal to read a file, the command runs in user space while the operation of opening the file goes through the kernel. Systems with the same kernel can look very different depending on which user-space software they include, such as server tools or a desktop environment.

What does a distribution add?

A Linux distribution selects and combines the Linux kernel with other software, then provides a way to install, configure, and update the resulting operating system. Distributions typically include a package manager and software repositories, basic system services, a security-update policy, and documentation. The Debian Project's introduction also describes a distribution as a complete operating system rather than just a kernel.

Ubuntu and Rocky Linux, for example, both use the Linux kernel, but their package formats, software-management tools, default configurations, and support policies differ. When following instructions, it is useful to ask whether a step concerns the Linux kernel, a tool common to many distributions, or a method specific to one distribution. Choosing a distribution belongs to lesson 02; for now, the key point is that sharing a kernel does not make two complete systems identical.

What does open source mean?

Open source means more than being able to view source code. Under the applicable license, people must be allowed to use, modify, and redistribute the software. The Open Source Initiative's Open Source Definition includes conditions covering source-code availability, redistribution, and derived works.

Open source is also different from “available at no cost.” Software can be free to download without granting permission to modify or redistribute it. Conversely, open-source software may be sold, and a company may charge for support. Components of a distribution do not necessarily all use the same license or all qualify as open source, so check the relevant license before relying on particular rights to use, change, or distribute a program.

What can you check on your own system?

If you have access to a Linux computer or virtual machine, this command shows the running kernel release:

uname -r

The distribution name and version are usually available in this file:

cat /etc/os-release

In the output, PRETTY_NAME is a human-readable distribution name, while ID and VERSION_ID identify the distribution and its version. The result of uname -r and the distribution version describe different things, so their numbers do not need to match. Some minimal or specialized systems may not have /etc/os-release, or may display different details.

Key ideas to remember

  • Kernel: the core of the operating system that manages hardware resources and provides common facilities to programs.
  • User space: where shells, commands, services, and applications run.
  • Distribution: a complete system that packages the Linux kernel with other software and tools for installation and management.
  • Open source: software whose license permits use, modification, and redistribution under its conditions.

For the story of how Linux began and evolved, see A History of Linux: From a 1991 Hobby Project to Global Infrastructure. This lesson instead focuses on the components and terminology of a present-day Linux system.

More in This Category
Linux ssh-keygen Command: Generate SSH Keys and Inspect Fingerprints

Linux ssh-keygen Command: Generate SSH Keys and Inspect Fingerprints

Learn how to generate SSH Keys and Inspect Fingerprints with the Linux ssh-keygen command, including practical examples, key options, and important precautions.

Linux timedatectl Command: Check Time Zone and Time Synchronization

Linux timedatectl Command: Check Time Zone and Time Synchronization

Learn how to check Time Zone and Time Synchronization with the Linux timedatectl command, including practical examples, key options, and important precautions.

Linux Tutorial / Choosing a Linux Distribution

Linux Tutorial / Choosing a Linux Distribution

Explore major Linux distributions and learn when to choose Ubuntu LTS or Rocky Linux for study and server practice. Compare package management, release policies, and practical selection criteria.

Linux tac Command: Print Lines in Reverse Order

Linux tac Command: Print Lines in Reverse Order

Learn how Linux tac prints records from last to first, handles multiple files and custom separators, and helps inspect recent log entries in reverse order.

Linux pacman Command: Manage Packages on Arch Linux

Linux pacman Command: Manage Packages on Arch Linux

Learn how to manage Packages on Arch Linux with the Linux pacman command, including practical examples, key options, and important precautions.

Linux help Command: Read Help for Bash Built-in Commands

Linux help Command: Read Help for Bash Built-in Commands

Learn how to use the Linux help command to read usage information for Bash built-in commands, with essential options, practical examples, output interpretation, and common troubleshooting tips.

Linux nslookup Command: Query DNS Names and Records

Linux nslookup Command: Query DNS Names and Records

Learn how to query DNS Names and Records with the Linux nslookup command, including practical examples, key options, and important precautions.

Linux clear Command: Clear the Terminal Display

Linux clear Command: Clear the Terminal Display

Learn how to use the Linux clear command to clear the visible terminal screen and understand scrollback behavior, with essential options, practical examples, output interpretation, and common troubleshooting tips.

Linux Tutorial / Hard Links vs. Symbolic Links in Linux: Differences and Examples

Linux Tutorial / Hard Links vs. Symbolic Links in Linux: Differences and Examples

Compare hard and symbolic links through inode and path behavior, then create both kinds of link and observe what happens when the original name changes.

Linux free Command: Check Memory and Swap Usage

Linux free Command: Check Memory and Swap Usage

Learn how to use the Linux free command to inspect available memory, used memory, cache, and swap usage, with essential options, practical examples, output interpretation, and common troubleshooting tips.