Understanding Linux Kernel Version Numbering
The Linux kernel follows a distinct version numbering format that
indicates the type of changes, stability, and development cycle of a
given release. While earlier eras of Linux utilized different
conventions—such as odd and even numbers to denote development and
stable branches—the modern kernel uses an intuitive three-component
format (A.B.C) supplemented by release tags. This guide
breaks down the structure of current Linux kernel versions, how
development cycles operate, and what special suffixes mean.
The Modern Format: A.B.C
Modern Linux kernel versions (standardized since kernel 3.0 in 2011)
primarily follow a three-part numbering system:
major.minor.patch (often represented as
x.y.z).
- A (Major Version): The first number changes rarely.
Unlike standard Semantic Versioning, an increment in the major number
does not necessarily signify backward-incompatible API breakage.
Instead, Linus Torvalds usually bumps the major number when the minor
number becomes unwieldy (historically around
.19or.20), or to mark symbolic milestones. For example, Linux 4.0 followed 3.19, and 5.0 followed 4.20. - B (Minor Version): This number represents the primary development branch and the mainline release cycle. New hardware drivers, architecture updates, performance improvements, and core subsystems are introduced here. A new minor version is released roughly every 9 to 10 weeks.
- C (Patch / Stable Version): This number tracks
point releases and bug fixes. Once a mainline kernel (
A.B) is released, the "stable" maintenance team, led by Greg Kroah-Hartman, takes over the branch to backport critical bug fixes and security patches. These releases do not introduce new features, ensuring stability for production environments.
Pre-release Identifiers: Release Candidates (-rc)
Before a new mainline kernel is officially published, it undergoes
extensive community testing using Release Candidate (RC) tags formatted
as A.B-rcN:
- When a new development window opens, Linus Torvalds pulls new code for about two weeks (the "merge window").
- At the close of the merge window, the first release candidate is
issued (e.g.,
6.8-rc1). - Over the subsequent weeks, bug fixes are committed, resulting in
weekly releases (
-rc2,-rc3, up to-rc7or-rc8). - Once the codebase is considered stable, the final release drops
without the
-rcsuffix (e.g.,6.8).
Historical Context: Pre-3.0 Conventions
Understanding older kernel numbers helps when dealing with legacy systems:
- Prior to Linux 2.6: The second number designated stability. Even minor numbers (e.g., 2.4.x) were stable releases meant for end-users, while odd minor numbers (e.g., 2.5.x) were unstable development releases where experimental code was tested.
- The 2.6 Era: The odd/even model was abandoned in
favor of a time-based model. A fourth digit was added
(
2.6.x.y) to manage bug fixes, but this four-digit system was simplified when Linux 3.0 was introduced.
Long-Term Support (LTS) Releases
Certain kernel releases are designated as Long-Term Support (LTS). While regular stable kernels are maintained only until the next mainline version arrives, LTS kernels receive critical bug fixes and security backports for several years. These are designated to provide stable platforms for enterprise distributions, embedded devices, and production servers.
Distribution-Specific Suffixes
When checking the kernel version on an installed system using the
uname -r command, additional strings often appear after the
base version, such as 5.15.0-88-generic or
6.1.0-18-amd64. These strings represent:
- Distribution Patch Level: Numbers added by operating system vendors (like Debian, Ubuntu, or Red Hat) indicating their internal build revisions and custom backported security patches.
- Architecture/Flavor: Suffixes specifying the system
target or optimization profile, such as
generic,server,lowlatency, orrt(real-time).