From UNIX to Linux: The History That Explains Everything
Exit

Lesson 4 of 7 · History

1991 — Linus Torvalds and the Linux kernel

35 min Ubuntu 24.04

Objective

Learn how a student wrote, almost as a game, the kernel that now runs most of the world's servers, and understand how this kernel is developed and numbered. You will be able to read a version such as 5.14.0-427.el9.x86_64.

Key points

  • In 1991, Linus Torvalds, a student at the University of Helsinki, wrote a kernel for his PC, inspired by Minix.
  • He announced it on 25 August 1991; version 0.01 came out in September 1991.
  • In 1992, Linux moved to the GPL licence: together with the GNU tools, an entirely free system finally existed.
  • Linux 1.0 came out in March 1994. Today, thousands of developers, employed by hundreds of companies, contribute to it.
  • A new version comes out roughly every 9 to 10 weeks; some are maintained for a long time: these are the LTS versions.

1. What is the kernel?

The kernel is the central program of the system. It starts first and stops only when the machine shuts down. It is the link between programs and hardware:

   You ──► bash, ls, nginx, mysql…         (the programs)
                   │  "system calls": read, write, open, create a process
                   ▼
            ┌──────────────┐
            │ LINUX KERNEL │  memory, processes, disks, network, drivers
            └──────────────┘
                   │
                   ▼
        processor, memory, disks, network card      (the hardware)

When ls wants to read a directory, it does not talk to the disk: it asks the kernel. This is what allows a thousand programs to share the same machine without getting in each other's way.

2. Minix, the students' UNIX (1987)

At the end of the 1980s, UNIX was expensive and its code was no longer freely distributed. Professor Andrew Tanenbaum, at the Vrije Universiteit Amsterdam, wrote a small educational UNIX for his students: Minix (1987). It came with his textbook on operating systems, source code included.

Minix had two limits: its licence did not allow it to be modified and redistributed freely, and Tanenbaum wanted to keep it simple, for teaching. He refused many improvements proposed by its users.

3. 1991: a student in Helsinki

Linus Torvalds was born in 1969 in Helsinki. In January 1991, he bought a PC with an Intel 386 processor. He installed Minix on it and wanted to understand how this new processor worked. He started with a small program that displayed "A"s and "B"s alternately, to test switching from one task to another. Then a terminal emulator to connect to the university. Then a disk driver… and he realised that he was writing a kernel.

On 25 August 1991, he posted a message on the Usenet forum comp.os.minix. In it, he announced a free operating system for 386 PCs, specifying that it was "just a hobby, won't be big and professional like gnu". He asked readers what they would like to find in it.

Version 0.01 was uploaded to a University of Helsinki server (ftp.funet.fi) in September 1991. Linus wanted to call it Freax (free + freak + x); the server administrator, Ari Lemmke, put the files in a directory named linux. The name stuck.

From this very first version, Linux ran bash and gcc, two GNU tools (lesson 0.3).

4. 1992: the GPL and the dispute with Tanenbaum

Linus's first licence prohibited any commercial use. In early 1992, with version 0.12, he announced the move to the GPL (version 2). From then on, anyone could use, modify and redistribute Linux, provided they shared their modifications. With the Linux kernel and the GNU tools, a complete free system finally existed. Linus later said that choosing the GPL was one of the best decisions he ever made.

In January 1992, Tanenbaum posted a message on the same forum entitled "LINUX is obsolete". His two criticisms:

Tanenbaum's criticism History's answer
Linux is a monolithic kernel (the whole kernel in a single block), an outdated design in his view; the future belonged to microkernels Linux remained monolithic, but modular: drivers are loaded on demand (lsmod, modprobe)
Linux is too tied to the 386 processor and will not be portable Linux runs today on x86, ARM, POWER, IBM Z, RISC-V… more platforms than any other system

This courteous but lively debate has remained famous. It shows that Linux was not the "best" system on paper; it won because it was free, practical and open to contributions.

5. The kernel grows (1992-2011)

The timing was ideal: BSD was blocked by its lawsuit (lesson 0.2), GNU's Hurd was not progressing, and the Internet was arriving in universities. Hundreds of developers sent patches to Linus.

Version Date Notable new feature
0.01 September 1991 First public version
0.12 early 1992 Move to the GPL
1.0 March 1994 First version considered stable; TCP/IP networking
2.0 June 1996 Multiple processors (SMP); arrival of the mascot Tux, the penguin
2.2 January 1999 Better multiprocessor support
2.4 January 2001 USB, large amounts of memory: Linux enters the enterprise
2.6 December 2003 New development model; kernel of RHEL 5 and RHEL 6 (2.6.32)
3.0 July 2011 Number change for Linux's 20th anniversary, with no technical break

In 2005, a licensing conflict deprived the developers of the tool they used to manage the code (BitKeeper). In a few weeks, Linus wrote his own tool: Git. Today, Git is used by almost every developer in the world (GitHub, GitLab…). It is Linus's second major invention.

6. How the kernel is developed today

The Linux kernel is probably the largest collaborative project in the history of software: more than 30 million lines of code, thousands of contributors for each version, most of them paid by their employer (Intel, Google, Red Hat, AMD, Meta, Huawei, SUSE, Linaro…).

A regular cycle

 version 6.N released
   │
   ├── 2 weeks: the "merge window"
   │      new features prepared by the maintainers enter the kernel
   │
   ├── 6.(N+1)-rc1, rc2, … rc7 (sometimes rc8): one "release candidate" per week
   │      no more new features, only bug fixes
   │
   └── about 9 to 10 weeks later: version 6.(N+1) released

This gives 5 to 6 versions per year. There is no fixed date: Linus releases when the version is ready.

A pyramid of maintainers

Linus does not review everything himself. The kernel is divided into subsystems (networking, file systems, graphics drivers, USB, security…). Each has its maintainers, listed in the MAINTAINERS file of the source code. Contributors send their patches by e-mail to the right maintainer; the maintainer reviews them, tests them, then passes them up. Linus merges the work of the top-level maintainers.

Mainline, stable, longterm

On kernel.org, you will see several kinds of versions:

Category What it is Maintained by
mainline Linus's development version (e.g. 6.N-rc3) Linus Torvalds
stable The latest released version, with fixes (e.g. 6.N.4) until the next one Greg Kroah-Hartman and the stable team
longterm (LTS) Usually the last version of each year, fixed for several years Volunteer maintainers

Since 2023, new LTS versions on kernel.org are announced for about two years (compared with six years for some before), due to a lack of resources to maintain more. Projects such as the CIP (Civil Infrastructure Platform) maintain certain versions for ten years for industry.

The first number means nothing technical: Linus changes it when the second one becomes too large (3.0 in 2011, 4.0 in 2015, 5.0 in 2019, 6.0 in 2022…).

7. Distribution kernels

Enterprise distributions do not follow the latest kernel.org version. They choose a version at launch and maintain it themselves for the whole life of the product, adding security fixes and even new features (this is called "backporting").

Distribution Base kernel
RHEL 6 / CentOS 6 2.6.32
RHEL 7 / CentOS 7 3.10
RHEL 8 / Rocky 8 / Alma 8 4.18
RHEL 9 / Rocky 9 / Alma 9 5.14
RHEL 10 / Alma 10 6.12
Debian 12 "bookworm" 6.1
Debian 13 "trixie" 6.12
Ubuntu 22.04 LTS 5.15
Ubuntu 24.04 LTS 6.8

How to read a Red Hat kernel version:

uname -r
# 5.14.0-427.13.1.el9_4.x86_64
#   5.14.0        → base version chosen by Red Hat (kernel.org 5.14)
#   427.13.1      → Red Hat build number: hundreds of patches added
#   el9_4         → "Enterprise Linux 9", update 9.4
#   x86_64        → architecture (64-bit PC)

A RHEL 9 5.14 kernel from 2025 is therefore very different from the kernel.org 5.14 kernel of 2021: it contains years of fixes.

8. The lesson timeline

1987  Minix (Andrew Tanenbaum)
1991  January: Linus buys his 386 PC — 25 August: the announcement — September: Linux 0.01
1992  Linux moves to the GPL (0.12); "LINUX is obsolete" debate
1994  Linux 1.0 (March)
1996  Linux 2.0; the Tux mascot
2003  Linux 2.6
2005  Linus creates Git
2007  Creation of the Linux Foundation (which employs Linus)
2011  Linux 3.0, for the 20th anniversary
2022  Linux 6.0; first Rust language components in the kernel (6.1)

Common pitfalls

  • Confusing the kernel version with the distribution version. uname -r gives the kernel; /etc/os-release gives the distribution. Rocky 9.4 and Rocky 9.5 have the same 5.14 base kernel.
  • Believing that an old kernel number means "not up to date". The 4.18 kernel of RHEL 8 still receives security fixes. What matters is the package date, not the base number.
  • Installing "the latest kernel from kernel.org" on an enterprise server. You lose vendor support, and third-party modules (drivers, antivirus) may stop working.
  • In a container, believing that the kernel is the distribution's kernel. A container shares the kernel of the host machine. You will see this in the lab.

Lab

You are on an Ubuntu 24.04 machine. Query the kernel:

uname -r                           # the kernel version
uname -r | cut -d. -f1             # only the first number
cat /proc/sys/kernel/ostype        # where uname gets its answers
cat /proc/sys/kernel/osrelease
grep PRETTY_NAME /etc/os-release   # the distribution

Surprise: your lab is a container. The distribution is indeed Ubuntu 24.04, but the kernel displayed is not Ubuntu's 6.8: it is the kernel of the machine hosting the lab. A container borrows its host's kernel; only the programs and files are Ubuntu's. Complete the tasks, then click Check.


Quiz

  1. Which system was Linus Torvalds using before writing Linux, and who had created it?
  2. Why was the move to the GPL in 1992 so important?
  3. What is a "merge window" in kernel development?
  4. What is the difference between a stable version and a longterm (LTS) version on kernel.org?
  5. A RHEL 9 server displays 5.14.0-503.el9.x86_64. Why is it not "behind" even though kernel.org offers 6.x versions?
Answers
  1. Minix, a small educational UNIX created by Professor Andrew Tanenbaum (1987).
  2. The GPL lets everyone use, modify and redistribute Linux while requiring them to share improvements; it attracted contributors and made it possible to combine the kernel with the GNU tools to form an entirely free system.
  3. The two weeks following a release, during which new features enter the kernel; then come the -rc versions, reserved for fixes.
  4. A stable version is fixed only until the next one comes out; a longterm version is fixed for several years.
  5. Red Hat chose the 5.14 base and maintains it itself, adding security fixes and new features (the number 503 shows this). The base number does not tell you whether the kernel is up to date.

Reference sources: Linux kernel documentation (docs.kernel.org, GPL-2.0), kernel.org, "Just for Fun" by L. Torvalds. Original MasterLinux text.

Practical exercises

To do on Ubuntu 24.04

The online terminal is coming soon. Meanwhile, do these tasks on your own Linux machine, a virtual machine or WSL.

  1. Save the exact version of the kernel running your machine (uname -r) in /root/version-noyau.txt
    Show a hintuname -r > /root/version-noyau.txt
    Show the solution
    uname -r > /root/version-noyau.txt

    Check : grep -qx "$(uname -r)" /root/version-noyau.txt

  2. Keep only the first number of this version (the major version) in /root/majeure.txt
    Show a hintcut splits a line: uname -r | cut -d. -f1 > /root/majeure.txt (separator: the dot, field no. 1)
    Show the solution
    uname -r | cut -d. -f1 > /root/majeure.txt

    Check : grep -qx "$(uname -r | cut -d. -f1)" /root/majeure.txt

  3. uname reads its answers from the kernel. Write in /root/proc.txt the content of /proc/sys/kernel/ostype then that of /proc/sys/kernel/osrelease
    Show a hintcat accepts several files: cat /proc/sys/kernel/ostype /proc/sys/kernel/osrelease > /root/proc.txt
    Show the solution
    cat /proc/sys/kernel/ostype /proc/sys/kernel/osrelease > /root/proc.txt

    Check : grep -qx Linux /root/proc.txt && grep -qx "$(uname -r)" /root/proc.txt

  4. Write in /root/annee-linux.txt the year of the very first version of Linux (0.01).
    Show a hintVersion 0.01 came out one month after the famous August message. Example: echo 2000 > /root/annee-linux.txt
    Show the solution
    echo 1991 > /root/annee-linux.txt

    Check : grep -qx 1991 /root/annee-linux.txt

Official references consulted: The Linux Kernel documentation — « How the development process works » (docs.kernel.org) ; kernel.org — Releases (mainline, stable, longterm) ; L. Torvalds et D. Diamond, « Just for Fun » (2001). Original MasterLinux text.