The Linux kernel is almost 25 years old. If I had to come up with the short version on the development history of the Linux kernel since 1991(its inception date), and in partcular since 1994 (1.0.0) until today, well I couldn't. The best I could do short of reading every single kernel release notes would be to provide the following which are the general release features added to the kernel up to version 3.11 (notes and links omitted):
- Version 1.0 of the Linux kernel was released on 14 March 1994. This release of the Linux kernel only supported single-processor i386-based computer systems. Portability became a concern, and so version 1.2 (released 7 March 1995) gained support for computer systems using processors based on the Alpha, SPARC, and MIPS architectures.
- Version 2.0 was released 9 June 1996. There were 41 releases in the series. The major feature of 2.0 was SMP support (that is, support for multiple processors in a single system) and support for more types of processors.
- Version 2.2 (released 26 January 1999) removed the global spinlock and provided improved SMP support, and added support for the m68k and PowerPC architectures as well as new file systems (including read-only support for Microsoft's NTFS).
- Version 2.4.0, released on 4 January 2001, contained support for ISA Plug and Play, USB, and PC Cards. It also included support for the PA-RISC processor from Hewlett-Packard. Development for 2.4.x changed a bit in that more features were made available throughout the duration of the series, including: support for Bluetooth, Logical Volume Manager (LVM) version 1, RAID support, InterMezzo and ext3 file systems.
- Version 2.6.0 was released on 18 December 2003. The development for 2.6.x changed further towards including new features throughout the duration of 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, integration of ALSA into the mainline kernel sources, support for up to 232 users (up from 216), support for up to 229 process IDs (64-bit only, 32-bit arches still limited to 215), substantially increased the number of device types and the number of devices of each type, improved 64-bit support, support for file systems which support file sizes of up to 16 terabytes, 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 support, and considerably more. Also notable are the addition of several file systems throughout the 2.6.x releases: FUSE, JFS, XFS, ext4 and more. Details on the history of the 2.6 kernel series can be found in the ChangeLog files on the 2.6 kernel series source code release area of kernel.org.
- Version 3.0 was released on 22 July 2011. Torvalds announced that the big change was, "NOTHING. Absolutely nothing." 30 May 2011 saw Torvalds announce, "...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 week development process, it would be released near the 20th anniversary of Linux.
- In December 2012, Torvalds decided to reduce kernel complexity by removing support for i386 processors, making the 3.7 kernel series the last one still supporting the original processor. The same series unified support for the ARM processor.
- Version 3.11, released on 2 September 2013, adds many new features such as new O_TMPFILE flag for open(2) to reduce temporary file vulnerabilities, experimental AMD Radeon dynamic power management, low-latency network polling, and zswap (compressed swap cache).
I could also add that for many years now the Linux Foundation has been reporting on the kernel development. These are the 2012-2013 Kernel Development Highlights:
- Almost 92,000 changesets have been merged from 3,738 individual developers representing 536 corporations (that we know about).
- A vast array of important new features has been merged into the mainline. These include full tickless operation, user namespaces, KVM and Xen virtualization for ARM, per-entity load tracking in the scheduler, user-space checkpoint/restart, 64-bit ARM architecture support, the F2FS flash-oriented filesystem, many networking improvements aimed at the latency and bufferbloat problems, two independent subsystems providing fast caching for block storage devices, and much more.
- The longstanding squabble over Android-specific kernel features has faded completely into the background. The much-discussed "wakelocks" feature has been quietly replaced by a different mainline solution which is used in the latest Android devices.
- The use of automated tools to find bugs in development kernels has increased significantly during this period. Tools like the "trinity" fuzz tester and the zero-day build-and-boot system are finding large numbers of bugs in pre-release kernels, shortening the development cycle and enabling the community to deliver higher-quality releases.
- Contributions from the mobile and embedded industries continue to increase. Linaro, Samsung, and TI, for example, together contributed 4.4% of the changes in the previous version of this paper; for the period up to 3.10, they contributed almost 11% of all changes.
- The kernel project participated in the Outreach Program for Women for the first time, leading to 41 applications for 7 available positions. During the application process, 374 patches were submitted to the kernel, and over 1/3 of those patches were accepted in the 3.10 kernel release. The intern process is now underway, but the results of that will not start showing up until future kernel releases.
Furthermore, quantifying what is happening to the kernel is not very hard as we have metrics beyond the individual commits. For instance, we know the 1.0.0 kernel in 1994 had 176 250 lines of code; and we know a contemporary kernel like 3.10 has 15 803 499 lines of code. Considerably more. The kernel release frequency has increased(63 days for 3.10), as well as the rate of change(9 commits per hour or more as we speak). To quote the Linux Foundation:
The ability to sustain this rate of change for years is unprecedented in any previous public software project.
But all of this brings little insight in my opinion. Therefore, I would ask:
- Can this quarter of a century evolution be summarily qualified beyond the linear addition of all the listed features that make up this kernel over time?
- And does this bring any insight as to what the Linux kernel is about, or where it's going? After 25 years of development some conclusions can certainly be drawn about that?
Looking for an abstract answer in layman's terms which says it all without resorting to saying everything.