커널 역사 (Kernel History)

1991년 탄생부터 현재까지, 리눅스 커널의 진화 과정을 버전별 릴리즈와 주요 변경사항으로 정리합니다.

개요 — 리눅스 커널의 시작

1991년 8월 25일, 핀란드 헬싱키 대학교의 21세 학생 Linus Torvalds는 Usenet 뉴스그룹 comp.os.minix에 다음과 같은 역사적인 메시지를 남겼다:

Linus의 원문 (1991-08-25): "I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones."

이 "취미 프로젝트"는 Andrew Tanenbaum의 교육용 OS인 MINIX에서 영감을 받았지만, 처음부터 실용적인 목적으로 개발되었다. Linus는 386 프로세서의 태스크 스위칭 기능을 탐구하다가 터미널 에뮬레이터를 작성했고, 이것이 점차 운영체제 커널로 발전했다.

초기 리눅스는 GNU 프로젝트의 도구(GCC, Bash, coreutils 등)와 결합하여 완전한 운영체제를 구성했다. Richard Stallman이 1983년부터 추진한 GNU 프로젝트는 커널(GNU Hurd)을 제외한 대부분의 사용자 공간 도구를 이미 갖추고 있었기에, 리눅스 커널은 이 생태계에 완벽하게 들어맞았다.

리눅스는 GPLv2 라이선스를 채택하여 소스 코드를 자유롭게 사용, 수정, 재배포할 수 있게 했다. 이 결정은 전 세계 개발자들의 참여를 이끌어내며 오픈소스 소프트웨어 역사상 가장 성공적인 협업 프로젝트로 성장하는 기반이 되었다.

커널 버전 연대표

아래 표는 리눅스 커널의 주요 릴리즈를 시간순으로 정리한 것이다. 각 버전의 상세 내용은 이후 섹션에서 다룬다.

버전릴리즈일핵심 변경사항
0.011991-09최초 공개, i386 전용, Minix 파일시스템
0.021991-10-05첫 공식 발표, bash/gcc 실행 가능
0.121992-01GPLv2 라이선스 전환
1.01994-03-14첫 안정 릴리즈, TCP/IP 네트워킹
1.21995-03-07Alpha/SPARC/MIPS 이식, IPX, AppleTalk
2.01996-06-09SMP, 로더블 모듈, ELF, 다중 아키텍처
2.21999-01-25개선된 SMP, IPv6 초기, 대용량 메모리
2.42001-01-04USB, ext3, iptables, LVM, Bluetooth
2.62003-12-17O(1) 스케줄러, Preemptive kernel, NPTL, sysfs, udev
3.02011-07-21버전 번호 체계 변경 (2.6.39 → 3.0)
3.82013-02-18User namespace 완성, F2FS
4.02015-04-12Live kernel patching (kpatch/kGraft)
4.92016-12-11BBR 혼잡 제어, XDP (LTS)
4.182018-08-12bpfilter, TLS offload
5.02019-03-03Energy-Aware Scheduling, Adiantum 암호화
5.42019-11-24io_uring, virtio-fs, exFAT (LTS)
5.62020-03-29WireGuard, USB4, time namespace
5.102020-12-13Static calls, EXT4 fast commit (LTS)
5.152021-10-31NTFS3, DAMON, KFENCE (LTS)
6.02022-10-02Rust 인프라 초기 도입
6.12022-12-11Rust 공식 지원 시작, MGLRU (LTS)
6.62023-10-29EEVDF 스케줄러, Intel shadow stack (LTS)
6.122024-11-17실시간(PREEMPT_RT) 메인라인 통합 (LTS)

초기 개발 (0.x ~ 1.x)

0.01 (1991년 9월)

최초로 공개된 리눅스 커널 소스 코드. 약 10,239줄의 C 코드로 구성되었다. i386 전용이었으며, Minix 파일시스템을 사용했다. 프로세스 관리, 메모리 관리, 기본적인 파일시스템 지원만 포함되어 있었다.

0.02 (1991년 10월 5일)

Linus가 공식적으로 "발표"한 첫 번째 버전. bashgcc를 실행할 수 있었다. 아직 플로피 디스크 드라이버조차 없어서 Minix에서 하드 디스크로 복사한 후 부팅해야 했다.

0.12 (1992년 1월)

중요한 전환점: 라이선스를 자체 라이선스에서 GPLv2로 변경했다. 이전 라이선스는 상업적 배포를 금지했으나, GPL 전환으로 자유로운 배포가 가능해졌다. 가상 메모리(스왑) 지원이 추가되었다.

0.95 ~ 0.99 (1992 ~ 1993)

X Window System 지원, ext 파일시스템 도입, 네트워킹 스택 초기 구현 등 급속한 발전 기간. 전 세계 개발자들이 기여하기 시작하면서 코드 규모가 빠르게 성장했다.

1.0 (1994년 3월 14일)

최초의 안정(stable) 릴리즈. 약 176,250줄의 코드로 성장했다. TCP/IP 네트워킹이 완전히 통합되어 인터넷 서버로 사용 가능해졌다.

1.2 (1995년 3월 7일)

최초로 다중 아키텍처를 지원한 릴리즈. Alpha, SPARC, MIPS 프로세서로 이식되었다.

2.x 시대 — 엔터프라이즈 진입

2.0 (1996년 6월 9일)

리눅스가 서버 시장에 진입하는 계기가 된 릴리즈. SMP(대칭형 다중 처리) 지원이 핵심이었다.

2.2 (1999년 1월 25일)

확장성과 성능이 크게 개선된 버전. 엔터프라이즈 환경에서의 안정성이 입증되기 시작했다.

2.4 (2001년 1월 4일)

데스크탑과 서버 양쪽에서 리눅스의 실용성을 크게 높인 릴리즈.

2.6 (2003년 12월 17일)

가장 오래 유지된 메이저 버전 시리즈(2003~2011). 현대 리눅스 커널의 기반이 되는 핵심 기능 대부분이 이 시기에 도입되었다.

참고: 2.6 시리즈는 기존의 개발/안정 브랜치 분리(홀수=개발, 짝수=안정) 모델을 폐기하고, 시간 기반 릴리즈 모델로 전환했다. 2.6.x 포인트 릴리즈마다 새 기능이 추가되었다.

2.6.0 핵심 기능:

2.6.x 주요 포인트 릴리즈:

버전릴리즈일주요 기능
2.6.122005-06-17Git으로 소스 관리 전환 (BitKeeper 대체)
2.6.132005-08-28inotify, Voluntary Preemption
2.6.162006-03-20High-resolution timers, ext3 online resize
2.6.182006-09-19RHEL 6 기반 커널
2.6.232007-10-09CFS(Completely Fair Scheduler), 리눅스 보안 모듈(LSM) 개선
2.6.242008-01-24cgroups, 네임스페이스 확장, dynticks/tickless 개선
2.6.252008-04-16SMACK LSM, RCU preempt
2.6.282008-12-24ext4 안정화, GEM(Graphics Execution Manager)
2.6.292009-03-23Btrfs (실험적), KMS(Kernel Mode Setting)
2.6.322009-12-02KSM(Kernel Samepage Merging), perf 도구 (LTS — RHEL 7/CentOS 7 기반)
2.6.362010-10-20AppArmor 통합, fanotify
2.6.382011-03-14Transparent Huge Pages(THP), VFS scalability
2.6.392011-05-18ipset, 마지막 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.12011-10-24OpenRISC 아키텍처, NFC 서브시스템
3.22012-01-04ext4 block 할당 개선, Btrfs send/receive (LTS)
3.42012-05-20x32 ABI, Btrfs 복구 도구 개선 (LTS)
3.72012-12-10ARM multiplatform, NVMe 드라이버, 서명된 커널 모듈
3.82013-02-18User namespace 완성 (컨테이너 기반), F2FS
3.102013-06-30timerfd 개선, perf trace (LTS — RHEL 7.x 기반)
3.142014-03-30deadline I/O 스케줄러 개선, ZRAM
3.182014-12-07OverlayFS (union filesystem), bpf() 시스템 콜 (LTS)

4.0 (2015년 4월 12일)

Live kernel patching이 도입된 릴리즈. 재부팅 없이 커널 코드를 패치할 수 있는 인프라로, Red Hat의 kpatch와 SUSE의 kGraft를 통합한 결과물이다.

4.x 주요 릴리즈 (2015 ~ 2018)

버전릴리즈일주요 기능
4.12015-06-21ext4 암호화(fscrypt), ACPI 개선 (LTS)
4.42016-01-10eBPF 확장(cgroup, tracepoint), 3D 렌더링 개선 (LTS)
4.72016-07-24Schedutil governor, 파일시스템 보안 개선
4.92016-12-11BBR TCP 혼잡 제어, XDP(eXpress Data Path) (LTS)
4.112017-04-30Stateless 방화벽, SSD 멀티큐 개선
4.142017-11-12zstd 압축 지원, AMD Secure Memory Encryption (LTS)
4.152018-01-28KPTI (Meltdown 완화), Retpoline (Spectre 완화)
4.182018-08-12bpfilter, TLS offload, AMDGPU DC (RHEL 8 기반)
4.192018-10-22Wi-Fi 6, CAKE qdisc, overlayfs 개선 (LTS)
4.202018-12-23C-SKY 아키텍처, PSI(Pressure Stall Information)
Meltdown/Spectre (2018): CPU 하드웨어 취약점이 공개되면서 4.15에 KPTI(Kernel Page Table Isolation), Retpoline 등 완화 패치가 긴급 투입되었다. 이후 커널 보안 서브시스템이 크게 강화되는 계기가 되었다.

5.x — 성숙기

5.0 (2019년 3월 3일)

4.20에서 이어진 릴리즈로, 번호 변경 자체에 기술적 의미는 없다. Linus는 "번호가 너무 커지면 변경한다"고 언급했다.

5.x 주요 릴리즈 (2019 ~ 2022)

버전릴리즈일주요 기능
5.12019-05-05io_uring 초기 도입, pidfd
5.22019-07-07Sound Open Firmware(SOF), BPF 트램폴린
5.32019-09-15umwait (x86), RISC-V 개선, AMD Navi GPU
5.42019-11-24io_uring 확장, virtio-fs, exFAT 초기, Lockdown LSM (LTS)
5.52020-01-26Airtime fairness (Wi-Fi), BPF 트램폴린 확장
5.62020-03-29WireGuard VPN, USB4/Thunderbolt 3, time namespace
5.72020-05-31Split lock 검출, 온칩 ARM Mali GPU 드라이버
5.82020-08-02BPF 링 버퍼, shadow call stack (ARM64)
5.92020-10-11dm-integrity inline, FSGSBASE 지원
5.102020-12-13Static calls, EXT4 fast commit, XFS 온라인 복구 (LTS)
5.112021-02-14Intel SGX, Wi-Fi 6E
5.122021-04-25id-mapped 마운트, AMDGPU 가상 디스플레이
5.132021-06-27Landlock LSM, Apple M1 초기 지원, FreeSync HDMI
5.142021-08-29core scheduling, MEMFD_SECRET
5.152021-10-31NTFS3 (Paragon), DAMON (Data Access Monitor), KFENCE (LTS)
5.162022-01-09futex2 (futex_waitv), AMD P-State
5.172022-03-20BPF CO-RE 개선, io_uring 제로카피 TX
5.182022-05-22Random number generator 전면 리팩토링
5.192022-07-31LoongArch 아키텍처, PREEMPT_DYNAMIC

6.x — 현재

6.0 (2022년 10월 2일)

Rust 인프라가 커널에 초기 도입된 릴리즈. CONFIG_RUST 빌드 옵션이 추가되었으며, Rust로 커널 모듈을 작성할 수 있는 기반이 마련되었다.

6.1 (2022년 12월 11일)

Rust 공식 지원이 안정화된 첫 번째 릴리즈. MGLRU(Multi-Gen LRU)도 포함되어 메모리 관리 성능이 크게 개선되었다.

6.x 주요 릴리즈 (2023 ~ 현재)

버전릴리즈일주요 기능
6.22023-02-19Retbleed 완화 개선, 사용자 공간 발열 관리
6.32023-04-23HP(Huge Page) 마이그레이션 개선, Rust alloc 모듈
6.42023-06-25Intel LAM(Linear Address Masking), Confidential Computing 개선
6.52023-08-27User-space P-State, USB4v2, ACPI FFH
6.62023-10-29EEVDF 스케줄러 (CFS 대체), Intel shadow stack, LTS
6.72024-01-07Bcachefs 파일시스템, futex2, NTB 개선
6.82024-03-10Intel FRED, LAM 활성화, Zstd 업데이트
6.92024-05-12Rust로 작성된 첫 파일시스템(PuzzleFS), Intel TDX 게스트
6.102024-07-14mseal() 시스템 콜, NTSYNC
6.112024-09-15sched_ext (확장 가능 스케줄러), copy_file_range 최적화
6.122024-11-17PREEMPT_RT 메인라인 통합, 실시간 커널 공식 지원, LTS
PREEMPT_RT 통합 (6.12): 약 20년간 out-of-tree 패치로 유지되던 실시간(RT) 스케줄링 지원이 드디어 메인라인에 완전히 통합되었다. 이는 산업용 임베디드, 로봇, 자동차, 오디오 등 실시간 요구사항이 있는 분야에서 큰 의미를 갖는다.

커널 개발 프로세스

릴리즈 사이클

리눅스 커널은 약 9~10주 주기로 새 버전을 릴리즈한다. 각 사이클은 다음 단계로 구성된다:

단계기간설명
Merge Window~2주서브시스템 메인테이너가 준비한 변경사항을 Linus의 트리에 병합. 새 기능은 이 기간에만 투입 가능
rc1 ~ rc7~7주Release Candidate. 버그 수정만 허용. 매주 rc 릴리즈
Final Release1일마지막 rc가 충분히 안정적이면 최종 릴리즈

LTS (Long Term Support) 정책

매년 1~2개의 릴리즈가 LTS로 지정되어 장기 지원을 받는다. 일반 릴리즈가 다음 버전 출시까지(약 2~3개월)만 지원되는 것과 달리, LTS는 최소 2년에서 최대 6년까지 보안 및 중요 버그 수정 패치를 받는다.

LTS 커널은 임베디드 시스템, 서버 배포판(RHEL, Ubuntu LTS, SLES 등), Android 등에서 널리 채택된다.

서브시스템 메인테이너 구조

리눅스 커널은 계층적 메인테이너 구조로 관리된다:

패치 흐름: 개발자 → 메일링 리스트 → 서브시스템 메인테이너Linus 트리 (merge window 기간)

참고: 2024년 기준 약 1,700명 이상의 메인테이너MAINTAINERS 파일에 등록되어 있으며, 매 릴리즈마다 약 1,500~2,000명의 개발자가 기여한다.

커널 규모 변화

리눅스 커널의 소스 코드 규모는 약 30년간 꾸준히 성장해왔다. 아래는 주요 버전별 대략적인 코드 라인 수(LOC, drivers 포함)이다:

버전연도코드 라인 수 (약)파일 수 (약)
0.01199110,00088
1.01994176,000561
2.01996780,0002,100
2.4.020013,800,0008,200
2.6.020035,900,00015,000
2.6.32200912,600,00028,000
3.0201114,600,00037,000
4.0201519,500,00049,000
5.0201926,100,00063,000
6.0202230,400,00074,000
6.1202231,000,00076,000

코드 증가의 대부분은 디바이스 드라이버(drivers/ 디렉토리)가 차지한다. 전체 코드의 약 60~70%가 드라이버 코드이며, 커널 핵심(코어 서브시스템)은 상대적으로 적은 비율을 차지한다.

코드 규모 확인: 현재 커널 소스의 코드 라인 수는 다음 명령으로 확인할 수 있다:
# 전체 코드 라인 수
find . -name '*.[chS]' -not -path './tools/*' | xargs wc -l

# drivers/ 디렉토리 비율
find drivers/ -name '*.[chS]' | xargs wc -l