The Linux kernel is a
free and open source
Free and open-source software (FOSS) is software available under a license that grants users the right to use, modify, and distribute the software modified or not to everyone free of charge. FOSS is an inclusive umbrella term encompassing free ...
Unix-like
A Unix-like (sometimes referred to as UN*X, *nix or *NIX) operating system is one that behaves in a manner similar to a Unix system, although not necessarily conforming to or being certified to any version of the Single UNIX Specification. A Uni ...
kernel that is used in many
computer systems
A computer is a machine that can be Computer programming, programmed to automatically Execution (computing), carry out sequences of arithmetic or logical operations (''computation''). Modern digital electronic computers can perform generic set ...
worldwide. The kernel was created by
Linus Torvalds
Linus Benedict Torvalds ( , ; born 28 December 1969) is a Finnish software engineer who is the creator and lead developer of the Linux kernel. He also created the distributed version control system Git.
He was honored, along with Shinya Yam ...
in 1991 and was soon adopted as the kernel for the
GNU operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ...
(OS) which was created to be a
free replacement for
Unix
Unix (, ; trademarked as UNIX) is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
. Since the late 1990s, it has been included in many
operating system distributions, many of which are called
Linux
Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
. One such Linux kernel operating system is
Android which is used in many mobile and embedded devices.
Most of the kernel code is written in
C as supported by the
GNU compiler collection
The GNU Compiler Collection (GCC) is a collection of compilers from the GNU Project that support various programming languages, Computer architecture, hardware architectures, and operating systems. The Free Software Foundation (FSF) distributes ...
(GCC) which has extensions beyond standard C.
The code also contains
assembly code for architecture-specific logic such as optimizing memory use and task execution.
The kernel has a
modular design such that modules can be integrated as
software component
A software component is a modular unit of software that encapsulates specific functionality. The desired characteristics of a component are reusability and maintainability.
Value
Components allow software development to assemble software ...
s including dynamically loaded. The kernel is
monolithic in an architectural sense since the entire OS kernel runs in
kernel space
A modern computer operating system usually uses virtual memory to provide separate address spaces or regions of a single address space, called user space and kernel space. This separation primarily provides memory protection and hardware prote ...
.
Linux is provided under the
GNU General Public License version 2, although it contains files under other
compatible licenses.
History
In 1991, Linus Torvalds was a
computer science
Computer science is the study of computation, information, and automation. Computer science spans Theoretical computer science, theoretical disciplines (such as algorithms, theory of computation, and information theory) to Applied science, ...
student enrolled at the
University of Helsinki
The University of Helsinki (, ; UH) is a public university in Helsinki, Finland. The university was founded in Turku in 1640 as the Royal Academy of Ã…bo under the Swedish Empire, and moved to Helsinki in 1828 under the sponsorship of Alexander ...
. During his time there, he began to develop an operating system as a side-project inspired by UNIX, for a personal computer.
He started with a
task switcher in
Intel 80386 assembly language and a
terminal driver.
On 25 August 1991, Torvalds posted the following to ''comp.os.minix'', a
newsgroup
A Usenet newsgroup is a repository usually within the Usenet system for messages posted from users in different locations using the Internet. They are not only discussion groups or conversations, but also a repository to publish articles, start ...
on
Usenet
Usenet (), a portmanteau of User's Network, is a worldwide distributed discussion system available on computers. It was developed from the general-purpose UUCP, Unix-to-Unix Copy (UUCP) dial-up network architecture. Tom Truscott and Jim Elli ...
:
On 17 September 1991, Torvalds prepared version 0.01 of Linux and put on the "ftp.funet.fi" – FTP server of the Finnish University and Research Network (
FUNET
FUNET is the Finnish University and Research Network, a backbone network providing Internet connections for Finnish universities and polytechnics as well as other research facilities. It is governed by the state-owned CSC – IT Center for S ...
). It was not even executable since its code still needed Minix to compile and test it.
On 5 October 1991, Torvalds announced the first "official" version of Linux, version 0.02.
Linux grew rapidly as many developers, including the
MINIX community, contributed to the project. At the time, the
GNU Project
The GNU Project ( ) is a free software, mass collaboration project announced by Richard Stallman on September 27, 1983. Its goal is to give computer users freedom and control in their use of their computers and Computer hardware, computing dev ...
had completed many components for its free UNIX replacement,
GNU, but its kernel, the
GNU Hurd, was incomplete. The project adopted the Linux kernel for its OS.
Torvalds labeled the kernel with major version 0 to indicate that it was not yet intended for general use.
Version 0.11, released in December 1991, was the first version to be
self-hosted; compiled on a computer running the Linux kernel.
When Torvalds released version 0.12 in February 1992, he adopted the
GNU General Public License
The GNU General Public Licenses (GNU GPL or simply GPL) are a series of widely used free software licenses, or ''copyleft'' licenses, that guarantee end users the freedom to run, study, share, or modify the software. The GPL was the first ...
version 2 (GPLv2) over his previous self-drafted license, which had not permitted commercial redistribution.
In contrast to
Unix
Unix (, ; trademarked as UNIX) is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
, all
source files of Linux are freely available, including
device drivers
In the context of an operating system, a device driver is a computer program that operates or controls a particular type of device that is attached to a computer or automaton. A driver provides a software interface to hardware devices, enabli ...
.
The initial success of Linux was driven by programmers and testers across the world. With the support of the
POSIX
The Portable Operating System Interface (POSIX; ) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines application programming interfaces (APIs), along with comm ...
APIs, through the libC that, whether needed, acts as an entry point to the kernel address space, Linux could run software and applications that had been developed for Unix.

On 19 January 1992, the first post to the new newsgroup ''alt.os.linux'' was submitted.
On 31 March 1992, the newsgroup was renamed ''comp.os.linux''.
The fact that Linux is a
monolithic kernel
A monolithic kernel is an operating system software architecture, architecture with the entire operating system running in kernel space. The monolithic model differs from other architectures such as the microkernel in that it alone defines a high ...
rather than a
microkernel
In computer science, a microkernel (often abbreviated as μ-kernel) is the near-minimum amount of software that can provide the mechanisms needed to implement an operating system (OS). These mechanisms include low-level address space management, ...
was the topic of a debate between
Andrew S. Tanenbaum, the creator of MINIX, and Torvalds.
The
Tanenbaum–Torvalds debate
Starting in 1992, Andrew S. Tanenbaum and Linus Torvalds had a written debate over the Internet regarding the Linux kernel and kernel architecture in general. Tanenbaum, the creator of Minix, began the debate in Usenet discussion group , argu ...
started in 1992 on the
Usenet
Usenet (), a portmanteau of User's Network, is a worldwide distributed discussion system available on computers. It was developed from the general-purpose UUCP, Unix-to-Unix Copy (UUCP) dial-up network architecture. Tom Truscott and Jim Elli ...
group ''comp.os.minix'' as a general discussion about kernel architectures.
Version 0.96 released in May 1992 was the first capable of running the
X Window System
The X Window System (X11, or simply X) is a windowing system for bitmap displays, common on Unix-like operating systems.
X originated as part of Project Athena at Massachusetts Institute of Technology (MIT) in 1984. The X protocol has been at ...
. In March 1994, Linux 1.0.0 was released with 176,250 lines of code.
As indicated by the version number, it was the first version considered suitable for a
production environment.
In June 1996, after release 1.3, Torvalds decided that Linux had evolved enough to warrant a new major number, and so labeled the next release as version 2.0.0.
Significant features of 2.0 included
symmetric multiprocessing
Symmetric multiprocessing or shared-memory multiprocessing (SMP) involves a multiprocessor computer hardware and software architecture where two or more identical processors are connected to a single, shared main memory, have full access to all ...
(SMP), support for more processors types and support for selecting specific hardware targets and for enabling architecture-specific features and optimizations.
The ''make *config'' family of commands of ''kbuild'' enable and configure options for building ad hoc kernel executables (
vmlinux
vmlinux is a static library, statically linked executable file that contains the Linux kernel in one of the object file formats supported by Linux, which includes Executable and Linkable Format (ELF) and Common Object File Format (COFF). The v ...
) and loadable modules.
Version 2.2, released on 20 January 1999,
improved locking granularity and SMP management, added
m68k
The Motorola 68000 series (also known as 680x0, m68000, m68k, or 68k) is a family of 32-bit complex instruction set computer (CISC) microprocessors. During the 1980s and early 1990s, they were popular in personal computers and workstations and w ...
,
PowerPC
PowerPC (with the backronym Performance Optimization With Enhanced RISC – Performance Computing, sometimes abbreviated as PPC) is a reduced instruction set computer (RISC) instruction set architecture (ISA) created by the 1991 Apple Inc., App ...
,
Sparc64,
Alpha
Alpha (uppercase , lowercase ) is the first letter of the Greek alphabet. In the system of Greek numerals, it has a value of one. Alpha is derived from the Phoenician letter ''aleph'' , whose name comes from the West Semitic word for ' ...
, and other 64-bit platforms support.
Furthermore, it added new
file systems including
Microsoft
Microsoft Corporation is an American multinational corporation and technology company, technology conglomerate headquartered in Redmond, Washington. Founded in 1975, the company became influential in the History of personal computers#The ear ...
's
NTFS
NT File System (NTFS) (commonly called ''New Technology File System'') is a proprietary journaling file system developed by Microsoft in the 1990s.
It was developed to overcome scalability, security and other limitations with File Allocation Tabl ...
read-only capability.
In 1999, IBM published its patches to the Linux 2.2.13 code for the support of the
S/390 architecture.
Version 2.4.0, released on 4 January 2001,
contained support for
ISA Plug and Play
In computing, a plug and play (PnP) device or computer bus is one with a specification that facilitates the recognition of a hardware component in a system without the need for physical device configuration or user intervention in resolving reso ...
,
USB
Universal Serial Bus (USB) is an industry standard, developed by USB Implementers Forum (USB-IF), for digital data transmission and power delivery between many types of electronics. It specifies the architecture, in particular the physical ...
, and
PC Card
PC Card is a technical standard specifying an expansion card interface for laptops and personal digital assistants, PDAs. The PCMCIA originally introduced the 16-bit Industry Standard Architecture, ISA-based PCMCIA Card in 1990, but renamed it to ...
s. Linux 2.4 added support for the
Pentium 4
Pentium 4 is a series of single-core central processing unit, CPUs for Desktop computer, desktops, laptops and entry-level Server (computing), servers manufactured by Intel. The processors were shipped from November 20, 2000 until August 8, 20 ...
and
Itanium
Itanium (; ) is a discontinued family of 64-bit computing, 64-bit Intel microprocessors that implement the Intel Itanium architecture (formerly called IA-64). The Itanium architecture originated at Hewlett-Packard (HP), and was later jointly dev ...
(the latter introduced the
ia64 ISA that was jointly developed by Intel and Hewlett-Packard to supersede the older
PA-RISC
Precision Architecture reduced instruction set computer, RISC (PA-RISC) or Hewlett Packard Precision Architecture (HP/PA or simply HPPA), is a computer, general purpose computer instruction set architecture (ISA) developed by Hewlett-Packard f ...
), and for the newer
64-bit MIPS processor.
Development for 2.4.''x'' changed a bit in that more features were made available throughout the series, including support for
Bluetooth
Bluetooth is a short-range wireless technology standard that is used for exchanging data between fixed and mobile devices over short distances and building personal area networks (PANs). In the most widely used mode, transmission power is li ...
,
Logical Volume Manager (LVM) version 1,
RAID
RAID (; redundant array of inexpensive disks or redundant array of independent disks) is a data storage virtualization technology that combines multiple physical Computer data storage, data storage components into one or more logical units for th ...
support,
InterMezzo and
ext3
ext3, or third extended filesystem, is a journaling file system, journaled file system that is commonly used with the Linux kernel. It used to be the default file system for many popular Linux distributions but generally has been supplanted by ...
file systems.
Version 2.6.0 was released on 17 December 2003.
The development for 2.6.''x'' changed further towards including new features throughout the series. Among the changes that have been made in the 2.6 series are: integration of
μClinux into the mainline kernel sources,
PAE support, support for several new lines of
CPUs
A central processing unit (CPU), also called a central processor, main processor, or just processor, is the primary Processor (computing), processor in a given computer. Its electronic circuitry executes Instruction (computing), instructions ...
, integration of Advanced Linux Sound Architecture (ALSA) into the mainline kernel sources, support for up to 2
32 users (up from 2
16), support for up to 2
29 process IDs (64-bit only, 32-bit architectures still limited to 2
15),
substantially increased the number of device types and the number of devices of each type, improved
64-bit
In computer architecture, 64-bit integers, memory addresses, or other data units are those that are 64 bits wide. Also, 64-bit central processing units (CPU) and arithmetic logic units (ALU) are those that are based on processor registers, a ...
support, support for
file systems which support file sizes of up to 16
terabyte
The byte is a unit of digital information that most commonly consists of eight bits. Historically, the byte was the number of bits used to encode a single character of text in a computer and for this reason it is the smallest addressable un ...
s, in-kernel
preemption, support for the
Native POSIX Thread Library (NPTL),
User-mode Linux integration into the mainline kernel sources,
SELinux integration into the mainline kernel sources,
InfiniBand
InfiniBand (IB) is a computer networking communications standard used in high-performance computing that features very high throughput and very low latency. It is used for data interconnect both among and within computers. InfiniBand is also used ...
support, and considerably more.
Starting with 2.6.x releases, the kernel supported a large number of file systems; some designed for Linux, like
ext3
ext3, or third extended filesystem, is a journaling file system, journaled file system that is commonly used with the Linux kernel. It used to be the default file system for many popular Linux distributions but generally has been supplanted by ...
,
ext4
ext4 (fourth extended filesystem) is a journaling file system for Linux, developed as the successor to ext3.
ext4 was initially a series of backward-compatible extensions to ext3, many of them originally developed by Cluster File Systems for ...
,
FUSE,
Btrfs
Btrfs (pronounced as "better F S", "butter F S", "b-tree F S", or "B.T.R.F.S.") is a computer storage format that combines a file system based on the copy-on-write (COW) principle with a logical volume manager (distinct from Linux's LVM), d ...
,
and others native to other operating systems like
JFS,
XFS
XFS is a high-performance 64-bit journaling file system created by Silicon Graphics, Inc (SGI) in 1993. It was the default file system in SGI's IRIX operating system starting with its version 5.3. XFS was ported to the Linux kernel in 2001; a ...
, Minix,
Xenix
Xenix is a discontinued Unix operating system for various microcomputer platforms, licensed by Microsoft from AT&T Corporation. The first version was released in 1980, and Xenix was the most common Unix variant during the mid- to late-1980s. T ...
,
Irix
IRIX (, ) is a discontinued operating system developed by Silicon Graphics (SGI) to run on the company's proprietary MIPS architecture, MIPS workstations and servers. It is based on UNIX System V with Berkeley Software Distribution, BSD extensio ...
,
Solaris,
System V
Unix System V (pronounced: "System Five") is one of the first commercial versions of the Unix operating system. It was originally developed by AT&T and first released in 1983. Four major versions of System V were released, numbered 1, 2, 3, an ...
,
Windows
Windows is a Product lining, product line of Proprietary software, proprietary graphical user interface, graphical operating systems developed and marketed by Microsoft. It is grouped into families and subfamilies that cater to particular sec ...
and
MS-DOS
MS-DOS ( ; acronym for Microsoft Disk Operating System, also known as Microsoft DOS) is an operating system for x86-based personal computers mostly developed by Microsoft. Collectively, MS-DOS, its rebranding as IBM PC DOS, and a few op ...
.
Though development had not used a
version control system
Version control (also known as revision control, source control, and source code management) is the software engineering practice of controlling, organizing, and tracking different versions in history of computer files; primarily source code ...
thus far, in 2002, Linux developers adopted
BitKeeper
BitKeeper is a discontinued software tool for distributed revision control of computer source code. Originally developed as proprietary software by BitMover Inc., a privately held company based in Los Gatos, California, it was released as open-sou ...
, which was made freely available to them even though it was not
free software
Free software, libre software, libreware sometimes known as freedom-respecting software is computer software distributed open-source license, under terms that allow users to run the software for any purpose as well as to study, change, distribut ...
. In 2005, because of efforts to
reverse-engineer it, the company which owned the software revoked its support of the Linux community. In response, Torvalds and others wrote
Git
Git () is a distributed version control system that tracks versions of files. It is often used to control source code by programmers who are developing software collaboratively.
Design goals of Git include speed, data integrity, and suppor ...
. The new system was written within weeks, and in two months the first official kernel made using it was released.
In 2005 the ''stable team'' was formed as a response to the lack of a kernel tree where people could work on
bug fixes, and it would keep updating ''stable'' versions.
In February 2008 the ''linux-next'' tree was created to serve as a place where patches aimed to be merged during the next development cycle gathered.
Several subsystem maintainers also adopted the suffix ''-next'' for trees containing code which they mean to submit for inclusion in the next release cycle. , the in-development version of Linux is held in an unstable branch named ''linux-next''.
The 20th anniversary of Linux was celebrated by Torvalds in July 2011 with the release of version 3.0.0.
As 2.6 had been the version number for 8 years, a new ''uname26'' personality that reports 3.x as 2.6.40+x had to be added to the kernel so that old programs would work.
Version 3.0 was released on 22 July 2011.
On 30 May 2011, Torvalds announced that the big change was "NOTHING. Absolutely nothing." and asked, "...let's make sure we really make the next release not just an all new shiny number, but a good kernel too."
After the expected 6–7 weeks of the development process, it would be released near the 20th anniversary of Linux.
On 11 December 2012, Torvalds decided to reduce kernel complexity by removing support for
i386
The Intel 386, originally released as the 80386 and later renamed i386, is the third-generation x86 architecture microprocessor from Intel. It was the first 32-bit processor in the line, making it a significant evolution in the x86 archite ...
processors—specifically by not having to
emulate the
atomic CMPXCHG instruction introduced with the
i486
The Intel 486, officially named i486 and also known as 80486, is a microprocessor introduced in 1989. It is a higher-performance follow-up to the i386, Intel 386. It represents the fourth generation of binary compatible CPUs following the Inte ...
to allow reliable
mutexes—making the 3.7 kernel series the last one still supporting the original processor.
The same series unified support for the
ARM processor.
The numbering change from 2.6.39 to 3.0, and from 3.19 to 4.0, involved no meaningful technical differentiation; the major version number was increased simply to avoid large minor numbers.
Stable 3.x.y kernels were released until 3.19 in February 2015. Version 3.11, released on 2 September 2013,
added many new features such as new flag for to reduce temporary file vulnerabilities, experimental AMD
Radeon dynamic power management, low-latency network polling, and
zswap
zswap is a Linux kernel feature that provides a compressed write-back Cache (computing), cache for Paging, swapped pages, as a form of virtual memory compression. Instead of moving memory pages to a swap device when they are to be swapped ou ...
(compressed swap cache).
In April 2015, Torvalds released kernel version 4.0.
By February 2015, Linux had received contributions from nearly 12,000 programmers from more than 1,200 companies, including some of the world's largest software and hardware vendors.
Version 4.1 of Linux, released in June 2015, contains over 19.5 million lines of code contributed by almost 14,000 programmers.
Linus Torvalds announced that kernel version 4.22 would instead be numbered 5.0 in March 2019, stating that "'5.0' doesn't mean anything more than that the 4.x numbers started getting big enough that I ran out of fingers and toes."
It featured many major additions such as support for the AMD Radeon
FreeSync
FreeSync is an adaptive synchronization technology that allows LCD and OLED displays to support a variable refresh rate aimed at avoiding tearing and reducing stuttering caused by misalignment between the screen's refresh rate and the content's ...
and
NVIDIA
Nvidia Corporation ( ) is an American multinational corporation and technology company headquartered in Santa Clara, California, and incorporated in Delaware. Founded in 1993 by Jensen Huang (president and CEO), Chris Malachowsky, and Curti ...
Xavier display, fixes for
F2FS,
EXT4
ext4 (fourth extended filesystem) is a journaling file system for Linux, developed as the successor to ext3.
ext4 was initially a series of backward-compatible extensions to ext3, many of them originally developed by Cluster File Systems for ...
and
XFS
XFS is a high-performance 64-bit journaling file system created by Silicon Graphics, Inc (SGI) in 1993. It was the default file system in SGI's IRIX operating system starting with its version 5.3. XFS was ported to the Linux kernel in 2001; a ...
, restored support for swap files on the
Btrfs
Btrfs (pronounced as "better F S", "butter F S", "b-tree F S", or "B.T.R.F.S.") is a computer storage format that combines a file system based on the copy-on-write (COW) principle with a logical volume manager (distinct from Linux's LVM), d ...
file system and continued work on the
Intel
Intel Corporation is an American multinational corporation and technology company headquartered in Santa Clara, California, and Delaware General Corporation Law, incorporated in Delaware. Intel designs, manufactures, and sells computer compo ...
Icelake Gen11 graphics and on the
NXP i.MX8 SoCs. This release was noticeably larger than the rest, Torvalds mentioning that "The overall changes for all of the 5.0 release are much bigger."
A total of 1,991 developers, of whom 334 were first-time collaborators, added more than 553,000 lines of code to version 5.8, breaking the record previously held by version 4.9.
Popularity
According to the Stack Overflow's annual Developer Survey of 2019, more than 53% of all respondents have developed software for
Linux
Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
and about 27% for
Android,
although only about 25% develop with Linux-based operating systems.
Most websites run on
Linux-based operating systems,
and all of the
world's 500 most powerful supercomputers run on Linux.
Linux distributions
A Linux distribution, often abbreviated as distro, is an operating system that includes the Linux kernel for its kernel (operating system), kernel functionality. Although the name does not imply distribution (marketing), product distribution pe ...
bundle the kernel with
system software
System software is software designed to provide a platform for other software. An example of system software is an operating system (OS) (like macOS, Linux, Android, and Microsoft Windows).
Application software is software that allows users to d ...
(e.g., the
GNU C Library
The GNU C Library, commonly known as glibc, is the GNU Project implementation of the C standard library. It provides a wrapper around the system calls of the Linux kernel and other kernels for application use. Despite its name, it now also dir ...
,
systemd
systemd is a software suite that provides an array of system components for Linux operating systems. The main aim is to unify service configuration and behavior across Linux distributions. Its primary component is a "system and service manage ...
, and other
Unix
Unix (, ; trademarked as UNIX) is a family of multitasking, multi-user computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
utilities
A public utility company (usually just utility) is an organization that maintains the infrastructure for a public service (often also providing a service using that infrastructure). Public utilities are subject to forms of public control and r ...
and
daemons) and a wide selection of
application software
Application software is any computer program that is intended for end-user use not operating, administering or programming the computer. An application (app, application program, software application) is any program that can be categorized as ...
, but their
usage share in desktops is low in comparison to other operating systems.
Since
Android, which runs on modified Linux kernel, accounts for the majority of mobile device operating systems,
and due to its rising use in
embedded devices, Android is significantly responsible for rising use of Linux overall.
Value

The cost to redevelop version 2.6.0 of the Linux kernel in a traditional proprietary development setting has been estimated to be US$612 million (€467M, £394M) in 2004 prices using the
COCOMO person-month estimation model.
In 2006, a study funded by the European Union put the redevelopment cost of kernel version 2.6.8 higher, at €882M ($1.14bn, £744M).
This topic was revisited in October 2008 by Amanda McPherson, Brian Proffitt, and Ron Hale-Evans. Using David A. Wheeler's methodology, they estimated redevelopment of the 2.6.25 kernel now costs $1.3bn (part of a total $10.8bn to redevelop Fedora 9).
Again, Garcia-Garcia and Alonso de Magdaleno from University of Oviedo (Spain) estimate that the value annually added to kernel was about €100M between 2005 and 2007 and €225M in 2008, it would cost also more than €1bn (about $1.4bn as of February 2010) to develop in the European Union.
, using then-current
LOC (lines of code) of a 2.6.x Linux kernel and wage numbers with David A. Wheeler's calculations it would cost approximately $3bn (about €2.2bn) to redevelop the Linux kernel as it keeps getting bigger. An updated calculation , using then-current 20,088,609 LOC (lines of code) for the 4.14.14 Linux kernel and the current US national average programmer salary of $75,506 show that it would cost approximately $14,725,449,000 (£11,191,341,000) to rewrite the existing code.
Distribution
Most who use Linux do so via a
Linux distribution
A Linux distribution, often abbreviated as distro, is an operating system that includes the Linux kernel for its kernel functionality. Although the name does not imply product distribution per se, a distro—if distributed on its own—is oft ...
. Some distributions ship the vanilla or stable kernel. However, several vendors (such as
Red Hat
Red Hat, Inc. (formerly Red Hat Software, Inc.) is an American software company that provides open source software products to enterprises and is a subsidiary of IBM. Founded in 1993, Red Hat has its corporate headquarters in Raleigh, North ...
and
Debian
Debian () is a free and open-source software, free and open source Linux distribution, developed by the Debian Project, which was established by Ian Murdock in August 1993. Debian is one of the oldest operating systems based on the Linux kerne ...
) maintain a customized source tree. These are usually updated at a slower pace than the vanilla branch, and they usually include all fixes from the relevant stable branch, but at the same time they can also add support for drivers or features which had not been released in the vanilla version the distribution vendor started basing its branch from.
Developers
Community
The community of Linux kernel developers comprises about 5000–6000 members. According to the "2017 State of Linux Kernel Development", a study issued by the Linux Foundation, covering the commits for the releases 4.8 to 4.13, about 1500 developers were contributing from about 200–250 companies on average. The top 30 developers contributed a little more than 16% of the code. For companies, the top contributors are Intel (13.1%) and Red Hat (7.2%), Linaro (5.6%), IBM (4.1%), the second and fifth places are held by the 'none' (8.2%) and 'unknown' (4.1%) categories.
Conflict
Notable conflicts among Linux kernel developers:
* In July 2007,
Con Kolivas announced that he would cease developing for the Linux kernel.
* In July 2009,
Alan Cox quit his role as the
TTY layer maintainer after disagreement with Torvalds.
* In December 2010, there was a discussion between Linux SCSI maintainer James Bottomley and SCST maintainer Vladislav Bolkhovitin about which SCSI target stack should be included in the Linux kernel.
This made some Linux users upset.
* In June 2012, Torvalds made it very clear that he
did not agree with
NVIDIA
Nvidia Corporation ( ) is an American multinational corporation and technology company headquartered in Santa Clara, California, and incorporated in Delaware. Founded in 1993 by Jensen Huang (president and CEO), Chris Malachowsky, and Curti ...
releasing its drivers as closed.
* In April 2014, Torvalds banned
Kay Sievers
Kay Sievers is a German computer programmer, best known for developing the udev device manager of Linux, systemd and the Gummiboot EFI bootloader. Kay Sievers made major contributions to Linux's hardware hotplug and device management subsystems ...
from submitting patches to the Linux kernel for failing to deal with
bugs that caused
systemd
systemd is a software suite that provides an array of system components for Linux operating systems. The main aim is to unify service configuration and behavior across Linux distributions. Its primary component is a "system and service manage ...
to negatively interact with the kernel.
* In October 2014,
Lennart Poettering accused Torvalds of tolerating the rough discussion style on Linux kernel related mailing lists and of being a bad role model.
* In March 2015, Christoph Hellwig filed a lawsuit against
VMware for infringement of the copyright on the Linux kernel.
Linus Torvalds made it clear that he did not agree with this and similar initiatives by calling lawyers a festering disease.
* In April 2021, a team from the
University of Minnesota
The University of Minnesota Twin Cities (historically known as University of Minnesota) is a public university, public Land-grant university, land-grant research university in the Minneapolis–Saint Paul, Twin Cities of Minneapolis and Saint ...
was found to be submitting "bad faith" patches to the kernel as part of its research. This resulted in the immediate reversion of all patches ever submitted by a member of the university. In addition, a warning was issued by a senior maintainer that any future patch from the university would be rejected on sight.
Prominent Linux kernel developers have been aware of the importance of avoiding conflicts between developers.
For a long time there was no code of conduct for kernel developers due to opposition by Torvalds.
However, a Linux Kernel ''Code of Conflict'' was introduced on 8 March 2015.
It was replaced on 16 September 2018 by a new ''Code of Conduct'' based on the
Contributor Covenant. This coincided with a public apology by Torvalds and a brief break from kernel development.
On 30 November 2018, complying with the ''Code of Conduct'', Jarkko Sakkinen of Intel sent out patches replacing instances of "fuck" appearing in source code comments with suitable versions focused on the word 'hug'.
Developers who feel treated unfairly can report this to the
Linux Foundation
The Linux Foundation (LF) is a non-profit organization established in 2000 to support Linux development and open-source software projects.
Background
The Linux Foundation started as Open Source Development Labs in 2000 to standardize and prom ...
Technical Advisory Board.
In July 2013, the maintainer of the USB 3.0 driver
Sage Sharp asked Torvalds to address the abusive commentary in the kernel development community. In 2014, Sharp backed out of Linux kernel development, saying that "The focus on technical excellence, in combination with overloaded maintainers, and people with different cultural and social norms, means that Linux kernel maintainers are often blunt, rude, or brutal to get their job done".
At the linux.conf.au (LCA) conference in 2018, developers expressed the view that the culture of the community has gotten much better in the past few years. Daniel Vetter, the maintainer of the Intel drm/i915 graphics kernel driver, commented that the "rather violent language and discussion" in the kernel community has decreased or disappeared.
Laurent Pinchart asked developers for feedback on their experiences with the kernel community at the 2017 Embedded Linux Conference Europe. The issues brought up were discussed a few days later at the Maintainers Summit. Concerns over the lack of consistency in how maintainers responded to patches submitted by developers were echoed by
Shuah Khan, the maintainer of the kernel self-test framework. Torvalds contended that there would never be consistency in the handling of patches because different kernel subsystems have, over time, adopted different development processes. Therefore, it was agreed upon that each kernel subsystem maintainer would document the rules for patch acceptance.
Development
Codebase
The kernel source code, a.k.a. source tree, is managed in the
Git
Git () is a distributed version control system that tracks versions of files. It is often used to control source code by programmers who are developing software collaboratively.
Design goals of Git include speed, data integrity, and suppor ...
version control system
Version control (also known as revision control, source control, and source code management) is the software engineering practice of controlling, organizing, and tracking different versions in history of computer files; primarily source code ...
also created by Torvalds.
, the 5.11 release of the Linux kernel had around 30.34 million lines of code. Roughly 14% of the code is part of the "core," including architecture-specific code, kernel code, and memory management code, while 60% is drivers.
Contributions
Contributions are submitted as patches, in the form of text messages on the
Linux kernel mailing list (LKML) (and often also on other mailing lists dedicated to particular subsystems). The patches must conform to a set of rules and to a formal language that, among other things, describes which lines of code are to be deleted and what others are to be added to the specified files. These patches can be automatically processed so that system administrators can apply them in order to make just some changes to the code or to incrementally upgrade to the next version.
Linux is distributed also in
GNU zip (gzip) and
bzip2
bzip2 is a free and open-source file compression program that uses the Burrows–Wheeler algorithm. It only compresses single files and is not a file archiver. It relies on separate external utilities such as tar for tasks such as handli ...
formats.
A developer who wants to change the Linux kernel writes and tests a code change. Depending on how significant the change is and how many subsystems it modifies, the change will either be submitted as a single patch or in multiple patches of
source code
In computing, source code, or simply code or source, is a plain text computer program written in a programming language. A programmer writes the human readable source code to control the behavior of a computer.
Since a computer, at base, only ...
. In case of a single subsystem that is maintained by a single maintainer, these patches are sent as e-mails to the maintainer of the subsystem with the appropriate mailing list in Cc. The maintainer and the readers of the mailing list will review the patches and provide feedback. Once the review process has finished the subsystem maintainer accepts the patches in the relevant
Git
Git () is a distributed version control system that tracks versions of files. It is often used to control source code by programmers who are developing software collaboratively.
Design goals of Git include speed, data integrity, and suppor ...
kernel tree. If the changes to the Linux kernel are bug fixes that are considered important enough, a pull request for the patches will be sent to Torvalds within a few days. Otherwise, a pull request will be sent to Torvalds during the next merge window. The merge window usually lasts two weeks and starts immediately after the release of the previous kernel version.
The Git kernel source tree names all developers who have contributed to the Linux kernel in the ''Credits'' directory and all subsystem maintainers are listed in ''Maintainers''.
As with many large open-source software projects, developers are required to adhere to the
Contributor Covenant, a
code of conduct
A code of conduct is a set of rules outlining the social norm, norms, rules, and responsibilities or proper practices of an individual party or an organization.
Companies' codes of conduct
A company code of conduct is a set of rules which is comm ...
intended to address harassment of minority contributors. Additionally, to prevent offense the use of
inclusive terminology within the source code is mandated.
Programming language
Linux is written in a special
C programming language
C (''pronounced'' '' – like the letter c'') is a general-purpose programming language. It was created in the 1970s by Dennis Ritchie and remains very widely used and influential. By design, C's features cleanly reflect the capabilities of ...
supported by
GCC, a compiler that extends the C standard in many ways, for example using
inline sections of code written in the
assembly language
In computing, assembly language (alternatively assembler language or symbolic machine code), often referred to simply as assembly and commonly abbreviated as ASM or asm, is any low-level programming language with a very strong correspondence bet ...
(in GCC's "AT&T-style" syntax) of the target architecture.
In September 2021, the GCC version requirement for compiling and building the Linux kernel increased from GCC 4.9 to 5.1, allowing the potential for the kernel to be moved from using C code based on the
C89 standard to using code written with the
C11 standard, with the migration to the standard taking place in March 2022, with the release of Linux 5.18.
Initial support for the
Rust
Rust is an iron oxide, a usually reddish-brown oxide formed by the reaction of iron and oxygen in the catalytic presence of water or air moisture. Rust consists of hydrous iron(III) oxides (Fe2O3·nH2O) and iron(III) oxide-hydroxide (FeO(OH) ...
programming language was added in Linux 6.1
which was released in December 2022, with later kernel versions, such as Linux 6.2 and Linux 6.3, further improving the support.
Coding style
Since 2002, code must adhere to the 21 rules comprising the ''Linux Kernel Coding Style.''
Versioning
As for most software, the kernel is versioned as a series of dot-separated numbers.
For early versions, the version consisted of three or four dot-separated numbers called ''major release'', ''minor release'' and ''revision.''
At that time, odd-numbered minor releases were for development and testing, while even numbered minor releases for production. The optional fourth digit indicated a patch level.
Development releases were indicated with a release candidate suffix (''-rc'').
The current versioning conventions are different. The odd/even number implying dev/prod has been dropped, and a major version is indicated by the first two numbers together. While the time-frame is open for the development of the next major, the -rcN suffix is used to identify the n'th release candidate for the next version.
For example, the release of the version 4.16 was preceded by seven 4.16-rcN (from -rc1 to -rc7). Once a stable version is released, its maintenance is passed to the ''stable team''. Updates to a stable release are identified by a three-number scheme (e.g., 4.16.1, 4.16.2, ...).
Toolchain
The kernel is usually built with the
GNU toolchain. The GNU C compiler, GNU cc, part of the
GNU Compiler Collection
The GNU Compiler Collection (GCC) is a collection of compilers from the GNU Project that support various programming languages, Computer architecture, hardware architectures, and operating systems. The Free Software Foundation (FSF) distributes ...
(GCC), is the default
compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
for mainline Linux. Sequencing is handled by GNU
make. The
GNU Assembler
The GNU Assembler, commonly known as gas or as, is the assembler developed by the GNU Project. It is the default back-end of GCC. It is used to assemble the GNU operating system and the Linux kernel, and various other software. It is a part o ...
(often called GAS or GNU as) outputs the
object file
An object file is a file that contains machine code or bytecode, as well as other data and metadata, generated by a compiler or assembler from source code during the compilation or assembly process. The machine code that is generated is kno ...
s from the GCC generated
assembly code. Finally, the
GNU Linker (GNU ld) produces a statically linked executable kernel file called . Both and are part of
GNU Binary Utilities (binutils).
GNU cc was for a long time the only compiler capable of correctly building Linux. In 2004,
Intel
Intel Corporation is an American multinational corporation and technology company headquartered in Santa Clara, California, and Delaware General Corporation Law, incorporated in Delaware. Intel designs, manufactures, and sells computer compo ...
claimed to have modified the kernel so that
its C compiler was also capable of compiling it.
There was another such reported success in 2009, with a modified 2.6.22 version.
Support for the Intel compiler has been dropped in 2023.
Since 2010, effort has been underway to build Linux with
Clang
Clang () is a compiler front end for the programming languages C, C++, Objective-C, Objective-C++, and the software frameworks OpenMP, OpenCL, RenderScript, CUDA, SYCL, and HIP. It acts as a drop-in replacement for the GNU Compiler ...
, an alternative compiler for the C language;
as of 12 April 2014, the official kernel could almost be compiled by Clang.
The project dedicated to this effort is named ''LLVMLinux'' after the
LLVM
LLVM, also called LLVM Core, is a target-independent optimizer and code generator. It can be used to develop a Compiler#Front end, frontend for any programming language and a Compiler#Back end, backend for any instruction set architecture. LLVM i ...
compiler infrastructure upon which Clang is built.
LLVMLinux does not aim to fork either Linux or the LLVM, therefore it is a meta-project composed of patches that are eventually submitted to the upstream projects. By enabling Linux to be compiled by Clang, developers may benefit from shorter compilation times.
In 2017, developers completed upstreaming patches to support building the Linux kernel with
Clang
Clang () is a compiler front end for the programming languages C, C++, Objective-C, Objective-C++, and the software frameworks OpenMP, OpenCL, RenderScript, CUDA, SYCL, and HIP. It acts as a drop-in replacement for the GNU Compiler ...
in the 4.15 release, having
backported support for
X86-64
x86-64 (also known as x64, x86_64, AMD64, and Intel 64) is a 64-bit extension of the x86 instruction set architecture, instruction set. It was announced in 1999 and first available in the AMD Opteron family in 2003. It introduces two new ope ...
and
AArch64
AArch64, also known as ARM64, is a 64-bit version of the ARM architecture family, a widely used set of computer processor designs. It was introduced in 2011 with the ARMv8 architecture and later became part of the ARMv9 series. AArch64 allows ...
to the 4.4, 4.9, and 4.14 branches of the stable kernel tree. Google's
Pixel 2
The Pixel 2 and Pixel 2 XL are a pair of Android (operating system), Android smartphones designed, developed, and marketed by Google as part of the Google Pixel product line. They collectively serve as the successors to the Pixel (1st generation) ...
shipped with the first
Clang
Clang () is a compiler front end for the programming languages C, C++, Objective-C, Objective-C++, and the software frameworks OpenMP, OpenCL, RenderScript, CUDA, SYCL, and HIP. It acts as a drop-in replacement for the GNU Compiler ...
built
Linux
Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
kernel,
though patches for
Pixel (1st generation) did exist.
2018 saw
ChromeOS
ChromeOS, sometimes styled as chromeOS and formerly styled as Chrome OS, is an operating system designed and developed by Google. It is derived from the open-source operating system and uses the Google Chrome web browser as its principal user ...
move to building kernels with
Clang
Clang () is a compiler front end for the programming languages C, C++, Objective-C, Objective-C++, and the software frameworks OpenMP, OpenCL, RenderScript, CUDA, SYCL, and HIP. It acts as a drop-in replacement for the GNU Compiler ...
by default,
while
Android made
Clang
Clang () is a compiler front end for the programming languages C, C++, Objective-C, Objective-C++, and the software frameworks OpenMP, OpenCL, RenderScript, CUDA, SYCL, and HIP. It acts as a drop-in replacement for the GNU Compiler ...
and
LLVM
LLVM, also called LLVM Core, is a target-independent optimizer and code generator. It can be used to develop a Compiler#Front end, frontend for any programming language and a Compiler#Back end, backend for any instruction set architecture. LLVM i ...
's linker LLD
required for kernel builds in 2019.
Google
Google LLC (, ) is an American multinational corporation and technology company focusing on online advertising, search engine technology, cloud computing, computer software, quantum computing, e-commerce, consumer electronics, and artificial ...
moved its production kernel used throughout its datacenters to being built with
Clang
Clang () is a compiler front end for the programming languages C, C++, Objective-C, Objective-C++, and the software frameworks OpenMP, OpenCL, RenderScript, CUDA, SYCL, and HIP. It acts as a drop-in replacement for the GNU Compiler ...
in 2020.
Today, the
ClangBuiltLinux' group coordinates fixes to both
Linux
Linux ( ) is a family of open source Unix-like operating systems based on the Linux kernel, an kernel (operating system), operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically package manager, pac ...
and
LLVM
LLVM, also called LLVM Core, is a target-independent optimizer and code generator. It can be used to develop a Compiler#Front end, frontend for any programming language and a Compiler#Back end, backend for any instruction set architecture. LLVM i ...
to ensure compatibility, both composed of members from ''LLVMLinux'' and having upstreamed patches from ''LLVMLinux''.
Debugging

As with any software, problems with the Linux kernel can be difficult to
troubleshoot
Troubleshooting is a form of problem solving, often applied to repair failed products or processes on a machine or a system. It is a logical, systematic search for the source of a problem in order to solve it, and make the product or process ope ...
. Common challenges relate to userspace vs. kernel space access, misuse of synchronization primitives, and incorrect hardware management.
An
oops is a non-fatal error in the kernel. After such an error, operations continue with suspect reliability.
A panic (generated by ) is a fatal error. After such an error, the kernel prints a message and halts the computer.
The kernel provides for ''debugging by printing'' via which stores messages in a circular buffer (overwriting older entries with newer). The system call provides for reading and clearing the message buffer and for setting the maximum ''log level'' of the messages to be sent to the console.
Kernel messages are also exported to userland through the ''/dev/kmsg'' interface.
The ''
ftrace'' mechanism allow for debugging by tracing. It is used for monitoring and debugging Linux at runtime and it can analyze user space latencies due to kernel misbehavior.
Furthermore, ''ftrace'' allows users to trace Linux at boot-time.
''kprobes'' and ''kretprobes'' can break into kernel execution (like debuggers in userspace) and collect information non-disruptively.
''kprobes'' can be inserted into code at (almost) any address, while kretprobes work at function return. ''uprobes'' have similar purposes but they also have some differences in usage and implementation.
With
KGDB Linux can be debugged in much the same way as userspace programs. KGDB requires an additional machine that runs
GDB and that is connected to the target to be debugged using a
serial cable or
Ethernet
Ethernet ( ) is a family of wired computer networking technologies commonly used in local area networks (LAN), metropolitan area networks (MAN) and wide area networks (WAN). It was commercially introduced in 1980 and first standardized in 198 ...
.
Change process
The Linux kernel project integrates new code on a rolling basis. Standard operating procedure is that software checked into the project must work and
compile without error.
Each kernel subsystem is assigned a maintainer who is responsible for reviewing patches against the kernel code standards and keeping a queue of patches that can be submitted to Torvalds within a merge window that is usually several weeks.
Patches are merged by Torvalds into the source code of the prior stable Linux kernel release, creating the release candidate (-rc) for the next stable release. Once the merge window is closed, only fixes to the new code in the development release are accepted. The -rc development release of the kernel goes through
regression testing
Regression testing (rarely, ''non-regression testing'') is re-running functional and non-functional tests to ensure that previously developed and tested software still performs as expected after a change. If not, that would be called a '' regr ...
and once it is considered stable by Torvalds and the subsystem maintainers, a new version is released and the development process starts over again.
Mainline Linux
The Git tree that contains the Linux kernel source code is referred to as mainline Linux. Every stable kernel release originates from the mainline tree, and is frequently published on
kernel.org. Mainline Linux has only solid support for a small subset of the many devices that run Linux. Non-mainline support is provided by independent projects, such as
Yocto or
Linaro, but in many cases the kernel from the device vendor is needed. Using a vendor kernel likely requires a
board support package.
Maintaining a kernel tree outside of mainline Linux has proven to be difficult.
''Mainlining'' refers to the effort of adding support for a device to the mainline kernel, while there was formerly only support in a fork or no support at all. This usually includes adding drivers or
device tree files. When this is finished, the feature or security fix is considered ''mainlined''.
Linux-like kernel
The maintainer of the stable branch,
Greg Kroah-Hartman
Greg Kroah-Hartman is a major Linux kernel developer. , he is the Linux kernel maintainer for the branch, the staging subsystem, USB, driver core, debugfs, kref, kobject, and the sysfs kernel subsystems, Userspace I/O (with Hans J. Koch), ...
, has applied the term ''Linux-like'' to
downstream kernel forks by vendors that add millions of lines of code to the mainline kernel. In 2019,
Google
Google LLC (, ) is an American multinational corporation and technology company focusing on online advertising, search engine technology, cloud computing, computer software, quantum computing, e-commerce, consumer electronics, and artificial ...
stated that it wanted to use the mainline Linux kernel in
Android so the number of kernel forks would be reduced. The term Linux-like has also been applied to the
Embeddable Linux Kernel Subset, which does not include the full mainline Linux kernel but a small modified subset of the code.
Linux forks

There are certain communities that develop kernels based on the official Linux. Some interesting bits of code from these
forks
In cutlery or kitchenware, a fork (from 'pitchfork') is a Eating utensil, utensil, now usually made of metal, whose long handle terminates in a head that branches into several narrow and often slightly curved tine (structural), tines with whic ...
that include
Linux-libre
According to the Free_Software_Foundation_Latin_America , Free Software Foundation Latin America, Linux-libre is a modified version of the Linux kernel that contains no binary blobs, Obfuscation (software), obfuscated code, or code released u ...
,
Compute Node Linux,
INK,
L4Linux,
RTLinux, and
User-Mode Linux (UML) have been merged into the mainline.
Some operating systems developed for mobile phones initially used heavily modified versions of Linux, including Google
Android,
Firefox OS
Firefox OS (project name: ''Boot to Gecko'', also known as ''B2G'') is a discontinued Open-source software, open-source operating system made for smartphones, tablet computers, smart TVs, and Matchstick TV, dongles designed by Mozilla and exte ...
, HP
webOS
webOS, also known as LG webOS, is a Linux kernel-based multitasking operating system for smart devices, such as smart TVs, that has also been used as a mobile operating system. Initially developed by Palm, Inc. (which was acquired by Hewlett ...
, Nokia
Maemo
Maemo is a Linux-based software platform originally developed by Nokia, now developed by the Free software movement, community, for smartphones and Internet tablets. The platform comprises both the Maemo operating system and Software development ...
and Jolla
Sailfish OS. In 2010, the Linux community criticised Google for effectively starting its own kernel tree:
Today Android uses a customized Linux
where major changes are implemented in device drivers, but some changes to the core kernel code is required. Android developers also submit patches to the official Linux that finally can boot the Android operating system. For example, a
Nexus 7 can boot and run the mainline Linux.
At a 2001 presentation at the
Computer History Museum
The Computer History Museum (CHM) is a computer museum in Mountain View, California. The museum presents stories and artifacts of Silicon Valley and the Information Age, and explores the Digital Revolution, computing revolution and its impact ...
, Torvalds had this to say in response to a question about distributions of Linux using precisely the same kernel sources or not:
Long-term support

The latest version and older versions are maintained separately. Most of the latest kernel releases were supervised by Torvalds.
The Linux kernel developer community maintains a stable kernel by applying fixes for
software bug
A software bug is a design defect ( bug) in computer software. A computer program with many or serious bugs may be described as ''buggy''.
The effects of a software bug range from minor (such as a misspelled word in the user interface) to sev ...
s that have been discovered during the development of the subsequent stable kernel. Therefore, www.kernel.org always lists two stable kernels. The next stable Linux kernel is released about 8 to 12 weeks later.
Some releases are
designated for
long-term support
Long-term support (LTS) is a product lifecycle management policy in which a stable release of computer software is maintained for a longer period of time than the standard edition. The term is typically reserved for open-source software, where it ...
as ''longterm'' with bug fix releases for two or more years.
Size
Some projects have attempted to reduce the size of the Linux kernel. One of them is
TinyLinux. In 2014, Josh Triplett started the -tiny source tree for a reduced size version.
Architecture and features

Even though seemingly contradictory, the Linux kernel is both monolithic and modular. The kernel is classified as a
monolithic kernel
A monolithic kernel is an operating system software architecture, architecture with the entire operating system running in kernel space. The monolithic model differs from other architectures such as the microkernel in that it alone defines a high ...
architecturally since the entire OS runs in kernel space. The design is modular since it can be assembled from
modules that in some cases are loaded and unloaded at runtime.
It supports features once only available in closed source kernels of non-free operating systems.
The rest of the article makes use of the UNIX and Unix-like operating systems convention of the
manual pages. The number that follows the name of a command, interface, or other feature specifies the section (i.e. the type of the OS' component or feature) it belongs to. For example refers to a system call, and refers to a userspace library wrapper.
The following is an overview of architectural design and of noteworthy features.
*
Concurrent computing
Concurrent computing is a form of computing in which several computations are executed '' concurrently''—during overlapping time periods—instead of ''sequentially—''with one completing before the next starts.
This is a property of a syst ...
and (with the availability of enough CPU cores for tasks that are ready to run) even
true parallel execution of many
processes at once (each of them having one or more
threads of execution) on
SMP and
NUMA architectures.
* Selection and configuration of hundreds of kernel features and drivers (using one of the family of commands before building),
modification of kernel parameters before
boot
A boot is a type of footwear. Most boots mainly cover the foot and the ankle, while some also cover some part of the lower calf. Some boots extend up the leg, sometimes as far as the knee or even the hip. Most boots have a heel that is clearl ...
(usually by inserting instructions into the lines of the
GRUB2 menu), and fine tuning of kernel behavior at run-time (using the interface to ).
* Configuration (again using the commands) and run-time modifications of the policies
(via , , and the family of syscalls) of the
task schedulers that allow
preemptive multitasking (both in
user mode
A modern computer operating system usually uses virtual memory to provide separate address spaces or regions of a single address space, called user space and kernel space. This separation primarily provides memory protection and hardware prote ...
and, since the 2.6 series, in
kernel mode); the
earliest eligible virtual deadline first scheduling (EEVDF) scheduler,
is the default scheduler of Linux since 2023 and it uses a
red-black tree which can search, insert and delete process information (
task struct) with
O(log n) time complexity
In theoretical computer science, the time complexity is the computational complexity that describes the amount of computer time it takes to run an algorithm. Time complexity is commonly estimated by counting the number of elementary operations ...
, where ''n'' is the number of runnable tasks.
* Advanced
memory management
Memory management (also dynamic memory management, dynamic storage allocation, or dynamic memory allocation) is a form of Resource management (computing), resource management applied to computer memory. The essential requirement of memory manag ...
with
paged virtual memory.
*
Inter-process communication
In computer science, interprocess communication (IPC) is the sharing of data between running Process (computing), processes in a computer system. Mechanisms for IPC may be provided by an operating system. Applications which use IPC are often cat ...
s and
synchronization
Synchronization is the coordination of events to operate a system in unison. For example, the Conductor (music), conductor of an orchestra keeps the orchestra synchronized or ''in time''. Systems that operate with all parts in synchrony are sa ...
mechanism.
* A
virtual filesystem on top of several concrete filesystems (
ext4
ext4 (fourth extended filesystem) is a journaling file system for Linux, developed as the successor to ext3.
ext4 was initially a series of backward-compatible extensions to ext3, many of them originally developed by Cluster File Systems for ...
,
Btrfs
Btrfs (pronounced as "better F S", "butter F S", "b-tree F S", or "B.T.R.F.S.") is a computer storage format that combines a file system based on the copy-on-write (COW) principle with a logical volume manager (distinct from Linux's LVM), d ...
,
XFS
XFS is a high-performance 64-bit journaling file system created by Silicon Graphics, Inc (SGI) in 1993. It was the default file system in SGI's IRIX operating system starting with its version 5.3. XFS was ported to the Linux kernel in 2001; a ...
,
JFS,
FAT32
File Allocation Table (FAT) is a file system developed for personal computers and was the default file system for the MS-DOS and Windows 9x operating systems. Originally developed in 1977 for use on floppy disks, it was adapted for use on ...
, and many more).
* Configurable I/O schedulers,
syscall that manipulates the underlying device parameters of special files (it is a non standard system call, since arguments, returns, and semantics depends on the device driver in question), support for POSIX asynchronous I/O
(however, because they scale poorly with multithreaded applications, a family of Linux specific I/O system calls (
) had to be created for the management of asynchronous I/O contexts suitable for concurrent processing).
*
OS-level virtualization (with
Linux-VServer
Linux-VServer is a virtual private server implementation that was created by adding operating system-level virtualization capabilities to the Linux kernel. It is developed and distributed as open-source software.
Details
The project was started ...
),
paravirtualization and
hardware-assisted virtualization
In computing, virtualization (abbreviated v12n) is a series of technologies that allows dividing of physical computing resources into a series of virtual machines, operating systems, processes or containers.
Virtualization began in the 1960s with ...
(with
KVM or
Xen, and using
QEMU
The Quick Emulator (QEMU) is a free and open-source emulator that uses dynamic binary translation to emulate a computer's processor; that is, it translates the emulated binary codes to an equivalent binary format which is executed by the mach ...
for hardware emulation);
On the Xen
hypervisor
A hypervisor, also known as a virtual machine monitor (VMM) or virtualizer, is a type of computer software, firmware or hardware that creates and runs virtual machines. A computer on which a hypervisor runs one or more virtual machines is called ...
, the Linux kernel provides support to build Linux distributions (such as openSUSE Leap and many others) that work as ''Dom0'', that are virtual machine host servers that provide the management environment for the user's virtual machines (''DomU'').
*I/O Virtualization with
VFIO and
SR-IOV. Virtual Function I/O (VFIO) exposes direct device access to user space in a secure memory (IOMMU) protected environment. With VFIO, a VM Guest can directly access hardware devices on the VM Host Server. This technique improves performance, if compared both to Full virtualization and Paravirtualization. However, with VFIO, devices cannot be shared with multiple VM guests. Single Root I/O Virtualization (SR-IOV) combines the performance gains of VFIO and the ability to share a device with several VM Guests (but it requires special hardware that must be capable to appear to two or more VM guests as different devices).
* Security mechanisms for
discretionary and
mandatory access control
In computer security, mandatory access control (MAC) refers to a type of access control by which a secured environment (e.g., an operating system or a database) constrains the ability of a ''subject'' or ''initiator'' to access or modify on an ' ...
(SELinux, AppArmor, POSIX
ACLs, and others).
* Several types of layered
communication protocol
A communication protocol is a system of rules that allows two or more entities of a communications system to transmit information via any variation of a physical quantity. The protocol defines the rules, syntax, semantics (computer science), sem ...
s (including the
Internet protocol suite
The Internet protocol suite, commonly known as TCP/IP, is a framework for organizing the communication protocols used in the Internet and similar computer networks according to functional criteria. The foundational protocols in the suite are ...
).
*
Asymmetric multiprocessing
An asymmetric multiprocessing (AMP or ASMP) system is a multiprocessor computer system where not all of the multiple interconnected central processing units (CPUs) are treated equally. For example, a system might allow (either at the hardware or op ...
via the
RPMsg subsystem.
Most
device driver
In the context of an operating system, a device driver is a computer program that operates or controls a particular type of device that is attached to a computer or automaton. A driver provides a software interface to hardware devices, enabli ...
s and kernel extensions run in
kernel space
A modern computer operating system usually uses virtual memory to provide separate address spaces or regions of a single address space, called user space and kernel space. This separation primarily provides memory protection and hardware prote ...
(
ring 0 in many
CPU architectures), with full access to the hardware. Some exceptions run in
user space
A modern computer operating system usually uses virtual memory to provide separate address spaces or regions of a single address space, called user space and kernel space. This separation primarily provides memory protection and hardware prote ...
; notable examples are filesystems based on
FUSE/CUSE, and parts of UIO.
Furthermore, the
X Window System
The X Window System (X11, or simply X) is a windowing system for bitmap displays, common on Unix-like operating systems.
X originated as part of Project Athena at Massachusetts Institute of Technology (MIT) in 1984. The X protocol has been at ...
and
Wayland, the windowing system and display server protocols that most people use with Linux, do not run within the kernel. Differently, the actual interfacing with
GPUs
A graphics processing unit (GPU) is a specialized electronic circuit designed for digital image processing and to accelerate computer graphics, being present either as a discrete video card or embedded on motherboards, mobile phones, personal ...
of
graphics card
A graphics card (also called a video card, display card, graphics accelerator, graphics adapter, VGA card/VGA, video adapter, display adapter, or colloquially GPU) is a computer expansion card that generates a feed of graphics output to a displa ...
s is an in-kernel subsystem called
Direct Rendering Manager
The Direct Rendering Manager (DRM) is a subsystem of the Linux kernel responsible for interfacing with Graphics processing unit, GPUs of modern video cards. DRM exposes an Application programming interface, API that user-space programs can use t ...
(DRM).
Unlike standard monolithic kernels, device drivers are easily configured as
modules, and loaded or unloaded while the system is running and can also be pre-empted under certain conditions in order to handle
hardware interrupt
In digital computers, an interrupt (sometimes referred to as a trap) is a request for the processor to ''interrupt'' currently executing code (when permitted), so that the event can be processed in a timely manner. If the request is accepted ...
s correctly and to better support
symmetric multiprocessing
Symmetric multiprocessing or shared-memory multiprocessing (SMP) involves a multiprocessor computer hardware and software architecture where two or more identical processors are connected to a single, shared main memory, have full access to all ...
.
By choice, Linux has no stable device driver
application binary interface
An application binary interface (ABI) is an interface exposed by software that is defined for in-process machine code access. Often, the exposing software is a library, and the consumer is a program.
An ABI is at a relatively low-level of a ...
.
Linux typically makes use of
memory protection
Memory protection is a way to control memory access rights on a computer, and is a part of most modern instruction set architectures and operating systems. The main purpose of memory protection is to prevent a process from accessing memory that h ...
and
virtual memory
In computing, virtual memory, or virtual storage, is a memory management technique that provides an "idealized abstraction of the storage resources that are actually available on a given machine" which "creates the illusion to users of a ver ...
and can also handle
non-uniform memory access
Non-uniform memory access (NUMA) is a computer storage, computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to the processor. Under NUMA, a processor can access its own local memory ...
,
however the project has absorbed
μClinux which also makes it possible to run Linux on
microcontroller
A microcontroller (MC, uC, or μC) or microcontroller unit (MCU) is a small computer on a single integrated circuit. A microcontroller contains one or more CPUs (processor cores) along with memory and programmable input/output peripherals. Pro ...
s without virtual memory.
The hardware is represented in the file hierarchy. User applications interact with device drivers via entries in the or directories.
Process information is mapped into the directory.
Interfaces

Linux started as a clone of UNIX, and aims toward
POSIX
The Portable Operating System Interface (POSIX; ) is a family of standards specified by the IEEE Computer Society for maintaining compatibility between operating systems. POSIX defines application programming interfaces (APIs), along with comm ...
and
Single UNIX Specification
The Single UNIX Specification (SUS) is a standard for computer operating systems, compliance with which is required to qualify for using the "UNIX" trademark. The standard specifies programming interfaces for the C language, a command-line shell, ...
compliance.
The kernel provides system calls and other interfaces that are Linux-specific. In order to be included in the official kernel, the code must comply with a set of licensing rules.
The Linux
application binary interface
An application binary interface (ABI) is an interface exposed by software that is defined for in-process machine code access. Often, the exposing software is a library, and the consumer is a program.
An ABI is at a relatively low-level of a ...
(ABI) between the kernel and the user space has four degrees of stability (stable, testing, obsolete, removed);
The
system call
In computing, a system call (syscall) is the programmatic way in which a computer program requests a service from the operating system on which it is executed. This may include hardware-related services (for example, accessing a hard disk drive ...
s are expected to never change in order to preserve
compatibility for
userspace programs that rely on them.
Loadable kernel module
A loadable kernel module (LKM) is an executable library that extends the capabilities of a running kernel, or so-called ''base kernel'', of an operating system. LKMs are typically used to add support for new hardware (as device drivers) and/or ...
s (LKMs), by design, cannot rely on a stable ABI.
Therefore, they must always be recompiled whenever a new kernel executable is installed in a system, otherwise they will not be loaded. In-tree drivers that are configured to become an integral part of the kernel executable (
vmlinux
vmlinux is a static library, statically linked executable file that contains the Linux kernel in one of the object file formats supported by Linux, which includes Executable and Linkable Format (ELF) and Common Object File Format (COFF). The v ...
) are statically linked by the build process.
There is no guarantee of stability of source-level in-kernel API
and, because of this,
device driver
In the context of an operating system, a device driver is a computer program that operates or controls a particular type of device that is attached to a computer or automaton. A driver provides a software interface to hardware devices, enabli ...
code, as well as the code of any other kernel subsystem, must be kept updated with kernel evolution. Any developer who makes an API change is required to fix any code that breaks as the result of their change.
Kernel-to-userspace API
The set of the
Linux kernel API that regards the interfaces exposed to user applications is fundamentally composed of UNIX and Linux-specific
system call
In computing, a system call (syscall) is the programmatic way in which a computer program requests a service from the operating system on which it is executed. This may include hardware-related services (for example, accessing a hard disk drive ...
s.
A system call is an entry point into the Linux kernel.
For example, among the Linux-specific ones there is the family of the system calls.
Most extensions must be enabled by defining the
_GNU_SOURCE
macro in a
header file
An include directive instructs a text file processor to replace the directive text with the content of a specified file.
The act of including may be logical in nature. The processor may simply process the include file content at the location of ...
or when the user-land code is being compiled.
System calls can only be invoked via assembly instructions that enable the transition from unprivileged user space to privileged kernel space in
ring 0. For this reason, the
C standard library
The C standard library, sometimes referred to as libc, is the standard library for the C (programming language), C programming language, as specified in the ISO C standard.International Organization for Standardization, ISO/International Electrote ...
(libC) acts as a wrapper to most Linux system calls, by exposing C functions that, if needed,
transparently enter the kernel which will execute on behalf of the calling process.
For system calls not exposed by libC, such as the
fast userspace mutex,
the library provides a function called which can be used to explicitly invoke them.
Pseudo filesystems (e.g., the
sysfs and
procfs filesystems) and
special files (e.g.,
/dev/random
,
/dev/sda
,
/dev/tty
, and many others) constitute another layer of interface to kernel data structures representing hardware or logical (software) devices.
Kernel-to-userspace ABI
Because of the differences existing between the hundreds of various implementations of the Linux OS, executable objects, even though they are compiled, assembled, and linked for running on a specific hardware architecture (that is, they use the
ISA of the target hardware), often cannot run on different Linux distributions. This issue is mainly due to distribution-specific configurations and a set of patches applied to the code of the Linux kernel, differences in system libraries, services (daemons), filesystem hierarchies, and environment variables.
The main standard concerning application and binary compatibility of Linux distributions is the
Linux Standard Base
The Linux Standard Base (LSB) was a joint project by several Linux distributions under the organizational structure of the Linux Foundation to standardize the software system structure, including the Filesystem Hierarchy Standard. LSB was based ...
(LSB).
However, the LSB goes beyond what concerns the Linux kernel, because it also defines the desktop specifications, the X libraries and Qt that have little to do with it.
The LSB version 5 is built upon several standards and drafts (POSIX, SUS, X/Open,
File System Hierarchy (FHS), and others).
The parts of the LSB more relevant to the kernel are the ''General ABI'' (gABI),
especially the
System V ABI and the
Executable and Linking Format (ELF),
and the ''Processor Specific ABI'' (psABI), for example the ''Core Specification for X86-64.''
The standard ABI for how x86_64 user programs invoke system calls is to load the syscall number into the ''rax'' register, and the other parameters into ''rdi'', ''rsi'', ''rdx'', ''r10'', ''r8'', and ''r9'', and finally to put the ''syscall'' assembly instruction in the code.
In-kernel API

There are several internal kernel APIs between kernel subsystems. Some are available only within the kernel subsystems, while a somewhat limited set of in-kernel symbols (i.e., variables, data structures, and functions) is exposed to dynamically loadable modules (e.g., device drivers loaded on demand) whether they're exported with the and macros
(the latter reserved to modules released under a GPL-compatible license).
Linux provides in-kernel APIs that manipulate data structures (e.g.,
linked list
In computer science, a linked list is a linear collection of data elements whose order is not given by their physical placement in memory. Instead, each element points to the next. It is a data structure consisting of a collection of nodes whi ...
s,
radix tree
In computer science, a radix tree (also radix trie or compact prefix tree or compressed trie) is a data structure that represents a space-optimized trie (prefix tree) in which each node that is the only child is merged with its parent. The resu ...
s,
red-black trees,
queues) or perform common routines (e.g., copy data from and to user space, allocate memory, print lines to the system log, and so on) that have remained stable at least since Linux version 2.6.
In-kernel APIs include libraries of low-level common services used by device drivers:
*
SCSI
Small Computer System Interface (SCSI, ) is a set of standards for physically connecting and transferring data between computers and peripheral devices, best known for its use with storage devices such as hard disk drives. SCSI was introduced ...
Interfaces and
libATArespectively, a peer-to-peer packet based communication protocol for storage devices attached to USB, SATA, SAS, Fibre Channel, FireWire, ATAPI device,
and an in-kernel library to support
TA host controllers and devices.
*
Direct Rendering Manager
The Direct Rendering Manager (DRM) is a subsystem of the Linux kernel responsible for interfacing with Graphics processing unit, GPUs of modern video cards. DRM exposes an Application programming interface, API that user-space programs can use t ...
(DRM) and
Kernel Mode Setting (KMS)for interfacing with GPUs and supporting the needs of modern 3D-accelerated video hardware,
and for setting screen resolution, color depth and refresh rate
*
DMA buffers (
DMA-BUF)for sharing buffers for hardware direct memory access across multiple device drivers and subsystems
*
Video4Linuxfor video capture hardware
*
Advanced Linux Sound Architecture
Advanced Linux Sound Architecture (ALSA) is a software framework and part of the Linux kernel that provides an application programming interface (API) for sound card device drivers.
Some of the goals of the ALSA project at its inception were ...
(ALSA)for sound cards
*
New APIfor
network interface controller
A network interface controller (NIC, also known as a network interface card, network adapter, LAN adapter and physical network interface) is a computer hardware component that connects a computer to a computer network.
Early network interface ...
s
*
mac80211 and cfg80211for wireless network interface controllers
In-kernel ABI
The Linux developers chose not to maintain a stable in-kernel ABI. Modules compiled for a specific version of the kernel cannot be loaded into another version without being recompiled.
Process management
Linux, as other
kernels, has the ability to manage processes including creating, suspending, resuming and terminating. Unlike other operating systems, the Linux kernel implements processes as a group of threads called tasks. If two tasks share the same , then they are called in the kernel terminology a task group. Each task is represented by a ''task_struct''
data structure
In computer science, a data structure is a data organization and storage format that is usually chosen for Efficiency, efficient Data access, access to data. More precisely, a data structure is a collection of data values, the relationships amo ...
. When a process is created it is assigned a globally unique identifier called ''PID'' and cannot be shared
A new process can be created by calling
family of system calls or
system call
In computing, a system call (syscall) is the programmatic way in which a computer program requests a service from the operating system on which it is executed. This may include hardware-related services (for example, accessing a hard disk drive ...
. Processes can be suspended and resumed by the kernel by sending signals like and . A process can terminate it's self by calling system call, or terminated by another process by sending signals like , or .
If the executable is dynamically linked to shared libraries, a
dynamic linker
In computing, a dynamic linker is the part of an operating system that loads and links the shared libraries needed by an executable when it is executed (at " run time"), by copying the content of libraries from persistent storage to RAM, fill ...
is used to find and load the needed objects, prepare the program to run and then run it.
The
Native POSIX Thread Library (NPTL)
provides the POSIX standard thread interface (''pthreads'') to userspace. The kernel isn't aware of processes nor threads but it is aware of ''tasks'', thus threads are implemented in userspace. Threads in Linux are implemented as ''tasks'' sharing resources, while if they aren't sharing called to be independent processes.
The kernel provides the (fast user-space mutex) mechanisms for user-space locking and synchronization.
The majority of the operations are performed in userspace but it may be necessary to communicate with the kernel using the system call.
As opposed to userspace threads described above, ''kernel threads'' run in kernel space.
They are threads created by the kernel it's self for specialized tasks, they are privileged like kernel and aren't bond to any process or application.
Scheduling
The Linux
process scheduler is modular, in the sense that it enables different scheduling classes and policies.
Scheduler classes are plugable scheduler algorithms that can be registered with the base scheduler code. Each class schedules different types of processes. The core code of the scheduler iterates over each class in order of priority and chooses the highest priority scheduler that has a schedulable entity of type struct sched_entity ready to run.
Entities may be threads, group of threads, and even all the processes of a specific user.
Linux provides both
user preemption as well as full
kernel preemption.
Preemption reduces
latency, increases responsiveness,
and makes Linux more suitable for desktop and
real-time applications.
For normal tasks, by default, the kernel uses the
Completely Fair Scheduler (CFS) class, introduced in version 2.6.23.
The scheduler is defined as a macro in a C header as
SCHED_NORMAL
. In other POSIX kernels, a similar policy known as
SCHED_OTHER
allocates CPU timeslices (i.e, it assigns absolute slices of the processor time depending on either predetermined or dynamically computed priority of each process). The Linux CFS does away with absolute timeslices and assigns a fair proportion of CPU time, as a function of parameters like the total number of runnable processes and the time they have already run; this function also takes into account a kind of weight that depends on their relative priorities (nice values).
With user preemption, the kernel scheduler can replace the current process with the execution of a
context switch
In computing, a context switch is the process of storing the state of a process or thread, so that it can be restored and resume execution at a later point, and then restoring a different, previously saved, state. This allows multiple processes ...
to a different one that therefore acquires the computing resources for running (CPU, memory, and more). It makes it according to the CFS algorithm (in particular, it uses a variable called for sorting entities and then chooses the one that has the smaller vruntime, - i.e., the schedulable entity that has had the least share of CPU time), to the active scheduler policy and to the relative priorities. With kernel preemption, the kernel can preempt itself when an interrupt handler returns, when kernel tasks block, and whenever a subsystem explicitly calls the schedule() function.
The kernel also contains two POSIX-compliant
real-time scheduling classes named
SCHED_FIFO
(realtime
first-in-first-out) and
SCHED_RR
(realtime
round-robin), both of which take precedence over the default class.
An additional scheduling policy known as
SCHED DEADLINE
, implementing the
earliest deadline first algorithm (EDF), was added in kernel version 3.14, released on 30 March 2014.
SCHED_DEADLINE
takes precedence over all the other scheduling classes.
Real-time
PREEMPT_RT
patches, included into the mainline Linux since version 2.6, provide a
deterministic scheduler, the removal of preemption and interrupt disabling (where possible), PI Mutexes (i.e., locking primitives that avoid priority inversion), support for
High Precision Event Timers (HPET), preemptive
read-copy-update (RCU), (forced) IRQ threads, and other minor features.
In 2023, Peter Zijlstra proposed replacing CFS with an
earliest eligible virtual deadline first scheduling (EEVDF) scheduler, to prevent the need for CFS "latency nice" patches. The EEVDF scheduler replaced CFS in version 6.6 of the Linux kernel.
Synchronization
The kernel has different causes of concurrency (e.g., interrupts, bottom halves, preemption of kernel and users tasks, symmetrical multiprocessing).
For protecting critical regions (sections of code that must be executed atomically), shared memory locations (like
global variable
In computer programming, a global variable is a variable with global scope, meaning that it is visible (hence accessible) throughout the program, unless shadowed. The set of all global variables is known as the ''global environment'' or ''global ...
s and other data structures with global scope), and regions of memory that are asynchronously modifiable by hardware (e.g., having the C
volatile
type qualifier), Linux provides a large set of tools. They consist of
atomic types (which can only be manipulated by a set of specific operators),
spinlocks,
semaphores,
mutexes,
and
lockless algorithms (e.g.,
RCUs).
Most lock-less algorithms are built on top of
memory barrier
In computing, a memory barrier, also known as a membar, memory fence or fence instruction, is a type of barrier instruction that causes a central processing unit (CPU) or compiler to enforce an ordering constraint on memory operations issued ...
s for the purpose of enforcing
memory ordering
Memory ordering is the order of accesses to computer memory by a CPU. Memory ordering depends on both the order of the instructions generated by the compiler at compile time and the execution order of the CPU at runtime. However, memory order is ...
and prevent undesired side effects due to
compiler optimization
An optimizing compiler is a compiler designed to generate code that is optimized in aspects such as minimizing program execution time, memory usage, storage size, and power consumption. Optimization is generally implemented as a sequence of op ...
.
PREEMPT_RT
code included in mainline Linux provide ''RT-mutexes'', a special kind of Mutex which do not disable preemption and have support for priority inheritance.
Almost all locks are changed into sleeping locks when using configuration for realtime operation.
Priority inheritance avoids priority inversion by granting a low-priority task which holds a contended lock the priority of a higher-priority waiter until that lock is released.
Linux includes a kernel lock validator called ''Lockdep''.
Interrupts
Although the management of
interrupt
In digital computers, an interrupt (sometimes referred to as a trap) is a request for the processor to ''interrupt'' currently executing code (when permitted), so that the event can be processed in a timely manner. If the request is accepted ...
s could be seen as a single job, it is divided into two. This split in two is due to the different time constraints and to the synchronization needs of the tasks whose the management is composed of. The first part is made up of an asynchronous
interrupt service routine that in Linux is known as the ''top half'', while the second part is carried out by one of three types of the so-called ''bottom halves'' (''softirq'', ''tasklets,'' and ''work queues'').
Linux interrupt service routines can be nested. A new IRQ can trap into a high priority ISR that preempts any other lower priority ISR.
Memory
Linux kernel manages both physical and virtual memory. Kernel divides physical memory into zones,
each zone has specific purpose.
* ''ZONE_DMA'': this zone is suitable for
DMA.
* ''ZONE_NORMAL'': for normal memory operations.
* ''ZONE_HIGHMEM'': part of physical that is only accessible to kernel using temporary mapping.
Those zones are most common others exist as the official documentation.
And when it comes to virtual memory Linux implements
virtual memory
In computing, virtual memory, or virtual storage, is a memory management technique that provides an "idealized abstraction of the storage resources that are actually available on a given machine" which "creates the illusion to users of a ver ...
with 4 or 5-level
page table
A page table is a data structure used by a virtual memory system in a computer to store mappings between virtual addresses and physical addresses. Virtual addresses are used by the program executed by the accessing process, while physical addr ...
s. The kernel is not
pageable (meaning it is always resident in physical memory and cannot be swapped to the disk) and there is no memory protection (no ''SIGSEGV'' signals, unlike in user space), therefore memory violations lead to instability and system crashes.
User memory is pageable by default, although paging for specific memory areas can be disabled with the
mlock()
system call
In computing, a system call (syscall) is the programmatic way in which a computer program requests a service from the operating system on which it is executed. This may include hardware-related services (for example, accessing a hard disk drive ...
family.
Page frame information is maintained in apposite data structures (of type ) that are populated immediately after boot and kept until shutdown, regardless of whether they are associated with virtual pages. The physical address space is divided into different zones, according to architectural constraints and intended use. NUMA systems with multiple memory banks are also supported.
Small chunks of memory can be dynamically allocated in kernel space via the family of
kmalloc()
APIs and freed with the appropriate variant of
kfree()
.
vmalloc()
and
kvfree()
are used for large virtually contiguous chunks.
alloc_pages()
allocates the desired number of entire pages.

The kernel used to include the SLAB, SLUB and SLOB allocators as configurable alternatives.
The SLOB allocator was removed in Linux 6.4 and the SLAB allocator was removed in Linux 6.8. The sole remaining allocator is SLUB, which aims for simplicity and efficiency,
is
PREEMPT_RT
compatible and was introduced in Linux 2.6.
Virtual filesystem
It is the subsystem that implements filesystem and everything related to filesystem. Linux supports numerous filesystems with different features and functionality. Because of that it was necessary to implement a generic filesystem that is independent from underlying filesystem.
Virtual filesystem exposes other linux subsystems or userspace,
APIs that abstract away the different implementation of underlying filesystem. VFS implements system calls like creat,open,read,write and close.
VFS implements generic super block and
Inode block that is independent from the one that the underlying filesystem has.
In this subsystem directories and files are represented by a
data structure
In computer science, a data structure is a data organization and storage format that is usually chosen for Efficiency, efficient Data access, access to data. More precisely, a data structure is a collection of data values, the relationships amo ...
(''struct file''). When
userspace requests access to a file it returned a
file descriptor
In Unix and Unix-like computer operating systems, a file descriptor (FD, less frequently fildes) is a process-unique identifier (handle) for a file or other input/output resource, such as a pipe or network socket.
File descriptors typically h ...
(non negative integer value) but in the kernel side it is ''struct file'' structure. That structure stores everything the kernel need to know about a file or directory.
sysfs and
procfs are virtual filesystems that expose
userspace programs runtime and hardware information. Those filesystems aren't present in disk and instead the kernel implements as a
callbacks or routines get called when those files accessed by userspace.
Supported architectures

While not originally designed to be
portable
Portable may refer to:
General
* Portable building, a manufactured structure that is built off site and moved in upon completion of site and utility work
* Portable classroom, a temporary building installed on the grounds of a school to provide a ...
,
Linux is now one of the most widely ported operating system kernels, running on a diverse range of systems from the
ARM architecture
ARM (stylised in lowercase as arm, formerly an acronym for Advanced RISC Machines and originally Acorn RISC Machine) is a family of reduced instruction set computer, RISC instruction set architectures (ISAs) for central processing unit, com ...
to IBM
z/Architecture
z/Architecture, initially and briefly called ESA Modal Extensions (ESAME), is IBM's 64-bit complex instruction set computer (CISC) instruction set architecture, implemented by its mainframe computers. IBM introduced its first z/Architecture ...
mainframe computer
A mainframe computer, informally called a mainframe or big iron, is a computer used primarily by large organizations for critical applications like bulk data processing for tasks such as censuses, industry and consumer statistics, enterprise ...
s. The first port was performed on the
Motorola 68000
The Motorola 68000 (sometimes shortened to Motorola 68k or m68k and usually pronounced "sixty-eight-thousand") is a 16/32-bit complex instruction set computer (CISC) microprocessor, introduced in 1979 by Motorola Semiconductor Products Sector ...
platform. The modifications to the kernel were so fundamental that Torvalds viewed the Motorola version as a
fork and a "Linux-like operating system".
However, that moved Torvalds to lead a major restructure of the code to facilitate porting to more computing architectures. The first Linux that, in a single source tree, had code for more than i386 alone, supported the
DEC Alpha AXP 64-bit platform.
Linux runs as the main operating system on
IBM
International Business Machines Corporation (using the trademark IBM), nicknamed Big Blue, is an American Multinational corporation, multinational technology company headquartered in Armonk, New York, and present in over 175 countries. It is ...
's
Summit
A summit is a point on a surface that is higher in elevation than all points immediately adjacent to it. The topographic terms acme, apex, peak (mountain peak), and zenith are synonymous.
The term (mountain top) is generally used only for ...
; , all of the world's
500 fastest supercomputers run some operating system based on the Linux kernel,
a big change from 1998 when the first Linux supercomputer got added to the list.
Linux has also been ported to various handheld devices such as
Apple's iPhone
The iPhone is a line of smartphones developed and marketed by Apple that run iOS, the company's own mobile operating system. The first-generation iPhone was announced by then–Apple CEO and co-founder Steve Jobs on January 9, 2007, at ...
3G and
iPod
The iPod is a series of portable media players and multi-purpose mobile devices that were designed and marketed by Apple Inc. from 2001 to 2022. The iPod Classic#1st generation, first version was released on November 10, 2001, about mon ...
.
Supported devices
In 2007, the LKDDb project has been started to build a comprehensive database of hardware and protocols known by Linux kernels.
The database is built automatically by static analysis of the kernel sources. Later in 2014, the Linux Hardware project was launched to automatically collect a database of all tested hardware configurations with the help of users of various Linux distributions.
Live patching
Rebootless updates can even be applied to the kernel by using
live patching technologies such as
Ksplice,
kpatch and
kGraft. Minimalistic foundations for live kernel patching were merged into the Linux kernel mainline in kernel version 4.0, which was released on 12 April 2015. Those foundations, known as ''livepatch'' and based primarily on the kernel's
ftrace functionality, form a common core capable of supporting hot patching by both kGraft and kpatch, by providing an
application programming interface
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standard that des ...
(API) for kernel modules that contain hot patches and an
application binary interface
An application binary interface (ABI) is an interface exposed by software that is defined for in-process machine code access. Often, the exposing software is a library, and the consumer is a program.
An ABI is at a relatively low-level of a ...
(ABI) for the userspace management utilities. However, the common core included into Linux kernel 4.0 supports only the
x86
x86 (also known as 80x86 or the 8086 family) is a family of complex instruction set computer (CISC) instruction set architectures initially developed by Intel, based on the 8086 microprocessor and its 8-bit-external-bus variant, the 8088. Th ...
architecture and does not provide any mechanisms for ensuring
function-level consistency while the hot patches are applied.
Security
Kernel bugs present potential security issues. For example, they may allow for
privilege escalation
Privilege escalation is the act of exploiting a Software bug, bug, a Product defect, design flaw, or a configuration oversight in an operating system or software application to gain elevated access to resource (computer science), resources that ar ...
or create
denial-of-service attack
In computing, a denial-of-service attack (DoS attack) is a cyberattack in which the perpetrator seeks to make a machine or network resource unavailable to its intended users by temporarily or indefinitely disrupting services of a host co ...
vectors. Over the years, numerous bugs affecting system security were found and fixed.
New features are frequently implemented to improve the kernel's security.
Capabilities(7) have already been introduced in the section about the processes and threads. Android makes use of them and
systemd
systemd is a software suite that provides an array of system components for Linux operating systems. The main aim is to unify service configuration and behavior across Linux distributions. Its primary component is a "system and service manage ...
gives administrators detailed control over the capabilities of processes.
Linux offers a wealth of mechanisms to reduce kernel attack surface and improve security which are collectively known as the
Linux Security Modules (LSM).
They comprise the
Security-Enhanced Linux
Security-Enhanced Linux (SELinux) is a Linux kernel security module that provides a mechanism for supporting access control security policies, including mandatory access controls (MAC).
SELinux is a set of kernel modifications and user-space to ...
(SELinux) module, whose code has been originally developed and then released to the public by the
NSA,
and
AppArmor among others. SELinux is now actively developed and maintained on
GitHub
GitHub () is a Proprietary software, proprietary developer platform that allows developers to create, store, manage, and share their code. It uses Git to provide distributed version control and GitHub itself provides access control, bug trackin ...
.
SELinux and AppArmor provide support to access control security policies, including
mandatory access control
In computer security, mandatory access control (MAC) refers to a type of access control by which a secured environment (e.g., an operating system or a database) constrains the ability of a ''subject'' or ''initiator'' to access or modify on an ' ...
(MAC), though they profoundly differ in complexity and scope.
Another security feature is the Seccomp BPF (SECure COMPuting with Berkeley Packet Filters) which works by filtering parameters and reducing the set of system calls available to user-land applications.
Critics have accused kernel developers of covering up security flaws, or at least not announcing them; in 2008, Torvalds responded to this with the following:
Linux distributions typically release security updates to fix vulnerabilities in the Linux kernel. Many offer
long-term support
Long-term support (LTS) is a product lifecycle management policy in which a stable release of computer software is maintained for a longer period of time than the standard edition. The term is typically reserved for open-source software, where it ...
releases that receive security updates for a certain Linux kernel version for an extended period of time.
Legal
Licensing terms
Initially, Torvalds released Linux under a license which forbade any commercial use.
This was changed in version 0.12 by a switch to the
GNU General Public License
The GNU General Public Licenses (GNU GPL or simply GPL) are a series of widely used free software licenses, or ''copyleft'' licenses, that guarantee end users the freedom to run, study, share, or modify the software. The GPL was the first ...
version 2 (GPLv2).
This license allows distribution and sale of possibly modified and unmodified versions of Linux but requires that all those copies be released under the same license and be accompanied by - or that, on request, free access is given to - the complete corresponding source code.
Torvalds has described licensing Linux under the GPLv2 as the "best thing I ever did".
The Linux kernel is licensed explicitly under
GNU General Public License
The GNU General Public Licenses (GNU GPL or simply GPL) are a series of widely used free software licenses, or ''copyleft'' licenses, that guarantee end users the freedom to run, study, share, or modify the software. The GPL was the first ...
version 2 only (GPL-2.0-only) with an explicit syscall exception (Linux-syscall-note),
without offering the licensee the option to choose any later version, which is a common GPL extension. Contributed code must be available under
GPL-compatible license.
There was considerable debate about how easily the license could be changed to use later GPL versions (including version 3), and whether this change is even desirable.
Torvalds himself specifically indicated upon the release of version 2.4.0 that his own code is released only under version 2.
However, the terms of the GPL state that if no version is specified, then any version may be used,
and
Alan Cox pointed out that very few other Linux contributors had specified a particular version of the GPL.
In September 2006, a survey of 29 key kernel programmers indicated that 28 preferred GPLv2 to the then-current GPLv3 draft. Torvalds commented, "I think a number of outsiders... believed that I personally was just the odd man out because I've been so publicly not a huge fan of the GPLv3."
This group of high-profile kernel developers, including Torvalds,
Greg Kroah-Hartman
Greg Kroah-Hartman is a major Linux kernel developer. , he is the Linux kernel maintainer for the branch, the staging subsystem, USB, driver core, debugfs, kref, kobject, and the sysfs kernel subsystems, Userspace I/O (with Hans J. Koch), ...
and
Andrew Morton, commented on mass media about their objections to the GPLv3.
They referred to clauses regarding
DRM/
tivoization
Tivoization () is the practice of designing hardware that incorporates software under the terms of a copyleft software license like the GNU General Public License (GNU GPL), but uses hardware restrictions or digital rights management (DRM) to p ...
, patents, "additional restrictions" and warned a
Balkanisation of the "Open Source Universe" by the GPLv3.
Torvalds, who decided not to adopt the GPLv3 for the Linux kernel, reiterated his criticism even years later.
Loadable kernel modules
It is debated whether some
loadable kernel module
A loadable kernel module (LKM) is an executable library that extends the capabilities of a running kernel, or so-called ''base kernel'', of an operating system. LKMs are typically used to add support for new hardware (as device drivers) and/or ...
s (LKMs) are to be considered
derivative work
In copyright law, a derivative work is an expressive creation that includes major copyrightable elements of a first, previously created original work (the underlying work). The derivative work becomes a second, separate work independent from ...
s under copyright law, and thereby whether or not they fall under the terms of the GPL.
In accordance with the license rules, LKMs using only a public subset of the kernel interfaces
are non-derived works, thus Linux gives system administrators the mechanisms to load out-of-tree binary objects into the kernel address space.
There are some out-of-tree loadable modules that make legitimate use of the ''dma_buf'' kernel feature.
GPL compliant code can certainly use it. However, a different possible use case would be
Nvidia Optimus that pairs a fast GPU with an Intel integrated GPU, where the Nvidia GPU writes into the
Intel
Intel Corporation is an American multinational corporation and technology company headquartered in Santa Clara, California, and Delaware General Corporation Law, incorporated in Delaware. Intel designs, manufactures, and sells computer compo ...
framebuffer when it is active. But, Nvidia cannot use this infrastructure because it necessitates bypassing a rule that can only be used by LKMs that are also GPL.
Alan Cox replied on
LKML
The Linux kernel mailing list (LKML) is the main electronic mailing list for Linux kernel development, where the majority of the announcements, discussions, debates, and flame wars over the kernel take place. Many other mailing lists exist to d ...
, rejecting a request from one of Nvidia's engineers to remove this technical enforcement from the API.
Torvalds clearly stated on the LKML that "
claim that binary-only kernel modules ARE derivative "by default"'".
On the other hand, Torvalds has also said that "
negray area in particular is something like a driver that was originally written for another operating system (i.e., clearly not a derived work of Linux in origin). THAT is a gray area, and _that_ is the area where I personally believe that some modules may be considered to not be derived works simply because they weren't designed for Linux and don't depend on any special Linux behaviour".
Proprietary graphics drivers, in particular, are heavily discussed.
Whenever proprietary modules are loaded into Linux, the kernel marks itself as being "tainted",
and therefore bug reports from tainted kernels will often be ignored by developers.
Firmware binary blobs
The official kernel, that is the Linus git branch at the kernel.org repository, contains binary blobs released under the terms of the GNU GPLv2 license.
Linux can also search filesystems to locate binary blobs, proprietary firmware, drivers, or other executable modules, then it can load and link them into kernel space.
When it is needed (e.g., for accessing boot devices or for speed) firmware can be built-in to the kernel, this means building the firmware into
vmlinux
vmlinux is a static library, statically linked executable file that contains the Linux kernel in one of the object file formats supported by Linux, which includes Executable and Linkable Format (ELF) and Common Object File Format (COFF). The v ...
; however this is not always a viable option for technical or legal issues (e.g., it is not permitted to do this with firmware that is non-GPL compatible, although this is quite common nonetheless).
Trademark
Linux is a registered
trademark
A trademark (also written trade mark or trade-mark) is a form of intellectual property that consists of a word, phrase, symbol, design, or a combination that identifies a Good (economics and accounting), product or Service (economics), service f ...
of Linus Torvalds in the United States, the European Union, and some other countries.
A legal battle over the trademark began in 1996, when William Della Croce, a lawyer who was never involved in the development of Linux, started requesting licensing fees for the use of the word ''Linux''. After it was proven that the word was in common use long before Della Croce's claimed first use, the trademark was awarded to Torvalds.
Removal of Russian maintainers
In October 2024, kernel developer
Greg Kroah-Hartman
Greg Kroah-Hartman is a major Linux kernel developer. , he is the Linux kernel maintainer for the branch, the staging subsystem, USB, driver core, debugfs, kref, kobject, and the sysfs kernel subsystems, Userspace I/O (with Hans J. Koch), ...
removed some kernel developers whose email addresses suggested a connection to Russia from their roles as maintainers.
Linus Torvalds
Linus Benedict Torvalds ( , ; born 28 December 1969) is a Finnish software engineer who is the creator and lead developer of the Linux kernel. He also created the distributed version control system Git.
He was honored, along with Shinya Yam ...
responded that he did not support Russian aggression and would not revert the patch, insinuating that opponents of the patch were Russian trolls. James Bottomley, a kernel developer, issued an apology for the handling of the situation and clarified that the action was a consequence of U.S. sanctions against Russia.
See also
*
*
*
*
*
*
*
*
Notes
References
Further reading
*
*
*
*
*
*
*
*
*
*
*
*
*
External links
*
**
/kernel.org/doc/ Linux kernel documentation index**
/kernel.org/doc/man-pages/ Linux kernel man pages*
Kernel bugzilla an
regressionsfor each recent kernel version
Kernel Newbies a source of various kernel-related information
Kernel coverage at LWN.net an authoritative source of kernel-related information
Bootlin's Elixir Cross Referencer a Linux kernel source code cross-reference
*
Virtual filesystem linux generic filesystem implementation
{{DEFAULTSORT:Linux Kernel
Finnish inventions
Free and open-source software
Free software programmed in C
Free system software
Linus Torvalds
Monolithic kernels
Operating systems
Software using the GNU General Public License
Unix variants