커널 역사 (Kernel History)
1991년 탄생부터 현재까지, 리눅스 커널의 진화 과정을 버전별 릴리즈와 주요 변경사항으로 정리합니다.
개요 — 리눅스 커널의 시작
1991년 8월 25일, 핀란드 헬싱키 대학교의 21세 학생 Linus Torvalds는 Usenet 뉴스그룹 comp.os.minix에 다음과 같은 역사적인 메시지를 남겼다:
이 "취미 프로젝트"는 Andrew Tanenbaum의 교육용 OS인 MINIX에서 영감을 받았지만, 처음부터 실용적인 목적으로 개발되었다. Linus는 386 프로세서의 태스크 스위칭 기능을 탐구하다가 터미널 에뮬레이터를 작성했고, 이것이 점차 운영체제 커널로 발전했다.
초기 리눅스는 GNU 프로젝트의 도구(GCC, Bash, coreutils 등)와 결합하여 완전한 운영체제를 구성했다. Richard Stallman이 1983년부터 추진한 GNU 프로젝트는 커널(GNU Hurd)을 제외한 대부분의 사용자 공간 도구를 이미 갖추고 있었기에, 리눅스 커널은 이 생태계에 완벽하게 들어맞았다.
리눅스는 GPLv2 라이선스를 채택하여 소스 코드를 자유롭게 사용, 수정, 재배포할 수 있게 했다. 이 결정은 전 세계 개발자들의 참여를 이끌어내며 오픈소스 소프트웨어 역사상 가장 성공적인 협업 프로젝트로 성장하는 기반이 되었다.
커널 버전 연대표
아래 표는 리눅스 커널의 주요 릴리즈를 시간순으로 정리한 것이다. 각 버전의 상세 내용은 이후 섹션에서 다룬다.
| 버전 | 릴리즈일 | 핵심 변경사항 |
|---|---|---|
| 0.01 | 1991-09 | 최초 공개, i386 전용, Minix 파일시스템 |
| 0.02 | 1991-10-05 | 첫 공식 발표, bash/gcc 실행 가능 |
| 0.12 | 1992-01 | GPLv2 라이선스 전환 |
| 1.0 | 1994-03-14 | 첫 안정 릴리즈, TCP/IP 네트워킹 |
| 1.2 | 1995-03-07 | Alpha/SPARC/MIPS 이식, IPX, AppleTalk |
| 2.0 | 1996-06-09 | SMP, 로더블 모듈, ELF, 다중 아키텍처 |
| 2.2 | 1999-01-25 | 개선된 SMP, IPv6 초기, 대용량 메모리 |
| 2.4 | 2001-01-04 | USB, ext3, iptables, LVM, Bluetooth |
| 2.6 | 2003-12-17 | O(1) 스케줄러, Preemptive kernel, NPTL, sysfs, udev |
| 3.0 | 2011-07-21 | 버전 번호 체계 변경 (2.6.39 → 3.0) |
| 3.8 | 2013-02-18 | User namespace 완성, F2FS |
| 4.0 | 2015-04-12 | Live kernel patching (kpatch/kGraft) |
| 4.9 | 2016-12-11 | BBR 혼잡 제어, XDP (LTS) |
| 4.18 | 2018-08-12 | bpfilter, TLS offload |
| 5.0 | 2019-03-03 | Energy-Aware Scheduling, Adiantum 암호화 |
| 5.4 | 2019-11-24 | io_uring, virtio-fs, exFAT (LTS) |
| 5.6 | 2020-03-29 | WireGuard, USB4, time namespace |
| 5.10 | 2020-12-13 | Static calls, EXT4 fast commit (LTS) |
| 5.15 | 2021-10-31 | NTFS3, DAMON, KFENCE (LTS) |
| 6.0 | 2022-10-02 | Rust 인프라 초기 도입 |
| 6.1 | 2022-12-11 | Rust 공식 지원 시작, MGLRU (LTS) |
| 6.6 | 2023-10-29 | EEVDF 스케줄러, Intel shadow stack (LTS) |
| 6.12 | 2024-11-17 | 실시간(PREEMPT_RT) 메인라인 통합 (LTS) |
초기 개발 (0.x ~ 1.x)
0.01 (1991년 9월)
최초로 공개된 리눅스 커널 소스 코드. 약 10,239줄의 C 코드로 구성되었다. i386 전용이었으며, Minix 파일시스템을 사용했다. 프로세스 관리, 메모리 관리, 기본적인 파일시스템 지원만 포함되어 있었다.
- 지원 하드웨어: i386 CPU, AT 하드디스크
- 파일시스템: Minix FS (읽기/쓰기)
- 셸: Bourne Shell (bash는 0.02부터)
0.02 (1991년 10월 5일)
Linus가 공식적으로 "발표"한 첫 번째 버전. bash와 gcc를 실행할 수 있었다. 아직 플로피 디스크 드라이버조차 없어서 Minix에서 하드 디스크로 복사한 후 부팅해야 했다.
0.12 (1992년 1월)
중요한 전환점: 라이선스를 자체 라이선스에서 GPLv2로 변경했다. 이전 라이선스는 상업적 배포를 금지했으나, GPL 전환으로 자유로운 배포가 가능해졌다. 가상 메모리(스왑) 지원이 추가되었다.
0.95 ~ 0.99 (1992 ~ 1993)
X Window System 지원, ext 파일시스템 도입, 네트워킹 스택 초기 구현 등 급속한 발전 기간. 전 세계 개발자들이 기여하기 시작하면서 코드 규모가 빠르게 성장했다.
- 0.95 (1992-03): X Window System 실행 가능
- 0.96 (1992-05): ext 파일시스템 도입
- 0.99 (1992-12): ext2 파일시스템 초기 지원, 네트워킹 개선
1.0 (1994년 3월 14일)
최초의 안정(stable) 릴리즈. 약 176,250줄의 코드로 성장했다. TCP/IP 네트워킹이 완전히 통합되어 인터넷 서버로 사용 가능해졌다.
- 네트워킹: TCP/IP 스택 완성 (BSD 소켓 인터페이스)
- 파일시스템: ext2, Minix, xiafs, MS-DOS FAT
- 아키텍처: i386 단일 아키텍처
- SCSI 지원, 가상 콘솔, 사운드 드라이버
1.2 (1995년 3월 7일)
최초로 다중 아키텍처를 지원한 릴리즈. Alpha, SPARC, MIPS 프로세서로 이식되었다.
- 네트워킹: IPX (Novell NetWare), AppleTalk 프로토콜
- 디바이스: 더 많은 SCSI 어댑터, 사운드 카드 지원
- 약 310,950줄의 코드
2.x 시대 — 엔터프라이즈 진입
2.0 (1996년 6월 9일)
리눅스가 서버 시장에 진입하는 계기가 된 릴리즈. SMP(대칭형 다중 처리) 지원이 핵심이었다.
- SMP: 최대 16개 CPU 지원 (Big Kernel Lock 기반)
- 로더블 모듈: 런타임에 커널 기능을 동적 로드/언로드
- ELF 바이너리: a.out 포맷 대체
- 다중 아키텍처: x86, Alpha, SPARC, MIPS, m68k, PowerPC
- 약 780,000줄의 코드
2.2 (1999년 1월 25일)
확장성과 성능이 크게 개선된 버전. 엔터프라이즈 환경에서의 안정성이 입증되기 시작했다.
- 개선된 SMP: 세분화된 잠금(fine-grained locking) 도입
- IPv6 초기 지원 (실험적)
- 대용량 메모리 지원 개선 (2GB 이상)
- 향상된 네트워킹 성능
- 약 1,800,000줄의 코드
2.4 (2001년 1월 4일)
데스크탑과 서버 양쪽에서 리눅스의 실용성을 크게 높인 릴리즈.
- USB 서브시스템: 대중적인 USB 장치 지원
- ext3: 저널링 파일시스템 (ext2 호환)
- iptables / Netfilter: ipchains 대체, stateful 방화벽
- LVM (Logical Volume Manager): 논리 볼륨 관리
- Bluetooth 지원
- ISA Plug and Play
- 약 3,800,000줄의 코드
2.6 (2003년 12월 17일)
가장 오래 유지된 메이저 버전 시리즈(2003~2011). 현대 리눅스 커널의 기반이 되는 핵심 기능 대부분이 이 시기에 도입되었다.
2.6.0 핵심 기능:
- O(1) 스케줄러: 프로세스 수에 무관한 상수 시간 스케줄링
- Preemptive kernel: 커널 코드 실행 중 선점 가능
- NPTL (Native POSIX Thread Library): 1:1 스레딩 모델
- sysfs: 디바이스 모델을 파일시스템으로 노출
- udev: 사용자 공간 디바이스 관리
- ALSA 사운드 서브시스템 (OSS 대체)
2.6.x 주요 포인트 릴리즈:
| 버전 | 릴리즈일 | 주요 기능 |
|---|---|---|
| 2.6.12 | 2005-06-17 | Git으로 소스 관리 전환 (BitKeeper 대체) |
| 2.6.13 | 2005-08-28 | inotify, Voluntary Preemption |
| 2.6.16 | 2006-03-20 | High-resolution timers, ext3 online resize |
| 2.6.18 | 2006-09-19 | RHEL 6 기반 커널 |
| 2.6.23 | 2007-10-09 | CFS(Completely Fair Scheduler), 리눅스 보안 모듈(LSM) 개선 |
| 2.6.24 | 2008-01-24 | cgroups, 네임스페이스 확장, dynticks/tickless 개선 |
| 2.6.25 | 2008-04-16 | SMACK LSM, RCU preempt |
| 2.6.28 | 2008-12-24 | ext4 안정화, GEM(Graphics Execution Manager) |
| 2.6.29 | 2009-03-23 | Btrfs (실험적), KMS(Kernel Mode Setting) |
| 2.6.32 | 2009-12-02 | KSM(Kernel Samepage Merging), perf 도구 (LTS — RHEL 7/CentOS 7 기반) |
| 2.6.36 | 2010-10-20 | AppArmor 통합, fanotify |
| 2.6.38 | 2011-03-14 | Transparent Huge Pages(THP), VFS scalability |
| 2.6.39 | 2011-05-18 | ipset, 마지막 2.6.x 릴리즈 |
3.x ~ 4.x — 현대화
3.0 (2011년 7월 21일)
버전 번호 체계를 변경한 릴리즈. 2.6.39에서 곧바로 3.0으로 넘어갔으며, 기술적으로 혁명적인 변화보다는 리눅스 탄생 20주년을 기념하여 번호를 정리한 것이다. 이후 3.x, 4.x, 5.x, 6.x로 순차 증가하는 체계가 확립되었다.
3.x 주요 릴리즈 (2011 ~ 2015)
| 버전 | 릴리즈일 | 주요 기능 |
|---|---|---|
| 3.1 | 2011-10-24 | OpenRISC 아키텍처, NFC 서브시스템 |
| 3.2 | 2012-01-04 | ext4 block 할당 개선, Btrfs send/receive (LTS) |
| 3.4 | 2012-05-20 | x32 ABI, Btrfs 복구 도구 개선 (LTS) |
| 3.7 | 2012-12-10 | ARM multiplatform, NVMe 드라이버, 서명된 커널 모듈 |
| 3.8 | 2013-02-18 | User namespace 완성 (컨테이너 기반), F2FS |
| 3.10 | 2013-06-30 | timerfd 개선, perf trace (LTS — RHEL 7.x 기반) |
| 3.14 | 2014-03-30 | deadline I/O 스케줄러 개선, ZRAM |
| 3.18 | 2014-12-07 | OverlayFS (union filesystem), bpf() 시스템 콜 (LTS) |
4.0 (2015년 4월 12일)
Live kernel patching이 도입된 릴리즈. 재부팅 없이 커널 코드를 패치할 수 있는 인프라로, Red Hat의 kpatch와 SUSE의 kGraft를 통합한 결과물이다.
4.x 주요 릴리즈 (2015 ~ 2018)
| 버전 | 릴리즈일 | 주요 기능 |
|---|---|---|
| 4.1 | 2015-06-21 | ext4 암호화(fscrypt), ACPI 개선 (LTS) |
| 4.4 | 2016-01-10 | eBPF 확장(cgroup, tracepoint), 3D 렌더링 개선 (LTS) |
| 4.7 | 2016-07-24 | Schedutil governor, 파일시스템 보안 개선 |
| 4.9 | 2016-12-11 | BBR TCP 혼잡 제어, XDP(eXpress Data Path) (LTS) |
| 4.11 | 2017-04-30 | Stateless 방화벽, SSD 멀티큐 개선 |
| 4.14 | 2017-11-12 | zstd 압축 지원, AMD Secure Memory Encryption (LTS) |
| 4.15 | 2018-01-28 | KPTI (Meltdown 완화), Retpoline (Spectre 완화) |
| 4.18 | 2018-08-12 | bpfilter, TLS offload, AMDGPU DC (RHEL 8 기반) |
| 4.19 | 2018-10-22 | Wi-Fi 6, CAKE qdisc, overlayfs 개선 (LTS) |
| 4.20 | 2018-12-23 | C-SKY 아키텍처, PSI(Pressure Stall Information) |
5.x — 성숙기
5.0 (2019년 3월 3일)
4.20에서 이어진 릴리즈로, 번호 변경 자체에 기술적 의미는 없다. Linus는 "번호가 너무 커지면 변경한다"고 언급했다.
- Energy-Aware Scheduling (EAS): ARM big.LITTLE 등 비대칭 CPU 아키텍처에서 에너지 효율적 스케줄링
- Adiantum 암호화: 저성능 디바이스를 위한 빠른 스토리지 암호화
- AMD FreeSync 지원
5.x 주요 릴리즈 (2019 ~ 2022)
| 버전 | 릴리즈일 | 주요 기능 |
|---|---|---|
| 5.1 | 2019-05-05 | io_uring 초기 도입, pidfd |
| 5.2 | 2019-07-07 | Sound Open Firmware(SOF), BPF 트램폴린 |
| 5.3 | 2019-09-15 | umwait (x86), RISC-V 개선, AMD Navi GPU |
| 5.4 | 2019-11-24 | io_uring 확장, virtio-fs, exFAT 초기, Lockdown LSM (LTS) |
| 5.5 | 2020-01-26 | Airtime fairness (Wi-Fi), BPF 트램폴린 확장 |
| 5.6 | 2020-03-29 | WireGuard VPN, USB4/Thunderbolt 3, time namespace |
| 5.7 | 2020-05-31 | Split lock 검출, 온칩 ARM Mali GPU 드라이버 |
| 5.8 | 2020-08-02 | BPF 링 버퍼, shadow call stack (ARM64) |
| 5.9 | 2020-10-11 | dm-integrity inline, FSGSBASE 지원 |
| 5.10 | 2020-12-13 | Static calls, EXT4 fast commit, XFS 온라인 복구 (LTS) |
| 5.11 | 2021-02-14 | Intel SGX, Wi-Fi 6E |
| 5.12 | 2021-04-25 | id-mapped 마운트, AMDGPU 가상 디스플레이 |
| 5.13 | 2021-06-27 | Landlock LSM, Apple M1 초기 지원, FreeSync HDMI |
| 5.14 | 2021-08-29 | core scheduling, MEMFD_SECRET |
| 5.15 | 2021-10-31 | NTFS3 (Paragon), DAMON (Data Access Monitor), KFENCE (LTS) |
| 5.16 | 2022-01-09 | futex2 (futex_waitv), AMD P-State |
| 5.17 | 2022-03-20 | BPF CO-RE 개선, io_uring 제로카피 TX |
| 5.18 | 2022-05-22 | Random number generator 전면 리팩토링 |
| 5.19 | 2022-07-31 | LoongArch 아키텍처, PREEMPT_DYNAMIC |
6.x — 현재
6.0 (2022년 10월 2일)
Rust 인프라가 커널에 초기 도입된 릴리즈. CONFIG_RUST 빌드 옵션이 추가되었으며, Rust로 커널 모듈을 작성할 수 있는 기반이 마련되었다.
- Rust 지원 인프라 초기 코드
- io_uring zero-copy 네트워킹 개선
- XFS Online Repair 확장
6.1 (2022년 12월 11일)
Rust 공식 지원이 안정화된 첫 번째 릴리즈. MGLRU(Multi-Gen LRU)도 포함되어 메모리 관리 성능이 크게 개선되었다.
- Rust: 커널 모듈 작성 지원 (실험적이지만 공식 통합)
- MGLRU: 새로운 페이지 교체 알고리즘, 기존 LRU 대비 성능 향상
- Maple Tree: VMA 관리용 새로운 자료구조
- User-space 스택 언와인딩 지원
- LTS 릴리즈
6.x 주요 릴리즈 (2023 ~ 현재)
| 버전 | 릴리즈일 | 주요 기능 |
|---|---|---|
| 6.2 | 2023-02-19 | Retbleed 완화 개선, 사용자 공간 발열 관리 |
| 6.3 | 2023-04-23 | HP(Huge Page) 마이그레이션 개선, Rust alloc 모듈 |
| 6.4 | 2023-06-25 | Intel LAM(Linear Address Masking), Confidential Computing 개선 |
| 6.5 | 2023-08-27 | User-space P-State, USB4v2, ACPI FFH |
| 6.6 | 2023-10-29 | EEVDF 스케줄러 (CFS 대체), Intel shadow stack, LTS |
| 6.7 | 2024-01-07 | Bcachefs 파일시스템, futex2, NTB 개선 |
| 6.8 | 2024-03-10 | Intel FRED, LAM 활성화, Zstd 업데이트 |
| 6.9 | 2024-05-12 | Rust로 작성된 첫 파일시스템(PuzzleFS), Intel TDX 게스트 |
| 6.10 | 2024-07-14 | mseal() 시스템 콜, NTSYNC |
| 6.11 | 2024-09-15 | sched_ext (확장 가능 스케줄러), copy_file_range 최적화 |
| 6.12 | 2024-11-17 | PREEMPT_RT 메인라인 통합, 실시간 커널 공식 지원, LTS |
커널 개발 프로세스
릴리즈 사이클
리눅스 커널은 약 9~10주 주기로 새 버전을 릴리즈한다. 각 사이클은 다음 단계로 구성된다:
| 단계 | 기간 | 설명 |
|---|---|---|
| Merge Window | ~2주 | 서브시스템 메인테이너가 준비한 변경사항을 Linus의 트리에 병합. 새 기능은 이 기간에만 투입 가능 |
| rc1 ~ rc7 | ~7주 | Release Candidate. 버그 수정만 허용. 매주 rc 릴리즈 |
| Final Release | 1일 | 마지막 rc가 충분히 안정적이면 최종 릴리즈 |
LTS (Long Term Support) 정책
매년 1~2개의 릴리즈가 LTS로 지정되어 장기 지원을 받는다. 일반 릴리즈가 다음 버전 출시까지(약 2~3개월)만 지원되는 것과 달리, LTS는 최소 2년에서 최대 6년까지 보안 및 중요 버그 수정 패치를 받는다.
LTS 커널은 임베디드 시스템, 서버 배포판(RHEL, Ubuntu LTS, SLES 등), Android 등에서 널리 채택된다.
서브시스템 메인테이너 구조
리눅스 커널은 계층적 메인테이너 구조로 관리된다:
- Linus Torvalds: 최상위 메인테이너, 최종 병합 결정
- 서브시스템 메인테이너: 각 영역(네트워킹, 파일시스템, 드라이버 등)의 패치를 리뷰하고 자신의 트리에 적용.
MAINTAINERS파일에 기록됨 - 리뷰어/기여자: 패치를 작성하고 메일링 리스트(
LKML)에 제출
패치 흐름: 개발자 → 메일링 리스트 → 서브시스템 메인테이너 → Linus 트리 (merge window 기간)
MAINTAINERS 파일에 등록되어 있으며, 매 릴리즈마다 약 1,500~2,000명의 개발자가 기여한다.
커널 규모 변화
리눅스 커널의 소스 코드 규모는 약 30년간 꾸준히 성장해왔다. 아래는 주요 버전별 대략적인 코드 라인 수(LOC, drivers 포함)이다:
| 버전 | 연도 | 코드 라인 수 (약) | 파일 수 (약) |
|---|---|---|---|
| 0.01 | 1991 | 10,000 | 88 |
| 1.0 | 1994 | 176,000 | 561 |
| 2.0 | 1996 | 780,000 | 2,100 |
| 2.4.0 | 2001 | 3,800,000 | 8,200 |
| 2.6.0 | 2003 | 5,900,000 | 15,000 |
| 2.6.32 | 2009 | 12,600,000 | 28,000 |
| 3.0 | 2011 | 14,600,000 | 37,000 |
| 4.0 | 2015 | 19,500,000 | 49,000 |
| 5.0 | 2019 | 26,100,000 | 63,000 |
| 6.0 | 2022 | 30,400,000 | 74,000 |
| 6.1 | 2022 | 31,000,000 | 76,000 |
코드 증가의 대부분은 디바이스 드라이버(drivers/ 디렉토리)가 차지한다. 전체 코드의 약 60~70%가 드라이버 코드이며, 커널 핵심(코어 서브시스템)은 상대적으로 적은 비율을 차지한다.
# 전체 코드 라인 수
find . -name '*.[chS]' -not -path './tools/*' | xargs wc -l
# drivers/ 디렉토리 비율
find drivers/ -name '*.[chS]' | xargs wc -l