Open-Source Wikis

/

Linux

/

Lore

torvalds/linux

Lore

The Linux kernel is one of the longest-lived continuously developed code bases in software, and a few of its files have been more or less in place for over three decades. This page is a narrative timeline of how the source tree got the way it is, and which features came and went along the way. It is condensed; the full history is on lore.kernel.org and in Documentation/.

Dates use the original announcement or merge month wherever possible.

Eras

The bedrock era (Aug 1991 – early 1995)

Linus Torvalds posted the famous "Hello everybody out there using minix" message in August 1991, and the first public release (0.01) followed in September 1991. This era predates git by 14 years; the version-control history in this repository starts in April 2005. The earliest files still present in the tree, including the entry into the C kernel proper at init/main.c and process-related code in kernel/, were laid down here. The Tanenbaum–Torvalds debate (Jan 1992) about microkernels vs monolithic kernels happened during this period and arguably set the architectural direction for the rest of the project's life.

The 2.x stabilization era (1996 – 2003)

2.0 (Jun 1996) introduced SMP. 2.2 (Jan 1999) and 2.4 (Jan 2001) hardened the kernel for production server workloads. The Linux Standard Base, Linus's elevation to full-time work on the kernel, the rise of distributions, and the early enterprise adoption all happened in this era. The split between 2.4 (stable) and 2.5 (development) trees was the practical model.

The git era begins (Apr 2005 – Jul 2011)

After the BitKeeper licensing dispute, Linus wrote git in April 2005. Commit 1da177e4c3f4 ("Linux-2.6.12-rc2") is the import point — every commit in this repository hangs off it. The 2.6.x series ran from December 2003 to July 2011 and dropped the stable/development split: every release became a stable release with -rc candidates. Major additions in this era: kernel preemption, NPTL, /sys, the cfs scheduler (Oct 2007), kernel-based virtualization (KVM, 2007), cpuset and the early cgroups, the slub allocator, KMS in the GPU stack, the scaling-out of the block layer.

The 3.x and 4.x release-train era (Jul 2011 – Mar 2019)

Linus moved to 3.0 (Jul 2011) without a major architectural break — the bump was symbolic. The 3.x and 4.x series are characterized by ever-more-incremental release cadence: each merge window opens for ~2 weeks, then 6–8 -rc weeks. Notable arrivals in this stretch: nftables (3.13, Jan 2014), overlayfs (3.18, Dec 2014), eBPF beyond classic packet filtering (3.18 onward, with the verifier maturing in 4.x), io_uring (5.1, May 2019, just past the boundary), the unification of cgroup v2.

The eBPF, scheduler-rework, Rust era (Mar 2019 – present)

The 5.x series saw io_uring arrive (5.1, May 2019), eBPF transform from a packet filter into a general-purpose programmability platform, and many block and filesystem features land. 6.0 (Oct 2022) and 6.1 (Dec 2022) were notable for the first Rust patches landing in 6.1. The Earliest Eligible Virtual Deadline First (EEVDF) scheduler replaced CFS as the default fair-scheduling class in 6.6 (Oct 2023). sched_ext (BPF-programmable schedulers) merged in 6.12 (Nov 2024). The 7.x series (this snapshot is on 7.1-rc1) continues this pattern with further Rust expansion (rust/kernel/), more sched_ext development, and steady churn across all subsystems.

Longest-standing features

Feature First appeared Where it lives today Notes
The start_kernel() boot path 1991 init/main.c Has been refactored many times but is recognizable from earliest releases.
The buddy page allocator Pre-1.0 mm/page_alloc.c Same algorithm class; modern code adds NUMA, zoning, compaction, fragmentation control.
The VFS abstraction (inode/dentry/super_block/file) 1.x era fs/ Layout has been stable for decades; the dcache went through major rework in 2.6.x.
task_struct 1991 include/linux/sched.h Has grown enormously but is still the same fundamental object.
The system-call ABI 1991 onward UAPI under include/uapi/ Linus's "we don't break user space" rule means decades-old programs still run.

Major rewrites

What When What replaced what Why
BitKeeper → git Apr 2005 Linus wrote git as a replacement after the BK license was withdrawn from kernel use. Supply-chain control.
Big Kernel Lock removed 2.6.39 (May 2011) Replaced piecemeal by per-subsystem locks. Scalability on large SMP systems.
O(1) scheduler → CFS 2.6.23 (Oct 2007) Ingo Molnár's Completely Fair Scheduler replaced the heuristic-driven O(1) scheduler. Fairness, predictability.
CFS → EEVDF (default) 6.6 (Oct 2023) Earliest Eligible Virtual Deadline First became the new default fair-scheduling class. Latency for interactive workloads.
classic BPF → eBPF 3.x – 5.x Generalized the BPF VM into a 64-bit register machine with maps, helpers, and a verifier. Programmability beyond filtering.
request_queueblk-mq 3.13 (Jan 2014) onward Multi-queue replaced the single-request-queue block layer. Multi-core SSDs.
iptables/nftables 3.13 (Jan 2014) nftables is the modern replacement, though iptables still ships and is widely used. Cleaner data model.
aioio_uring 5.1 (May 2019) io_uring is the modern asynchronous I/O interface. Real async, lower syscall cost.
C-only → C + Rust 6.1 (Dec 2022) Rust support landed; growing in 7.x. Type safety, memory safety in new code.

Deprecated or retired features

  • Big Kernel Lock (BKL, lock_kernel()) — finally removed in 2.6.39 after years of fine-grained locking work.
  • /proc for everything — much pushed to sysfs, debugfs, tracefs, bpf, and netlink as cleaner replacements.
  • devfs — deprecated in 2.6.x, removed; replaced by udev/devtmpfs.
  • OSS sound drivers — replaced by ALSA in sound/. OSS compatibility is provided in user space.
  • a.out binaries — removed years ago; ELF is the only supported binary format on most archs.
  • CodeRefactor: classic NIC drivers — many old drivers move to drivers/staging/ first and are eventually deleted as hardware ages out.

Growth trajectory

  • Top-level directory count was small in the 0.x and 1.x eras (init/, kernel/, mm/, fs/, lib/, plus arch and drivers). It has grown to 18 top-level source directories today.
  • drivers/ alone is now ~1.2 GB of source — well over half the tree by size.
  • New top-level additions in living memory: virt/ (KVM, 2.6.20-ish), block/ (split from drivers/block over time), net/ (long ago), tools/ (2.6.x), samples/, rust/ (6.1, Dec 2022), io_uring/ (split from fs/ into its own top-level directory in 6.1).
  • Architecture support has consolidated: many obscure architectures have been removed (Blackfin, AVR32, FRV, Tile, M32R, etc.), while ARM64 and RISC-V have grown to be top-tier.
  • By the numbers — current snapshot.
  • Fun facts — trivia and surprises.
  • How to contribute — how the patch flow actually works.
  • Documentation/process/howto.rst and Documentation/process/development-process.rst — the in-tree development guide.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

Lore – Linux wiki | Factory