The Linux kernel is the lowest level of software running on a Linux system. It is charged with managing the hardware, running user programs, and maintaining the overall security and integrity of the whole system. It is this kernel, which after its initial release by Linus Torvalds in 1991, jump-started the development of Linux as a whole. The kernel is a relatively small part of the software on a full Linux system (many other large components come from the GNU project, the GNOME and KDE desktop projects, the X.org project, and many other sources), but it is the core which determines how well the system will work and is the piece which is truly unique to Linux.
The Linux kernel is an interesting project to study for a number of reasons. It is one of the largest individual components on almost any Linux system. It also features one of the fastest-moving development processes and involves more developers than any other open source project. This paper looks at how that process works, focusing on nearly three years of kernel history as represented by the 2.6.11 through 2.6.24 releases.
Development Model
With the 2.6.x series, the Linux kernel has moved to a relatively strict, time-based release model. At the 2005 Kernel Developer Summit in Ottawa, Canada, it was decided that kernel releases would happen every 2-3 months, with each release being a "major" release in that it includes new features and internal API changes.
The quick release cycle was chosen as a way to get new features out to users in a stable form with minimal delay. As a result, new code – features, device drivers, etc. – is available in a stable kernel within a few months of its completion, minimizing or eliminating the need for distributors to backport developmental code into stable releases. So the kernels released by distributors contain many fewer distribution-specific modifications, yielding higher stability and fewer differences between distributions.
Each 2.6.x release is a stable release, in that it is made available when the list of outstanding bugs is made as small as possible. For problems which turn up after a kernel release, the "-stable" branch exists as a way to quickly get fixes out to the community. This is best explained with the diagram shown in Figure 1.
Figure 1 – Linux Kernel Release Cycle
The kernel team released the 2.6.19 kernel as a stable release. Then the developers started working on new features and started releasing the release candidate versions as development kernels so that people could help test and debug the changes. After everyone agreed that the development release was stable enough, it was released as the 2.6.20 kernel.
While the development of new features was happening, the 2.6.19.1, 2.6.19.2 and other stable kernel versions were released, containing bug fixes and security updates.
This paper focuses exclusively on the main 2.6.x releases, to the exclusion of the stable updates. Those updates are small, and, in any case, the design of the development process requires that fixes accepted for -stable also be accepted into the mainline for the next major release.