커널 역사 (Kernel History)
리눅스 커널의 역사를 1991년 탄생부터 현재까지 버전별 릴리즈 시기, 주요 변경사항, 코드베이스 성장 통계, VCS 변천사, 커널 거버넌스 구조, stable/longterm 프로세스(Process), 서브시스템 메인테이너 트리, 개발 프로세스의 모든 것을 심층적으로 정리합니다.
1991년 탄생부터 현재까지, 리눅스 커널의 진화 과정을 버전별 릴리즈와 주요 변경사항으로 정리합니다. 스케줄러(Scheduler) 교체, 실시간(Real-time) PREEMPT_RT 통합, Rust 도입 같은 핵심 변천을 함께 다룹니다.
개요 -- 리눅스 커널의 시작
1991년 8월 25일, 핀란드 헬싱키 대학교의 21세 학생 Linus Torvalds는 Usenet 뉴스그룹 comp.os.minix에 다음과 같은 역사적인 메시지를 남겼습니다:
이 "취미 프로젝트"는 Andrew Tanenbaum의 교육용 OS인 MINIX에서 영감을 받았지만, 처음부터 실용적인 목적으로 개발되었습니다. Linus는 386 프로세서의 태스크(Task) 스위칭 기능을 탐구하다가 터미널 에뮬레이터를 작성했고, 이것이 점차 운영체제 커널로 발전했습니다.
초기 리눅스는 GNU 프로젝트의 도구(GCC, Bash, coreutils 등)와 결합하여 완전한 운영체제를 구성했습니다. Richard Stallman이 1983년부터 추진한 GNU 프로젝트는 커널(GNU Hurd)을 제외한 대부분의 사용자 공간(User Space) 도구를 이미 갖추고 있었기에, 리눅스 커널은 이 생태계에 완벽하게 들어맞았습니다.
리눅스는 GPLv2 라이선스를 채택하여 소스 코드를 자유롭게 사용, 수정, 재배포할 수 있게 했습니다. 이 결정은 전 세계 개발자들의 참여를 이끌어내며 오픈소스 소프트웨어 역사상 가장 성공적인 협업 프로젝트로 성장하는 기반이 되었습니다.
| 날짜 | 사건 | 의미 |
|---|---|---|
| 1983 | GNU 프로젝트 시작 | 자유 소프트웨어 운동의 시작, 사용자 공간 도구 개발 |
| 1985 | Intel 80386 출시 | 보호 모드, MMU, 태스크 스위칭 하드웨어 지원 |
| 1987 | MINIX 출시 | 교육용 마이크로커널 OS, Linux 개발의 영감 |
| 1991-08-25 | Linus의 Usenet 포스팅 | Linux 프로젝트 공식 시작 선언 |
| 1991-09 | Linux 0.01 공개 | 최초 소스 코드 배포 (10,239줄) |
| 1992-01 | GPLv2 라이선스 전환 | 자유로운 배포/수정 허용, 개발자 참여 폭발 |
| 1992-04 | Tanenbaum-Torvalds 논쟁 | 마이크로커널 vs 모놀리식 설계 철학 대립 |
| 1994-03-14 | Linux 1.0 릴리즈 | 첫 안정 릴리즈, TCP/IP 완전 통합 |
커널 버전 연대표
아래 표는 리눅스 커널의 주요 릴리즈를 시간순으로 정리한 것입니다. 각 버전의 상세 내용은 이후 섹션에서 다룹니다.
| 버전 | 릴리즈일 | 핵심 변경사항 |
|---|---|---|
| 0.01 | 1991-09 | 최초 공개, i386 전용, Minix 파일시스템(Filesystem) |
| 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, 로더(Loader)블 모듈, 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 혼잡 제어(Congestion Control), XDP (LTS) |
| 4.18 | 2018-08-12 | bpfilter, TLS offload |
| 5.0 | 2019-03-03 | Energy-Aware Scheduling, Adiantum 암호화(Encryption) |
| 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 (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) |
| 6.18 | 2025-11-30 | SLUB sheaves, dm-pcache, longterm |
| 6.19 | 2026-02-08 | listns() 시스템 콜, Live Update Orchestrator, PCIe 링크 암호화, EXT4 대형 블록, LASS |
| 7.0 | 2026-04-12 | Rust stable 전환, sched_ext 정식, XFS 자가 복구, AccECN, Wi-Fi 8 초기, ML-DSA 서명 |
초기 개발 (0.x ~ 1.x)
0.01 (1991년 9월)
최초로 공개된 리눅스 커널 소스 코드. 약 10,239줄의 C 코드로 구성되었습니다. i386 전용이었으며, Minix 파일시스템을 사용했습니다. 프로세스 관리, 메모리 관리(Memory Management), 기본적인 파일시스템 지원만 포함되어 있었습니다.
- 지원 하드웨어: i386 CPU, AT 하드디스크
- 파일시스템: Minix FS (읽기/쓰기)
- 셸: Bourne Shell (bash는 0.02부터)
/* Linux 0.01 - main.c의 시작 (1991년) */
/*
* linux/init/main.c
*
* (C) 1991 Linus Torvalds
*/
#define __LIBRARY__
#include <unistd.h>
#include <time.h>
void main(void)
{
mem_init(main_memory_start, memory_end);
trap_init();
blk_dev_init();
chr_dev_init();
tty_init();
time_init();
sched_init();
buffer_init(buffer_memory_end);
hd_init();
floppy_init();
sti();
move_to_user_mode();
if (!fork()) {
init();
}
for(;;) pause();
}
boot/, fs/, include/, init/,
kernel/, lib/, mm/, tools/로 구성되었습니다.
현재 커널의 기본 구조가 이미 이 시기에 확립되었다는 점이 주목할 만합니다.
0.02 (1991년 10월 5일)
Linus가 공식적으로 "발표"한 첫 번째 버전. bash와 gcc를 실행할 수 있었습니다. 아직 플로피 디스크 드라이버조차 없어서 Minix에서 하드 디스크로 복사한 후 부팅해야 했습니다.
0.12 (1992년 1월)
중요한 전환점: 라이선스를 자체 라이선스에서 GPLv2로 변경했습니다. 이전 라이선스는 상업적 배포를 금지했으나, GPL 전환으로 자유로운 배포가 가능해졌습니다. 가상 메모리(Virtual Memory)(스왑(Swap)) 지원이 추가되었습니다.
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 소켓(Socket) 인터페이스)
- 파일시스템: 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: 세분화된 잠금(Lock)(fine-grained locking) 도입
- IPv6 초기 지원 (실험적)
- 대용량 메모리 지원 개선 (2GB 이상)
- 향상된 네트워킹 성능
- 약 1,800,000줄의 코드
2.4 (2001년 1월 4일)
데스크탑과 서버 양쪽에서 리눅스의 실용성을 크게 높인 릴리즈.
- USB 서브시스템: 대중적인 USB 장치 지원
- ext3: 저널링(Journaling) 파일시스템 (ext2 호환)
- iptables / Netfilter: ipchains 대체, stateful 방화벽(Firewall)
- 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: 커널 코드 실행 중 선점(Preemption) 가능
- 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, 네임스페이스(Namespace) 확장, 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, 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 드라이버, 서명된 커널 모듈(Kernel Module) |
| 3.8 | 2013-02-18 | User namespace 완성 (컨테이너(Container) 기반), 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() 시스템 콜(System Call) (LTS) |
4.0 (2015년 4월 12일)
Live kernel patching이 도입된 릴리즈. 재부팅 없이 커널 코드를 패치(Patch)할 수 있는 인프라로, 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 링 버퍼(Ring Buffer), 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 마운트(Mount), KFENCE, 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) (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: 새로운 페이지(Page) 교체 알고리즘, 기존 LRU 대비 성능 향상
- Maple Tree: VMA 관리용 새로운 자료구조
- User-space 스택 언와인딩 지원
- LTS 릴리즈
6.x 주요 릴리즈 (2023 ~ 2026)
| 버전 | 릴리즈일 | 주요 기능 |
|---|---|---|
| 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 |
| 6.13 | 2025-01-19 | Lazy preemption 모델, Arm CCA, AArch64 GCS, RTNL per-namespace 잠금, XFS atomic writes, Rust trace events, TX H/W shaping API |
| 6.14 | 2025-03-23 | ntsync, Btrfs RAID1 read balancing, uncached buffered I/O, FUSE io_uring, 4096 CPU 코어, DRM panic AMDGPU, SELinux extended permissions |
| 6.15 | 2025-06-01 | Rust hrtimer/ARMv7, sched_ext 이벤트 리포팅, HW 래핑 암호화 키, EROFS 48-bit 블록, io_uring LSM 훅 |
| 6.16 | 2025-07-27 | Intel TDX 호스트, Intel APX, USB 오디오 오프로드, device memory TCP TX, XFS 대형 atomic writes, EXT4 large folio |
| 6.17 | 2025-09-28 | CPU 버그 완화 선택 간소화(mitigations= 통합) |
| 6.18 | 2025-11-30 | SLUB sheaves (per-CPU 캐싱), dm-pcache (persistent memory 캐시), PSP 암호화, AccECN(TCP), UDP RX 50% 개선, BPF 서명 프로그램, Swap Table Phase I (최대 20% 처리량 향상), longterm |
| 6.19 | 2026-02-08 | listns() 시스템 콜, Live Update Orchestrator (kexec 기반 라이브 커널 업데이트), PCIe 링크 암호화, Intel LASS, ARM MPAM, EXT4 대형 블록 지원 (50% 쓰기 성능 향상), Btrfs 비동기 체크섬 (+15% 처리량), Color Pipeline API (HDR), io_uring mixed SQE/zcrx, SFrame 스택 언와인딩, 6.x 마지막 메이저 (LTS 아님) |
| 7.0 | 2026-04-12 | Rust stable (실험 종료), sched_ext 정식 통합, XFS 자가 복구, AccECN, Wi-Fi 8/UHR 초기, ML-DSA 포스트 양자 서명, Swap Phase II, ZRAM 압축 writeback, ARM 64-byte atomic, Intel Nova Lake, AMD EPYC 5 KVM, AI 코딩 문서화, 스레드 생성 10~16% 가속 |
7.x -- 새로운 시대
7.0 (2026년 4월 12일)
6.19 이후 버전 번호가 7.0으로 점프한 릴리즈입니다. Linus Torvalds의 관례대로 마이너 번호가 19에 도달하면 메이저 번호를 올리는 방식이며, 기술적 단절(breaking change)은 없습니다. 7.0은 Rust의 실험 딱지 제거, sched_ext 정식 통합, XFS 자가 복구 등 여러 장기 프로젝트의 완성을 포함합니다.
핵심 변경사항
- Rust stable: 2022년 6.0에서 시작된 Rust 실험이 공식 종료되었습니다. Rust는 이제 C와 동등한 1급 언어로 인정되며, 서브시스템 메인테이너 재량으로 Rust 드라이버/모듈을 수용할 수 있습니다. 2025년 Linux Kernel Maintainers Summit에서 합의된 결정입니다.
- sched_ext 정식 통합: eBPF 프로그램으로 스케줄러 정책을 교체할 수 있는 확장형 스케줄링 프레임워크가 정식 포함되었습니다. 하이브리드 아키텍처(Intel Nova Lake 등)를 대상으로 재설계된 태스크(Task) 스케줄러와 결합됩니다.
- XFS 자가 복구(Autonomous Self-Healing): XFS 파일시스템이 메타데이터(Metadata) 손상을 자동으로 감지하고 복구하는 기능이 추가되었습니다.
- AI 코딩 문서화: 커널 개발에 AI 도구를 사용할 때의 정책이 공식 문서화되었습니다. AI 기여는
Assisted-by태그로 표기하며, 제출자가 전체 책임을 집니다.
성능 개선
- 스레드(Thread) 생성/해제 10~16% 가속: PID 할당 알고리즘 개선
- 파일 열기/닫기 4~16% 개선: 멀티코어 환경에서 잠금 경합(Lock Contention) 최소화
- Swap Phase II: 6.18에서 시작된 스왑 서브시스템 재구조화의 2단계, 메모리 압박 상황에서 처리량 추가 향상
- ZRAM 압축 writeback: 압축된 페이지를 직접 물리 디스크에 기록하여 불필요한 압축 해제 사이클(CPU/배터리 낭비) 제거
- AMD EPYC 스케줄러 확장성 최적화, 메모리 관리 성능 개선
하드웨어 지원
- ARM: 64-byte atomic 로드/스토어(FEAT_LS64, ARMv8.7+), Rockchip RK3576/RK3588 H.264/H.265 디코더, Qualcomm Snapdragon 7s Gen 3/Kaanapali, MediaTek Dimensity 6300/9200, Raspberry Pi BCM2712 RNG/Watchdog
- RISC-V: Zicfiss/Zicfilp 제어 흐름 무결성, SpacemiT K3 8/16코어, Alibaba T-Head TH1520 CPUFreq
- x86: Intel Nova Lake 지원 확대, Intel TSX auto 모드 기본화, AMD EPYC 5 KVM 지원
네트워킹 및 보안
- AccECN(Accurate ECN): TCP 혼잡 알림 프로토콜 개선
- Wi-Fi 8/UHR(802.11bn): 초기 지원 시작
- VSOCK 네트워크 네임스페이스 지원
- ML-DSA 포스트 양자 서명 검증(Signature Verification) 지원
- SELinux BPF 토큰(Token) 접근 제어 업데이트
- fserror 인프라: 파일시스템의 메타데이터 손상/I/O 오류를 사용자 공간에 표준화하여 보고하는 범용 프레임워크
파일시스템
- Btrfs: 페이지 크기보다 큰 블록 크기의 Direct I/O 지원, remap-tree 기능 초기 지원
- EXT4: 병렬 Direct I/O 쓰기 성능 향상
- XFS: 자가 복구(self-healing) 지원
스케줄러 변천사
리눅스 커널의 프로세스 스케줄러는 워크로드 변화에 맞춰 꾸준히 진화해왔습니다. 스케줄러 변천사는 커널 설계 철학의 변화를 가장 잘 보여주는 지표입니다.
| 스케줄러 | 커널 버전 | 알고리즘 | 시간 복잡도 | 핵심 특성 |
|---|---|---|---|---|
| 초기 | 0.01~2.4 | 순차 탐색 | O(n) | 단순, 프로세스 수 증가 시 성능 저하 |
| O(1) | 2.6.0 | 비트맵(Bitmap) + 큐 | O(1) | 상수 시간 선택, 대화형 휴리스틱 |
| CFS | 2.6.23 | Red-Black Tree | O(log n) | 공정성(Fairness) 보장, vruntime 기반 |
| EEVDF | 6.6 | Augmented RB-Tree | O(log n) | 지연(Latency)시간 보장, 공정성 유지 |
| sched_ext | 6.11 | BPF 정의 | 정책 의존 | 런타임 교체 가능 |
VCS(버전 관리 시스템) 변천사
리눅스 커널의 소스 코드 관리 방식은 프로젝트 규모의 성장과 함께 극적으로 변화해왔습니다. VCS 변천사는 오픈소스 개발 방법론의 진화를 직접적으로 반영합니다.
| 시기 | 관리 방식 | 특성 | 한계 |
|---|---|---|---|
| 1991~2002 | Tarball + 메일 패치 | Linus가 수작업 병합 | 확장성 한계, 병합 충돌 관리 어려움 |
| 2002~2005 | BitKeeper (상용) | 분산 VCS, 효율적 병합 | 라이선스 분쟁, 커뮤니티 갈등 |
| 2005~현재 | Git (오픈소스) | Linus 직접 개발, SHA-1 해시(Hash), 분산 | 없음 (사실상 표준) |
# 커널 Git 저장소 통계 확인
# 전체 커밋 수
git rev-list --count HEAD
# 기여자 수
git shortlog -sn | wc -l
# 최근 릴리즈 태그
git tag --sort=-v:refname | head -10
# 특정 릴리즈 간 변경 통계
git diff --stat v6.1..v6.6 | tail -1
# 릴리즈별 커밋 수
git rev-list --count v6.5..v6.6
커널 개발 프로세스
릴리즈 사이클
리눅스 커널은 약 9~10주 주기로 새 버전을 릴리즈합니다. 각 사이클은 다음 단계로 구성됩니다:
| 단계 | 기간 | 허용 사항 | 설명 |
|---|---|---|---|
| Merge Window | ~2주 | 새 기능 + 버그 수정 | 서브시스템 메인테이너가 준비한 변경사항을 Linus의 트리에 병합 |
| rc1 | merge window 종료 시 | 버그 수정만 | merge window 종료 선언, 안정화 시작 |
| rc2 ~ rc7 | ~7주 (매주) | 리그레션 수정만 | Release Candidate, 매주 일요일 릴리즈 |
| Final Release | 1일 | - | 마지막 rc가 충분히 안정적이면 최종 릴리즈 |
Stable/LTS 프로세스
LTS (Long Term Support) 정책
매년 1~2개의 릴리즈가 LTS로 지정되어 장기 지원을 받습니다. 일반 릴리즈가 다음 버전 출시까지(약 2~3개월)만 지원되는 것과 달리, LTS는 최소 2년에서 최대 6년까지 보안 및 중요 버그 수정 패치를 받습니다.
| LTS 버전 | 릴리즈일 | 예상 EOL | 주요 사용처 |
|---|---|---|---|
| 6.18 | 2025-11 | 2028-12 (연장) | 최신 longterm, 신규 장기 유지보수 기준점 |
| 6.12 | 2024-11 | 2028-12 (연장) | PREEMPT_RT, 임베디드/서버, RT 요구 환경 |
| 6.6 | 2023-10 | 2027-12 (연장) | Debian 13, Ubuntu 24.04 |
| 6.1 | 2022-12 | 2026~2028 | Debian 12, 범용 서버 |
| 5.15 | 2021-10 | 2026-12 | Ubuntu 22.04, 임베디드 |
| 5.10 | 2020-12 | 2026-12 | Android GKI, 임베디드 |
Stable 패치 선정 기준
stable 트리에 백포트되는 패치는 엄격한 기준을 따릅니다:
# stable 패치 선정 기준 (Documentation/process/stable-kernel-rules.rst)
1. 메인라인에 이미 머지된 패치여야 합니다
2. 실제 버그를 수정하거나 보안 문제를 해결해야 합니다
3. 100줄 이하의 작은 패치여야 합니다 (예외 가능)
4. 명확한 테스트를 거쳐야 합니다
5. Cc: stable@vger.kernel.org 태그가 있어야 합니다
# 패치에 stable 태그 추가 방법:
Cc: stable@vger.kernel.org
# 또는 특정 버전 지정:
Cc: <stable@vger.kernel.org> # v5.10+
커널 거버넌스
서브시스템 메인테이너 구조
리눅스 커널은 계층적 메인테이너 구조로 관리됩니다. 이 구조는 "신뢰의 사슬(web of trust)"이라고도 불립니다:
# MAINTAINERS 파일 활용법
# 특정 파일의 메인테이너 확인
scripts/get_maintainer.pl -f drivers/net/dsa/mv88e6xxx/chip.c
# MAINTAINERS 엔트리 검색
grep -A 10 "DSA" MAINTAINERS
# 패치 제출 시 수신자 자동 확인
scripts/get_maintainer.pl 0001-fix-bug.patch
MAINTAINERS 파일에는 수천 개의 엔트리가 등록되어 있으며, 매 릴리즈마다 대규모 개발자 집단이 패치 리뷰와 병합에 참여합니다.
패치 제출 절차
# 패치 작성 및 제출 절차
# 1. 기능 브랜치 생성
git checkout -b fix/my-bug-fix origin/master
# 2. 코드 수정 및 커밋
git add drivers/net/dsa/my_fix.c
git commit -s # Signed-off-by: 자동 추가
# 3. 커밋 메시지 형식
# net: dsa: fix source port decode for multichip
#
# When using multichip cascade topology, the source
# device ID was not properly extracted from the DSA
# tag, causing packets to be delivered to wrong ports.
#
# Fixes: abc1234 ("net: dsa: add multichip support")
# Cc: stable@vger.kernel.org
# Signed-off-by: Developer Name <dev@example.com>
# 4. 패치 형식 검사
scripts/checkpatch.pl --strict 0001-*.patch
# 5. 메인테이너 확인
scripts/get_maintainer.pl 0001-*.patch
# 6. 패치 발송
git send-email --to=maintainer@kernel.org \
--cc=linux-kernel@vger.kernel.org \
0001-*.patch
커널 규모 변화
리눅스 커널의 소스 코드 규모는 약 30년간 꾸준히 성장해왔습니다. 아래는 주요 버전별 대략적인 코드 라인 수(LOC, drivers 포함)입니다:
| 버전 | 연도 | 코드 라인 수 (약) | 파일 수 (약) | 디렉토리 비중 |
|---|---|---|---|---|
| 0.01 | 1991 | 10,000 | 88 | kernel/ 40% |
| 1.0 | 1994 | 176,000 | 561 | drivers/ 30% |
| 2.0 | 1996 | 780,000 | 2,100 | drivers/ 40% |
| 2.4.0 | 2001 | 3,800,000 | 8,200 | drivers/ 50% |
| 2.6.0 | 2003 | 5,900,000 | 15,000 | drivers/ 55% |
| 2.6.32 | 2009 | 12,600,000 | 28,000 | drivers/ 60% |
| 3.0 | 2011 | 14,600,000 | 37,000 | drivers/ 62% |
| 4.0 | 2015 | 19,500,000 | 49,000 | drivers/ 65% |
| 5.0 | 2019 | 26,100,000 | 63,000 | drivers/ 67% |
| 6.0 | 2022 | 30,400,000 | 74,000 | drivers/ 68% |
| 6.1 | 2022 | 31,000,000 | 76,000 | drivers/ 68% |
| 6.12 | 2024 | 33,500,000 | 82,000 | drivers/ 69% |
| 7.0 | 2026 | 36,000,000 | 88,000 | drivers/ 69%, rust/ 등장 |
코드 증가의 대부분은 디바이스 드라이버(drivers/ 디렉토리)가 차지합니다. 전체 코드의 약 60~70%가 드라이버 코드이며, 커널 핵심(코어 서브시스템)은 상대적으로 적은 비율을 차지합니다.
# 전체 코드 라인 수
find . -name '*.[chS]' -not -path './tools/*' | xargs wc -l
# drivers/ 디렉토리 비율
find drivers/ -name '*.[chS]' | xargs wc -l
# 디렉토리별 코드 비중
for dir in drivers kernel mm net fs arch; do
echo "$dir: $(find $dir -name '*.[chS]' | xargs cat | wc -l) lines"
done
# 릴리즈 간 변경 통계
git diff --stat v6.1..v6.6 | tail -1
개발 통계
리눅스 커널은 세계에서 가장 활발하게 개발되는 오픈소스 프로젝트 중 하나입니다. 매 릴리즈마다 수천 명의 개발자가 수만 건의 패치를 기여합니다.
| 통계 항목 | 6.x~7.0 릴리즈 기준 (약) | 비고 |
|---|---|---|
| 릴리즈당 커밋 수 | 15,000~18,000 | rc 포함, 6.12(LTS)가 18.2K로 최대 |
| 릴리즈당 기여자 수 | 1,800~2,200 | Signed-off-by 기준 |
| 릴리즈당 기여 회사 수 | 200~250 | Linux Foundation 보고서 기준 |
| 하루 평균 커밋 | 약 200~250 | merge window 기간 더 높음 |
| 하루 평균 변경 라인 | 약 10,000+ | 추가+삭제 합산 |
| 전체 기여자 누적 | 21,000+ | git log 기준 (7.0 기준) |
| 전체 커밋 누적 | 1,200,000+ | git rev-list 기준 (7.0 기준) |
| 전체 코드 라인 | ~36,000,000 | 7.0 기준, drivers/ 포함 |
주요 기여 조직
| 조직 | 기여 비율 (약) | 주요 기여 영역 |
|---|---|---|
| Intel | 10~12% | x86, GPU(i915), 네트워킹, 보안 |
| Red Hat | 8~10% | 파일시스템, 가상화(Virtualization), 네트워킹 |
| 6~8% | Android, BPF, 메모리 관리 | |
| Linaro | 4~6% | ARM, 전원 관리(Power Management), 부트 |
| SUSE | 3~5% | 파일시스템(Btrfs), 보안 |
| AMD | 3~5% | AMDGPU, 프로세서 지원 |
| Meta | 2~4% | BPF, 네트워킹, sched_ext |
| Huawei | 2~4% | 파일시스템, 스케줄링, ARM |
| 개인 기여자 | 10~15% | 다양한 영역 |
아키텍처 지원 역사
리눅스 커널은 i386 단일 아키텍처에서 시작하여 현재 30개 이상의 하드웨어 아키텍처를 지원합니다.
| 아키텍처 | 최초 지원 버전 | 현재 상태 | 주요 사용처 |
|---|---|---|---|
| x86 (i386) | 0.01 (1991) | 활발 | 데스크탑, 서버 |
| x86_64 (AMD64) | 2.4.x (2001) | 활발 (주력) | 서버, 클라우드 |
| Alpha | 1.2 (1995) | 제거됨 (6.x) | 역사적 |
| SPARC | 1.2 (1995) | 유지보수 | 레거시 서버 |
| MIPS | 1.2 (1995) | 유지보수 | 네트워크 장비, 임베디드 |
| ARM (32-bit) | 2.0 (1996) | 유지보수 | 구형 임베디드 |
| PowerPC | 2.0 (1996) | 활발 | 서버 (IBM Power) |
| ARM64 (AArch64) | 3.7 (2012) | 활발 (주력) | 모바일, 서버, Mac |
| RISC-V | 4.15 (2018) | 활발 (성장) | 임베디드, 학술 |
| LoongArch | 5.19 (2022) | 활발 | Loongson 프로세서 |
보안 관련 주요 사건
리눅스 커널의 보안은 하드웨어 취약점 발견, LSM 프레임워크 발전, 커널 자체 방어 기능 강화를 통해 지속적으로 발전해왔습니다.
| 연도 | 사건 | 커널 대응 | 영향 |
|---|---|---|---|
| 2001 | LSM(Linux Security Module) 프레임워크 | SELinux, AppArmor 등 플러그인 보안 | 다양한 보안 정책 지원 |
| 2009 | SELinux 완전 통합 | NSA 개발 강제 접근 제어(MAC) | 서버 보안 표준 |
| 2012 | seccomp-bpf (3.5) | BPF 기반 시스템 콜 필터링 | 컨테이너 보안 기반 |
| 2016 | Dirty COW (CVE-2016-5195) | copy-on-write 레이스 컨디션 수정 | 권한 상승 취약점 |
| 2018 | Meltdown/Spectre | KPTI, Retpoline, IBRS/IBPB | CPU 하드웨어 취약점 시대 개막 |
| 2019 | Lockdown LSM (5.4) | 커널 무결성 보호 | Secure Boot 연동 강화 |
| 2021 | Landlock LSM (5.13) | 비특권 사용자 샌드박싱 | 프로세스별 접근 제어(Access Control) |
| 2022 | Retbleed | return speculation 완화 | 추가 CPU 취약점 대응 |
| 2024 | Intel shadow stack (6.6) | 하드웨어 기반 ROP 방어 | 커널 제어 흐름 무결성 |
# 현재 커널의 보안 기능 확인
# LSM 모듈 확인
cat /sys/kernel/security/lsm
# KPTI 상태
dmesg | grep -i "page table isolation"
# Spectre/Meltdown 완화 상태
cat /sys/devices/system/cpu/vulnerabilities/*
# seccomp 상태
grep Seccomp /proc/self/status
# Lockdown 상태
cat /sys/kernel/security/lockdown
배포판과 커널 버전 관계
주요 Linux 배포판은 메인라인 커널을 기반으로 자체 패치를 적용하여 배포합니다. 배포판 선택 시 커널 버전을 확인하는 것은 하드웨어 호환성과 기능 지원에 직접적인 영향을 미칩니다.
| 배포판 | 기반 커널 | 지원 기간 | 특성 |
|---|---|---|---|
| RHEL 7 | 3.10 | ~2024 (ELS) | 대규모 백포트, ABI 안정성 |
| RHEL 8 | 4.18 | ~2029 | BPF, TLS offload |
| RHEL 9 | 5.14 | ~2032 | core scheduling, io_uring |
| Ubuntu 20.04 LTS | 5.4 | ~2030 (ESM) | io_uring, WireGuard 백포트 |
| Ubuntu 22.04 LTS | 5.15 | ~2032 (ESM) | NTFS3, DAMON |
| Ubuntu 24.04 LTS | 6.8 | ~2034 (ESM) | Intel FRED, Rust 지원 |
| Debian 12 (Bookworm) | 6.1 | ~2028 (LTS) | MGLRU, Rust |
| Debian 13 (Trixie) | 6.6+ | ~2030 (예상) | EEVDF |
| SLES 15 SP5 | 5.14 | ~2031 | LTSS 추가 가능 |
| Android 14 GKI | 5.15/6.1 | 기기 의존 | Generic Kernel Image |
| Fedora (최신) | 최신 stable | ~13개월 | 빠른 업데이트 |
| Arch Linux | 최신 stable | 롤링 | 항상 최신 |
# 현재 커널 버전 확인
uname -r
# 상세 빌드 정보
cat /proc/version
# 배포판 커널 설정 확인
ls /boot/config-$(uname -r)
zcat /proc/config.gz 2>/dev/null || cat /boot/config-$(uname -r)
# 배포판별 커널 패키지 확인
# Debian/Ubuntu:
dpkg -l | grep linux-image
# RHEL/CentOS:
rpm -qa | grep kernel
# Arch:
pacman -Q | grep linux
uname -r 버전만으로 기능 지원 여부를 판단하면 안 됩니다.
예를 들어 RHEL 7의 3.10 커널에는 4.x/5.x에서 백포트된 수천 개의 패치가 포함되어 있습니다.
커널 라이선스와 법적 쟁점
리눅스 커널의 라이선스 역사는 오픈소스 소프트웨어 법률의 발전과 밀접하게 연관되어 있습니다.
| 시기 | 사건 | 의미 |
|---|---|---|
| 1991 | 자체 라이선스 (상업 배포 금지) | 초기 배포 제한 |
| 1992 | GPLv2 전환 | 자유로운 배포, 개발자 참여 폭발 |
| 2003~2007 | SCO vs IBM 소송 | Linux에 Unix 코드 포함 주장 -> 패소 |
| 2006 | GPLv3 발표, Linus 거부 | Linux는 GPLv2 유지 (DRM 조항 반대) |
| 2017 | SPDX 라이선스 태그 도입 | 모든 소스 파일에 기계 읽기 가능한 라이선스 표시 |
| 2018 | Contributor Covenant 채택 | 행동 강령(Code of Conduct) 공식화 |
| 2022 | Rust 코드 듀얼 라이선스 | GPL-2.0 OR Apache-2.0 (Rust 바인딩) |
/* SPDX 라이선스 태그 예시 (모든 커널 소스 파일 첫 줄) */
// SPDX-License-Identifier: GPL-2.0-only
/* 또는 */
// SPDX-License-Identifier: GPL-2.0-or-later
/* Rust 바인딩의 경우 */
// SPDX-License-Identifier: GPL-2.0 OR Apache-2.0
Rust in Kernel 역사
C 언어로만 작성되던 리눅스 커널에 Rust가 도입된 것은 30년 역사상 가장 큰 언어 변화입니다.
| 시기 | 사건 | 의미 |
|---|---|---|
| 2020-07 | Rust for Linux RFC 제안 | Miguel Ojeda의 최초 제안 |
| 2021-04 | RFC v2 패치 시리즈 | 커뮤니티 피드백 반영 |
| 2022-10 | 6.0: Rust 인프라 초기 도입 | CONFIG_RUST 빌드 옵션 |
| 2022-12 | 6.1: 공식 통합 | Rust 커널 모듈 작성 가능 |
| 2023-04 | 6.3: Rust alloc 모듈 | 커널 메모리 할당자(Memory Allocator) 바인딩 |
| 2024-05 | 6.9: 첫 Rust 파일시스템(PuzzleFS) | 실용적 Rust 드라이버 |
| 2025-01 | 6.13: Rust trace events | 트레이싱 연동 |
| 2025-06 | 6.15: Rust hrtimer/ARMv7 | 타이머(Timer)/아키텍처 확장 |
| 2025-11 | 6.18: Rust debugfs, sg_table, request_irq, maple tree | 디버그/IRQ/자료구조 바인딩 확대 |
| 2026-02 | 6.19: Rust PWM, I2C 추상화, bounded integer | 주변장치 드라이버 본격 지원 |
| 2026-04 | 7.0: Rust stable (실험 종료) | C와 동등한 1급 언어로 공식 승격 |
# Rust 커널 빌드 설정
# Rust 도구 체인 설치 확인
rustup show
rustc --version
bindgen --version
# 커널 Rust 지원 확인
make rustavailable
# Rust 모듈 빌드
make menuconfig # General setup -> Rust support 활성화
make -j$(nproc)
/* 최소 Rust 커널 모듈 예시 */
// SPDX-License-Identifier: GPL-2.0
//! Rust 최소 커널 모듈
use kernel::prelude::*;
module! {
type: RustMinimal,
name: "rust_minimal",
author: "Developer",
description: "Rust minimal module",
license: "GPL",
}
struct RustMinimal;
impl kernel::Module for RustMinimal {
fn init(_module: &ThisModule) -> Result<Self> {
pr_info!("Rust minimal module loaded\n");
Ok(RustMinimal)
}
}
impl Drop for RustMinimal {
fn drop(&mut self) {
pr_info!("Rust minimal module unloaded\n");
}
}
서브시스템 메인테이너 트리
리눅스 커널의 개발은 수십 개의 서브시스템 트리로 분산되어 진행됩니다. 각 서브시스템 메인테이너는 자신의 Git 트리에서 패치를 관리하고, merge window 기간에 Linus에게 pull request를 보냅니다.
| 서브시스템 트리 | 주 관리자 | Git URL | 범위 |
|---|---|---|---|
| net-next | David Miller, Jakub Kicinski | git.kernel.org/.../net-next.git | 네트워킹 신기능 |
| net | David Miller | git.kernel.org/.../net.git | 네트워킹 버그 수정 |
| mm | Andrew Morton | git.kernel.org/.../mm.git | 메모리 관리 |
| tip | Ingo Molnar, Thomas Gleixner | git.kernel.org/.../tip.git | x86, 스케줄러, 잠금 |
| block | Jens Axboe | git.kernel.org/.../block.git | 블록 I/O |
| bpf-next | Alexei Starovoitov, Daniel Borkmann | git.kernel.org/.../bpf-next.git | eBPF |
| drm | Dave Airlie 외 | git.kernel.org/.../drm.git | GPU/디스플레이 |
| kvm | Paolo Bonzini | git.kernel.org/.../kvm.git | 가상화 |
| driver-core | Greg Kroah-Hartman | git.kernel.org/.../driver-core.git | 드라이버 코어, USB |
| rust | Miguel Ojeda | git.kernel.org/.../rust.git | Rust 인프라 |
| sound | Takashi Iwai | git.kernel.org/.../sound.git | ALSA/ASoC |
| security | Paul Moore 외 | git.kernel.org/.../security.git | LSM, SELinux |
| arm-soc | Arnd Bergmann, Olof Johansson | git.kernel.org/.../arm-soc.git | ARM SoC |
# 서브시스템 트리 활용
# 특정 서브시스템 트리 추가
git remote add net-next https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git
git fetch net-next
# 서브시스템 트리의 최신 패치 확인
git log --oneline net-next/main -20
# 서브시스템별 merge window 기여 확인
git log --oneline --merges v6.18..v6.19 | head -30
# 특정 서브시스템의 패치 수 통계
git log --oneline v6.18..v6.19 -- net/ drivers/net/ | wc -l
git log --oneline v6.18..v6.19 -- mm/ | wc -l
git log --oneline v6.18..v6.19 -- drivers/gpu/ | wc -l
linux-next 트리는 다음 merge window에 포함될
모든 서브시스템 트리의 통합 빌드입니다. 매일 업데이트되며, 서브시스템 간 충돌을 사전에 감지하는 역할을 합니다.
릴리즈별 주요 기능 상세
이 섹션에서는 커널 역사에서 특히 영향력이 컸던 기능들의 도입 배경, 설계 결정, 이후 발전 과정을 상세히 다룹니다.
cgroups (2.6.24, 2008)
Control Groups는 Google 엔지니어들(Paul Menage, Rohit Seth)이 개발한 프로세스 자원 제어 메커니즘입니다. 프로세스 그룹에 CPU, 메모리, I/O, 네트워크 대역폭(Bandwidth) 등의 자원 한도를 설정할 수 있습니다.
- cgroups v1 (2.6.24, 2008): 계층적 자원 제어, 각 컨트롤러 독립 계층
- cgroups v2 (4.5, 2016): 단일 계층 구조, 모든 컨트롤러 통합
- 컨테이너 기술(Docker, LXC, Kubernetes)의 핵심 기반
- systemd의 서비스 자원 관리 기반
eBPF (3.18~현재)
extended Berkeley Packet Filter는 커널 내에서 안전하게 실행되는 사용자 정의 프로그램 프레임워크입니다. 원래 패킷(Packet) 필터링용이었으나, 현재는 트레이싱, 보안, 네트워킹, 스케줄링 등 거의 모든 커널 서브시스템에서 사용됩니다.
| 버전 | eBPF 기능 | 의의 |
|---|---|---|
| 3.18 | bpf() 시스템 콜 도입 | 사용자 공간에서 BPF 프로그램 로드 |
| 4.1 | kprobes 연동 | 커널 함수 트레이싱 |
| 4.7 | cgroup BPF | cgroup 단위 네트워크 정책 |
| 4.9 | XDP (eXpress Data Path) | NIC 드라이버 레벨 패킷 처리 |
| 4.15 | BPF Type Format (BTF) | 타입 정보 기반 이식성 |
| 5.2 | BPF 트램폴린 | fentry/fexit 고성능 트레이싱 |
| 5.8 | BPF 링 버퍼 | 고성능 이벤트 전달 |
| 6.11 | sched_ext | BPF 기반 스케줄러 교체 |
io_uring (5.1~현재)
Jens Axboe가 개발한 io_uring은 비동기 I/O의 혁명적 개선입니다. 기존 aio(Linux AIO)와 epoll의 한계를 극복하기 위해, 사용자-커널 간 공유 링 버퍼로 시스템 콜 오버헤드(Overhead)를 최소화했습니다.
- Submission Queue (SQ): 사용자가 I/O 요청을 넣는 링
- Completion Queue (CQ): 커널이 완료 결과를 넣는 링
- Polling 모드: 시스템 콜 없이 I/O 처리 (최대 성능)
- 지원 연산: read/write, send/recv, accept, connect, splice, 파일 관리 등
PREEMPT_RT (6.12, 2024)
약 20년간 out-of-tree로 유지된 실시간 스케줄링 패치가 드디어 메인라인에 통합되었습니다. Thomas Gleixner와 Peter Zijlstra의 주도로, 모든 스핀락(Spinlock)을 RT-mutex로 대체하고 인터럽트(Interrupt)를 스레드화하여 결정적(deterministic) 지연시간을 보장합니다.
| 시기 | PREEMPT_RT 이정표 | 상세 |
|---|---|---|
| 2004 | PREEMPT_RT 패치 시작 | Ingo Molnar의 최초 패치 |
| 2006 | -rt 패치 시리즈 안정화 | 산업용 환경에서 채택 시작 |
| 2015 | Linux Foundation RT 프로젝트 | 기업 지원 시작 |
| 2024 | 6.12: 메인라인 통합 | CONFIG_PREEMPT_RT 공식 지원 |
# PREEMPT_RT 확인
uname -a | grep -i rt
cat /sys/kernel/realtime
# preemption 모델 확인
cat /sys/kernel/debug/sched/preempt
# cyclictest로 실시간 지연시간 측정
cyclictest -t1 -p 80 -n -i 1000 -l 10000
주제별 변경 이력 모음
개별 문서마다 장문의 버전별 변경 이력을 반복해서 두면, 동일한 릴리즈 정보를 여러 곳에서 중복 관리해야 합니다. 이 섹션은 그런 중복을 줄이기 위해 주요 주제의 연대기성 변경 이력을 한곳에 모아 정리한 것입니다. 각 문서에서는 현재 동작을 이해하는 데 필요한 버전 차이만 간단히 남기고, 상세한 연혁은 여기에서 이어서 확인하면 됩니다.
Context Switching 관련 변경 이력
Context Switching 문서에서 자주 참고하는 최근 변경 이력을 간단히 모으면 다음과 같습니다.
| 커널 | 주요 변경 사항 | 실무상 의미 |
|---|---|---|
| 6.13 | PREEMPT_LAZY 도입 | 비실시간 태스크의 지연 선점 정책이 추가되어 cond_resched()와의 관계를 다시 이해해야 합니다. |
| 6.14 | x86 mm_cpumask 지연 갱신 | switch_mm_irqs_off() 경합이 줄어 멀티스레드 워크로드의 TLB 플러시 확장성이 개선됩니다. |
| 6.14 | per-NUMA idle cpumask 분리 | 다음 CPU 선택 과정의 지역성이 개선되어 원격 NUMA 캐시 오염이 줄어듭니다. |
| 6.15 | CONFIG_SCHED_DEBUG 조건부 컴파일 제거 | 별도 디버그 전용 커널 없이도 스케줄러 통계와 진단 지점을 관찰하기 쉬워집니다. |
| 6.15 | sched_ext 토폴로지 인식 유휴 CPU 선택 개선 | 확장 스케줄러 사용 시 코어·소켓·NUMA 계층을 더 잘 반영합니다. |
Wireless 관련 변경 이력
Wireless 문서의 긴 버전표는 무선 세대 전환과 커널 지원 진화를 이해하는 데 유용하지만, 실제로는 연대기 정보의 비중이 큽니다. 핵심 흐름은 아래 표로 한곳에 정리합니다.
| 커널 | 무선 서브시스템 변경 | 드라이버 변화 | 보안/프로토콜 |
|---|---|---|---|
| 4.0 (2015) | mac80211 TDLS 지원 강화 | ath10k VHT MU-MIMO | - |
| 4.14 (2017) | cfg80211 Indoor/Outdoor 구분 | mt76 초기 코드 병합 | - |
| 4.17 (2018) | cfg80211 SAE 인증 지원 | iwlwifi HE 초기 지원 | WPA3-SAE 기반 |
| 4.20 (2018) | cfg80211 OWE 지원 | ath10k CT 펌웨어 개선 | OWE (Enhanced Open) |
| 5.1 (2019) | mac80211 HE (802.11ax) 기본 지원 | - | TWT 기초 |
| 5.6 (2020) | mac80211 HE MU-EDCA, BSS Coloring | ath11k 초기 코드 병합 | PMF 필수화 경향 |
| 5.12 (2021) | NL80211_BAND_6GHZ, 6 GHz 채널 정의 | ath11k 6 GHz 지원 | 6 GHz 전력 등급 |
| 5.18 (2022) | EHT 기본 구조체 추가 | rtw89 Wi-Fi 6E | - |
| 6.1 (2022) | 320 MHz 채널, EHT Capabilities IE | ath12k 초기 코드 | EHT 보안 확장 |
| 6.2 (2023) | MLO 프레임워크(ieee80211_vif.link[]) | iwlwifi BE200 코드 | MLO 보안 연동 |
| 6.5 (2023) | TID-to-Link Mapping, 링크 전환 API | ath12k WCN7850, mt7996 | - |
| 6.8 (2024) | AFC 프레임워크, EMLSR 기초 | iwlwifi MLO STA | AFC 인증 |
| 6.10 (2024) | MLO 로밍, Multi-RU 개선 | mt7925 클라이언트 Wi-Fi 7 | - |
| 6.12+ (2024) | EMLSR/EMLMR, 4096-QAM 완전 지원 | 전 드라이버 Wi-Fi 7 안정화 | FT-SAE 완성 |
Bluetooth 관련 변경 이력
Bluetooth 문서의 버전별 이력도 연대기 중심 정보이므로 이 페이지에 함께 배치합니다. Bluetooth는 LE Audio와 ISO 전송, 그리고 hci_sync.c 전환이 큰 분기점입니다.
| 커널 | 주요 변경 사항 |
|---|---|
3.0 | Bluetooth 4.0 LE 기본 지원 추가 |
3.5 | mgmt API 도입, hciconfig/hcitool 대체 흐름 시작 |
3.12 | LE Dual Mode, Privacy 1.1 지원 |
3.16 | LE Secure Connections(Bluetooth 4.2) 지원 |
3.19 | Privacy 1.2, RPA Resolution Offloading |
4.2 | Extended Advertising 예비 코드, LE Data Length Extension |
4.8 | LE PHY 2M/Coded 지원(Bluetooth 5.0) |
4.20 | Extended Advertising / Periodic Advertising 지원 |
5.0 | Mesh 지원 기반, LE Extended Scanning |
5.4 | Advertising Sets 다중 인스턴스, hci_sync.c 리팩토링 시작 |
5.12 | MSFT Vendor Extension, mgmt Quality Report |
5.13 | hci_sync.c 도입, HCI 요청 처리 구조 재정비 시작 |
5.15 | ISO 소켓(BTPROTO_ISO), CIS/BIS 기본 지원 |
5.19 | LC3 코덱 ID 등록, ISO Test 모드 |
6.0 | LE BIG 생성/종료, hci_request.c 제거 시작 |
6.2 | QoS 개선, ISO 소켓 안정화 |
6.3 | EATT 커널 측 지원 개선 |
6.5 | hci_sync.c 전면 전환 완료, hci_request.c 제거 |
6.7 | ISO Connected/Broadcast 안정화, 다중 CIS 지원 개선 |
6.8+ | PAwR 초기 지원 |
hci_sync.c 전환은 단순 리팩토링이 아니라, 비동기 HCI 요청 모델을 동기화된 워크큐 기반으로 재구성한 사건입니다. 이후 ISO, Extended Advertising, LE Audio 계열 기능이 훨씬 다루기 쉬워졌습니다.
Wait/Wound Mutex 관련 변경 이력
Wait/Wound Mutex 문서는 DRM과 GPU 예약 객체 경로에 밀접하게 연결되어 있어 버전별 변화가 많지만, 긴 타임라인 자체는 이곳에 모으는 편이 문서 구조상 더 안정적입니다.
| 커널 | 연도 | 주요 변경 | 실무상 의미 |
|---|---|---|---|
| v3.11 | 2013 | ww_mutex 최초 도입, Wound-Wait 구현 | DRM modeset lock이 데드락 회피 가능한 공통 잠금 모델을 얻었습니다. |
| v3.17 | 2014 | dma_resv 전신 도입 | 버퍼 예약과 fence 관리가 GPU 메모리 경로의 표준 패턴이 되기 시작했습니다. |
| v4.4 | 2016 | lockdep 검증 강화 | ww_class 혼용과 재시도 버그를 조기에 잡기 쉬워졌습니다. |
| v4.19 | 2018 | PREEMPT_RT 지원 개선 | RT 환경에서 우선순위 역전 완화 효과를 기대할 수 있습니다. |
| v5.3 | 2019 | Wait-Die 알고리즘 추가 | 서브시스템 요구에 따라 Wound-Wait 외 정책 선택지가 생겼습니다. |
| v5.5 | 2020 | reservation_object → dma_resv 이름 변경 | 신규 코드와 백포트 코드의 API 차이를 항상 확인해야 합니다. |
| v6.0 | 2022 | shared/exclusive fence → usage 기반 통합 | fence 추가 API가 단순해졌지만 구형 코드와의 호환 분기가 필요합니다. |
| v6.4 | 2023 | drm_exec 프레임워크 도입 | 수동 -EDEADLK 재시도 루프보다 상위 헬퍼 사용이 사실상 표준이 됩니다. |
| v6.6 | 2023 | drm_exec 보강 | 중복 객체와 배열 준비 처리 등 실제 드라이버 적용성이 좋아졌습니다. |
| v6.8 | 2024 | wound 전파 경로 최적화 | 불필요한 깨우기와 경합 비용을 줄이는 방향으로 다듬어졌습니다. |
| v6.12+ | 2024~ | AMDGPU, Xe, Nouveau의 drm_exec 채택 확대 | 신규 GPU 드라이버는 raw ww_mutex보다 drm_exec 중심 설계를 우선 고려해야 합니다. |
디버깅 도구 관련 변경 이력
디버깅 & 트러블슈팅 문서는 최신 커널의 sanitizer, drgn, RV, BPF 디버깅 흐름을 폭넓게 다루기 때문에 연대기 표가 길어지기 쉽습니다. 주요 변화는 다음과 같이 중앙에서 관리합니다.
| 커널 | 핵심 변화 | 영향 |
|---|---|---|
| 6.8 | KASAN stacktrace 기본값 정리, Stack Depot 개선 | 리포트 품질과 메모리 사용량의 균형이 개선되었습니다. |
| 6.10 | stack_depot_save_flags(), Generic KASAN report_async | 비동기 리포트 수집이 쉬워지고 호출 경로 오염이 줄었습니다. |
| 6.12 | KFENCE 런타임 조정, RV 프레임워크 확장 | 운영 중 탐지율 제어와 실시간성 검증 자동화가 쉬워졌습니다. |
| 6.14 | KMSAN 초기화 검사 확장, DAMON 기반 메모리 이상 탐지 통합 | 메모리 릭과 hot path 이상 징후를 함께 추적하기 좋아졌습니다. |
| 6.15 | KMSAN s390 포팅 | 비-x86 플랫폼에서도 최신 메모리 초기화 진단이 가능해졌습니다. |
| 6.16 | HW-Tag KASAN write panic 모드, RV LTL 지원 | 프로덕션 KASAN과 런타임 검증의 실용성이 올라갔습니다. |
| 6.17 | ARMv9 MTE store-only, 보안 core dump 개선 | 프로덕션 오버헤드를 낮추면서 메모리 태깅 디버깅을 유지할 수 있습니다. |
| 6.18 | kasan.write_only, BPF 프로그램 서명 초기 지원 | 상시 KASAN과 공급망 무결성 기반 디버깅이 강화되었습니다. |
perf 관련 변경 이력
perf 문서는 툴 사용법 자체보다 최신 PMU와 언와인딩 인프라 변화 때문에 버전표가 커집니다. 릴리즈별 흐름은 아래 표로 모읍니다.
| 커널 | perf 변경 | 의미 |
|---|---|---|
| 6.12 LTS | PREEMPT_RT 메인라인 병합, perf 이벤트 RT 컨텍스트 안전성 정비 | vanilla 커널에서 RT 워크로드 perf 분석이 쉬워졌습니다. |
| 6.13 | Intel HFI 클래스 카운터, AMD Zen 5 IBS L3 카운터 | 최신 CPU의 클래스별 IPC와 캐시 분석 정밀도가 올라갔습니다. |
| 6.14 | perf BPF 컴파일 백엔드 정식, perf record -e bpf-output: | BPF 기반 분석을 perf 워크플로 안에서 직접 처리할 수 있습니다. |
| 6.15 | Granite Rapids PEBS metrics, ARM SPE v1.2 stall 카운터 | 최신 서버 마이크로아키텍처 분석이 정확해졌습니다. |
| 6.16 | perf c2c의 HBM/CXL 메모리 영역 분류 | 다중 메모리 계층의 NUMA false-sharing 분석이 쉬워졌습니다. |
| 6.17 | Deferred user-space unwinder 인프라 병합 | 사용자 공간 스택 언와인딩이 더 안전하고 저비용으로 바뀌는 기반이 마련되었습니다. |
| 6.18 LTS | AMD IBS / Intel PEBS 동기화 안정화 | LTS 기준 perf 워크플로의 신뢰성이 높아졌습니다. |
GPU / DRM 관련 변경 이력
GPU (DRM/KMS) 문서는 2025~2026년 드라이버 머지와 가속기 확장 때문에 릴리즈 매트릭스가 커졌습니다. 주요 줄기는 다음과 같습니다.
| 커널 | GPU/Accel 주요 변경 |
|---|---|
| 6.10 | drm_panic 인프라 도입, nouveau NVK Vulkan 안정화 |
| 6.12 | Intel Xe 드라이버 정식 승격, amdgpu GFX12 초기 지원 |
| 6.14 | AMDXDNA 머지, DMEM cgroup 머지, amdgpu DRM Panic 지원 |
| 6.15 | Nova(Rust NVIDIA) 머지, Rockchip Rocket NPU 머지 |
| 6.16 | Color Pipeline API 머지, Xe2 EU stall sampling |
| 6.17 | Intel Xe3 Panther Lake 안정화, Battlemage SR-IOV |
| 6.18 LTS | Nova GSP RPC 경로 확장, RDNA4 성능 튜닝 |
| 6.19 | AMDGPU HDR 하드웨어 가속, GPU 스케줄러 성능 개선 |
VirtIO 관련 변경 이력
virtio / vhost 문서는 최근 릴리즈의 기능 추가를 한눈에 보는 용도로 버전표가 컸습니다. 그 정보는 중앙 문서로 옮겨 관리합니다.
| 커널 | virtio / vhost 변화 |
|---|---|
| 6.10 | virtio-fs 멀티큐, virtio-net device stats, VDUSE virtio-net 정식화 |
| 6.12 | vsock 성능 개선, vDPA MAC 주소 설정, balloon 신규 통계 |
| 6.13 | VDUSE 다중 vq group, DMA 정렬 수정 |
| 6.14~6.15 | VIRTIO_F_IN_ORDER 지원, packed virtqueue 기능 확장 |
| 6.16 | virtio_rtc, VDUSE 다중 address space |
| 6.17~6.18 | vhost-net/vsock 수정, guest_memfd와 virtio 장치 상호작용 정리 |
Serial / TTY 관련 변경 이력
Serial/TTY 문서의 최신 동향 표 역시 연대기 정보 비중이 높습니다. 핵심 변화는 다음과 같습니다.
| 커널 | 변경사항 | 영향 |
|---|---|---|
| 6.7 | serial_core.c 대수술, uart_port_lock_irqsave() 헬퍼 통일 | PREEMPT_RT 호환성이 개선되었습니다. |
| 6.10 | serial port 등록의 device-model 분할 | 8250 계열 등록 경로가 통합되었습니다. |
| 6.11 | serdev ACPI 자동 바인딩 강화 | x86 노트북 Bluetooth/GNSS 호환성이 좋아졌습니다. |
| 6.13 | 8250_dw RS485 전환 지연 자동 보정 | 산업용 UART 정확성이 올라갔습니다. |
| 6.14 | Apple Silicon UART hibernate/resume 안정화 | Apple 노트북 콘솔 신뢰성이 높아졌습니다. |
| 6.15 | n_gsm.c V.24 상태 보고 안정화 | 모뎀 다중화 복구 시간이 크게 줄었습니다. |
| 6.16 | 8250_pci에 Intel Lunar Lake LPSS UART 추가 | 차세대 노트북 지원이 확대되었습니다. |
| 6.17 | AMD AI300 UART, GS101 Tensor UART wakeup 지원 | 모바일 SoC 절전과 콘솔 지원이 개선되었습니다. |
| 6.18 | serdev_device_open() 동시성 race fix | Bluetooth 페어링 race가 줄었습니다. |
Ethernet PHY / phylink 관련 변경 이력
이더넷 PHY 문서는 포팅과 드라이버 작성 관점에서 버전별 API 차이를 자주 참고하므로, 순수 연대기 표는 이곳에 모아 관리합니다.
| 커널 | phylib / phylink 주요 변경 | 영향 |
|---|---|---|
| 4.20 | phylink 프레임워크 병합 | SFP, in-band status, fixed-link를 통합 관리하는 기반이 마련되었습니다. |
| 5.5 | phylink_pcs 인터페이스 도입 | host PCS를 별도 객체로 분리해야 해서 MAC 드라이버 구조가 바뀌었습니다. |
| 5.17 | cable_test / cable_test_tdr netlink 인터페이스 | 케이블 진단이 표준 사용자 공간 인터페이스로 정리되었습니다. |
| 6.1 | PHY LED 프레임워크 | PHY LED가 커널 LED 서브시스템과 통합되었습니다. |
| 6.3 | phylink_pcs_neg_mode() 도입 | PCS 자동 협상 모드 선택이 명확해졌습니다. |
| 6.6 | EEE 리워크(struct eee_config) | EEE 설정이 phylink / ethtool 경로에서 더 일관되게 관리됩니다. |
| 6.8 | phy_package 인프라 강화 | 공유 PHY 패키지 관리가 개선되었습니다. |
| 6.9 | Rate Matching 지원(phy_rate_matching()) | MAC-PHY 속도 불일치 처리가 쉬워졌습니다. |
| 6.11 | PHY LED netdev 속도별 트리거 | 속도별 LED 색상과 패턴 분리가 가능해졌습니다. |
| 6.12 | PHY link topology 프레임워크 | 하나의 netdev에 연결된 PHY / SFP / PCS를 트리 구조로 추적할 수 있게 되었습니다. |
| 6.17 | lan78xx의 phylink 전환, Airoha MDIO 추가 | USB 이더넷과 ISP SoC 계열의 업스트림 지원이 확대되었습니다. |
| 6.18 | Aquantia PHY 통합, lan865x ioctl 지원 | 고속 PHY와 산업용 T1S 관리 경로가 정리되었습니다. |
| 6.19 | MLX5 200G per-lane PCS 확장 | 초고속 PAM4 PHY / PCS 협상 경로가 강화되었습니다. |
타이머 관련 최근 변경 이력
타이머 문서는 버전 차이가 현재 동작 설명과 직접 붙어 있는 경우가 많아서 대부분의 설명을 현지 문서에 유지합니다. 다만 순수 릴리즈 흐름만 보면 다음과 같습니다.
| 커널 | 주요 변화 | 핵심 의미 |
|---|---|---|
| 6.7 ~ 6.10 | tmigr 계층 도입 및 안정화 | idle CPU 타이머 마이그레이션이 계층형 구조로 바뀌었습니다. |
| 6.8 | Timer Wheel lockless next-expiry 조회 | NO_HZ 경로의 락 경합과 지터가 줄었습니다. |
| 6.10 | deferrable timer coalescing 강화 | 모바일/임베디드 idle wakeup 횟수가 감소했습니다. |
| 6.12 | PREEMPT_RT 메인라인 병합 | timer softirq 스레드화와 RT 타이머 동작이 표준 커널 기준선이 되었습니다. |
| 6.13 | timer_delete* / timer_shutdown* 전환 정착 | 타이머 종료와 재무장 방지 API 사용 기준이 정리되었습니다. |
| 6.15 | hrtimer_setup() API 통합, POSIX 타이머 CRIU 개선 | 초기화 실수가 줄고 컨테이너 복원 신뢰성이 높아졌습니다. |
ACPI 관련 변경 이력
ACPI 문서는 규격 자체의 역사와 최신 커널 수용 흐름이 모두 길기 때문에, 순수 연대기 정보는 이곳에 모아 관리합니다.
| 시기 | 변화 | 의미 |
|---|---|---|
| ACPI 6.0 | PPTT, HMAT, IORT | 서버 토폴로지와 이기종 메모리 기술이 본격 표준화되었습니다. |
| ACPI 6.4 | CXL 2.0, Arm AEST / MPAM, PRM | CXL과 플랫폼 런타임 메커니즘이 ACPI 표준에 깊게 들어왔습니다. |
| ACPI 6.5 / 6.5A | LoongArch, CCEL, USB4, _DMA 정리 | 새 아키텍처와 기밀 컴퓨팅, wake 관련 규약이 강화되었습니다. |
| ACPI 6.6 | RISC-V MADT / SRAT / IOMMU 확장, CPPC 레지스터 추가 | RISC-V 서버의 ACPI 부팅과 최신 전력 관리가 본격화되었습니다. |
| Linux 6.12 | ACPICA 20240827 통합 | RISC-V MADT 서브타입과 최신 ACPI 스펙 수용 기반이 마련되었습니다. |
| Linux 6.13 | AMD P-State 기본 드라이버, CONFIG_ACPI_EC 분리 | 서버 전력 제어와 EC 경량화 선택지가 바뀌었습니다. |
| Linux 6.14 | acpi_os_sleep() 최적화, platform profile 다중 드라이버 바인딩 | resume 지연과 벤더별 전원 프로파일 처리 방식이 개선되었습니다. |
| Linux 6.18 | ACPI idle 등록 경로 회귀와 리버트 | 초기화 경로의 민감성과 LTS 막바지 회귀 리스크를 보여 준 사례입니다. |
| Linux 6.19+ | RISC-V ACPI 부팅 경로 본격화 | 데이터센터급 RISC-V 서버에서 DT 대신 ACPI를 선택하는 흐름이 강화되었습니다. |
| Linux 7.0 | PRMT 기반 CXL 주소 변환 활용 확대 | 펌웨어 런타임 호출과 ACPI / CXL 결합이 더 중요해졌습니다. |
VFIO / mdev 관련 변경 이력
VFIO & mdev 문서는 최근 몇 년간 IOMMUFD로의 전환이 워낙 커서 연혁 자체가 별도 축이 되었습니다. 핵심 흐름은 다음과 같습니다.
| 시기 | 변화 | 의미 |
|---|---|---|
| 6.2 | VFIO migration v2 프로토콜 도입 | 디바이스 상태를 fd 기반 스트림으로 전송하는 현대적 마이그레이션 경로가 생겼습니다. |
| 6.6 ~ 6.8 | IOMMUFD 기본 도입 | group-centric VFIO 컨테이너를 대체할 device-centric 모델이 본격화되었습니다. |
| 6.9 ~ 6.10 | QEMU의 -object iommufd 경로 정착 | legacy 컨테이너를 우회하는 실사용 경로가 안정화되었습니다. |
| 6.11 ~ 6.12 | migration v2가 mlx5 / hisi_acc에서 안정화 | SmartNIC / 가속기 라이브 마이그레이션이 프로덕션 단계로 올라왔습니다. |
| 6.14 ~ 6.15 | dmem cgroup으로 GPU 메모리 제한 | mdev / SR-IOV VF가 소비하는 장치 메모리를 cgroup 단위로 관리할 수 있게 되었습니다. |
| 6.16 ~ 6.17 | mdev의 iommufd 경로 합류, nested IOMMU 기반 SVA 성숙 | mdev와 일반 VFIO 장치가 같은 사용자 API 아래 수렴하기 시작했습니다. |
| 6.18 | guest_memfd + VFIO 상호작용 정리, ARM SMMUv3 nested translation 배치 | 기밀 VM 패스스루와 ARM 서버 가상화 기반이 강화되었습니다. |
Linux Bridge 관련 최근 변경 이력
Linux Bridge 문서는 운영 시나리오와 버그 수정이 강하게 결합되어 있어 대부분을 현지 문서에 유지합니다. 다만 최근 릴리즈 기준 분기점은 아래와 같습니다.
| 시기 | 변화 | 의미 |
|---|---|---|
| 6.5 | MST(Multiple Spanning Tree) 지원 | VLAN별 독립 STP 인스턴스를 운영할 수 있게 되었습니다. |
| 6.14 | VLAN-aware 브리지 멀티캐스트 컨텍스트 동기화 버그 수정 | multicast_vlan_snooping 환경의 안정성이 크게 좋아졌고 stable에도 백포트되었습니다. |
| 6.18 | 로컬 FDB 항목 VLAN 0 통합 | VLAN 수가 많은 환경에서 FDB 중복과 switchdev 오프로드 비용이 줄었습니다. |
| 6.19.x | 공식 문서 기준 멀티캐스트 기본값 점검 강조 | snooping on / querier off 조합의 운영 함정을 명시적으로 확인해야 합니다. |
네임스페이스 관련 최근 변경 이력
네임스페이스 문서에는 예제와 운영 영향 설명을 남기고, 여기에는 최근 버전별 분기점만 정리합니다.
| 커널 | 영역 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.13 | Network NS | IPv4 주소 해시 테이블을 netns 단위로 분리 | 대규모 네임스페이스 환경에서 조회 경합과 캐시 오염이 줄어듭니다. |
| 6.14 | Cgroup NS 주변 인프라 | dmem 컨트롤러 도입으로 디바이스 메모리 제한 경로 확장 | GPU VRAM 같은 장치 메모리를 cgroup 정책과 함께 다루는 설계가 가능해집니다. |
| 6.15 | pidfd | PIDFD_GET_INFO에 PIDFD_INFO_EXIT 추가 | reap 이후에도 종료 상태를 재조회할 수 있어 런타임 종료 처리 레이스가 줄어듭니다. |
| 6.15 | Mount NS | fanotify로 mount namespace attach/detach 이벤트를 구독하는 API 추가 | /proc/<pid>/mountinfo 폴링을 줄이고 토폴로지 변화를 이벤트 기반으로 감시할 수 있습니다. |
| 6.15 | Mount NS | open_tree_attr(2) 추가로 idmapped mount에서 다시 idmapped mount 파생 가능 | 루트리스 컨테이너 스토리지 구성의 유연성이 높아집니다. |
| 6.16 | Cgroup / Fanotify | cgroup rstat 분리와 user-namespace aware fanotify 확장 | 통계 집계 지연과 비특권 네임스페이스 감시 제약이 완화됩니다. |
| 6.18 | Namespace fd | name_to_handle_at()/open_by_handle_at()로 네임스페이스 파일 핸들 인코딩 지원 | 자원을 pin하지 않고도 네임스페이스 유일성을 장기 비교할 수 있어 CRIU와 런타임 검증 로직이 단순해집니다. |
Livepatch 관련 최근 변경 이력
Livepatch 문서에는 consistency model과 작성 패턴을 남기고, 긴 버전 흐름은 여기로 모읍니다.
| 커널 | 릴리즈 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.4 | 2023-06 | klp_enable_patch() 경로 정리, arch_stack_walk_reliable() 플래그 개선 | Reliable stacktrace 실패율이 낮아져 전환 대기 시간이 줄어듭니다. |
| 6.5 | 2023-08 | KLP_TRANSITION_* 상태 추적 개선, 셀프테스트 확장 | 전환 감시 스크립트와 QA 자동화 정확도가 높아집니다. |
| 6.7 | 2024-01 | klp_shadow_get_or_alloc() 실패 경로 재작성 | OOM 상황에서도 패치 실패 시 롤백 안정성이 개선됩니다. |
| 6.9 | 2024-05 | objtool 정합성 검증 연동 강화 | kpatch-build 산출물 검증 품질이 좋아집니다. |
| 6.12 | 2024-11 | x86 FINEIBT·IBT와 ftrace hook 충돌 제거 | CET/IBT 활성 시스템에서도 Livepatch 적용 안정성이 높아집니다. |
| 6.14 | 2025-03 | test_klp_livepatch 셀프테스트가 CI 기본 경로로 확대 | 배포판과 내부 커널 QA에서 회귀를 자동 검출하기 쉬워집니다. |
| 6.16 | 2025-07 | struct klp_state 정돈과 Shadow/State 통합 RFC 정리 | 패치 간 상태 의존성 모델이 단순해지는 방향이 확립됩니다. |
| 6.17 | 2025-09 | state.is_shadow 기반 Shadow Variable 수명 통합 초기 머지 | obsolete shadow 정리를 별도 콜백 없이 처리하는 패턴이 가능해집니다. |
| 6.18 | 2025-11 | Rust 바인딩과 ftrace/livepatch 상호 운영 가드 강화 | Rust 모듈이 포함된 커널에서도 Livepatch 전환 안전성을 더 엄격히 검증할 수 있습니다. |
KASAN / Sanitizer 관련 최근 변경 이력
KASAN 문서에는 탐지 모델과 운영 선택 기준을 남기고, Sanitizer 계열의 최신 버전표는 여기로 모읍니다.
| 커널 | 릴리즈 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.8 | 2024-03 | HW-Tag KASAN의 kasan.stacktrace 기본값 정리, Stack Depot 개선 | 리포트 정확도가 오르고 메모리 사용량이 줄어듭니다. |
| 6.9 | 2024-05 | KMSAN 라벨 전파 규칙 재작성과 KMSAN_WARN_ON 개선 | uninit-value 탐지의 false-negative가 감소합니다. |
| 6.10 | 2024-07 | Generic KASAN inline 모드에 report_async 도입 | 콜 스택 오염을 줄이면서 비동기 리포트 수집이 가능해집니다. |
| 6.12 | 2024-11 | KFENCE sample_interval 런타임 조정 API 추가 | 운영 중 탐지율과 오버헤드를 더 세밀하게 절충할 수 있습니다. |
| 6.14 | 2025-03 | SW-Tag KASAN x86_64 메인라인 RFC 재상정 | 비-ARM 태그 기반 탐지를 실험할 기반이 정리됩니다. |
| 6.15 | 2025-06 | KMSAN s390 포팅 완료 | IBM Z 환경에서도 미초기화 값 탐지가 가능해집니다. |
| 6.16 | 2025-07 | HW-Tag KASAN에 kasan.fault=panic_on_write 옵션 도입 | 쓰기 오류만 panic으로 격리해 프로덕션 운영성을 높일 수 있습니다. |
| 6.17 | 2025-09 | ARM64 FEAT_MTE_STORE_ONLY 지원 | 쓰기 전용 태그 검사로 프로덕션 MTE 오버헤드를 크게 낮춥니다. |
| 6.18 | 2025-11 | kasan.write_only 옵션 추가 | Android·서버 환경에서 상시 KASAN 운용의 현실성이 높아집니다. |
Time Namespace 관련 최근 변경 이력
Time Namespace 문서에는 CRIU, 기밀 VM, OCI 활용 설명을 남기고 주변 인프라 버전표는 여기로 모읍니다.
| 커널/도구 | 영역 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.11 ~ 6.13 | vDSO | 아키텍처별 vDSO generic 코드 정리, 신규 아키텍처가 공통 경로로 편입 | Time Namespace offset 자체는 유지하면서 아키텍처별 시계 구현 차이가 줄어듭니다. |
| 6.18 | Namespace handle | name_to_handle_at()로 time namespace 포함 모든 namespace에 파일 핸들 발급 가능 | CRIU가 namespace를 pin하지 않고도 유일성 검증을 수행할 수 있습니다. |
| CRIU 3.19 ~ 3.20 | CRIU | time namespace 체크포인트/복원이 io_uring/pidfd 경로와 통합 | --timens-offset 수동 지정 빈도가 줄고 복원 절차가 단순해집니다. |
| 6.16 / 6.18 | 기밀 VM | virtio_rtc, SEV-SNP Secure TSC 등 신뢰 가능한 시간 소스 강화 | 기밀 VM 내부 컨테이너에서도 Time Namespace offset을 더 믿을 수 있는 기반 위에서 사용할 수 있습니다. |
| runc 1.2+ / crun 1.15+ | OCI 런타임 | linux.timeOffsets 필드를 해석하는 경로 정리 | OCI 설정에서 monotonic/boottime 오프셋을 선언적으로 관리할 수 있습니다. |
가상화 / KVM 관련 최근 변경 이력
가상화 문서에는 기밀 VM 운용, 성능 확장성, 사용자 공간 조합 설명을 남기고, 최근 릴리즈 흐름은 여기로 모읍니다.
| 커널 | 영역 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.11 | AMD SEV-SNP | KVM 게스트 VM 지원 mainline 편입 | AMD 기밀 게스트를 메인라인 커널 기준으로 배치할 수 있는 최소 기반이 마련되었습니다. |
| 6.12 | VirtIO | vsock 성능 개선, VDPA MAC 설정, balloon 통계 확장 | 게스트 I/O 성능과 관측성이 동시에 개선됩니다. |
| 6.14 | cgroup | dmem 컨트롤러로 passthrough GPU VRAM 제한 가능 | VM당 장치 메모리 상한을 정책적으로 제어할 수 있습니다. |
| 6.15 | KVM x86 / ARM | lockless SPTE aging, secure TSC 공통 인프라, ARM nested virt 확장 | 대규모 VM dirty tracking과 기밀 VM 시간 신뢰, ARM 실험 배치가 동시에 진전됩니다. |
| 6.16 | KVM Intel / AMD / VirtIO | TDX 호스트 초기화 완성, SEV/SNP 초기화 경로 정리, virtio_rtc 추가 | Intel과 AMD 모두 기밀 VM 호스트 배치 가능성이 실전 단계로 올라가고 시간 신뢰 경로가 강화됩니다. |
| 6.17 | KVM x86 | posted IRQ 공통화, AVIC 안전 활성, 링 기반 dirty tracking 확장 | 대규모 vCPU VM에서 인터럽트 지연과 dirty logging 비용이 줄어듭니다. |
| 6.18 | KVM x86 / ARM / guest_memfd | CET 가상화, Secure AVIC, pKVM FF-A 1.2, guest_memfd mmap() 허용 | 기밀 VM 보안성과 메모리 관리 모델이 한 단계 정리되며 6.18 LTS가 실전 기준선으로 부상합니다. |
Futex 관련 최근 변경 이력
Futex 문서에는 futex2 API, NT 동기화, 프록시 실행 설명을 남기고, 최근 버전표는 여기로 모읍니다.
| 커널 | 릴리즈 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.12 | 2024-11 | PREEMPT_RT 메인라인 병합과 WAKE_Q 경로 안정화 | PI futex와 rt_mutex 관계가 메인라인 기준으로 정리되어 RT 환경 호환성이 높아집니다. |
| 6.13 | 2025-01 | debugobjects 재작업으로 futex_q 추적 신뢰성 개선 | 디버그 빌드에서 init-after-free 계열 문제 탐지가 좋아집니다. |
| 6.14 | 2025-03 | CONFIG_WINESYNC 기반 NT 동기화 드라이버 도입 | Wine/Proton의 Windows 동기화 객체 에뮬레이션이 커널 가속을 얻습니다. |
| 6.15 | 2025-05 | WAKE_Q 배치 wake-up 경로 최적화 | 대량 FUTEX_WAKE가 많은 producer-consumer 워크로드의 지연이 줄어듭니다. |
| 6.16 | 2025-07 | FUTEX2_NUMA, FUTEX2_MPOL, 프로세스 로컬 futex hash 도입 | 대형 NUMA 서버와 컨테이너 호스트에서 pthread mutex 경합이 완화됩니다. |
| 6.17 | 2025-09 | 프록시 실행 초기 구현, futex 해시 참조 경로 RCU 최적화, requeue UAF 방지 | Android 같은 우선순위 민감 경로의 지연 개선 기반이 들어오지만 아직 실험적입니다. |
| 6.18 | 2025-11 | rseq 사용자 공간 복귀 최적화, PREEMPT_RT softirq 경로 단순화, futex_q RCU 해제 효율 개선 | glibc NPTL과 함께 컨텍스트 전환 비용이 더 낮아집니다. |
| 6.19 | 2026-02 | robust_list 셀프테스트 추가, sched_ext lockless DSQ peek 확장 | robust futex 회귀 검증이 공식 selftest 경로에 편입됩니다. |
RT Mutex 관련 최근 변경 이력
RT Mutex 문서에는 PI 체인과 Proxy Execution 관계 설명을 남기고, 최근 릴리즈 흐름은 여기로 모읍니다.
| 커널 | 릴리즈 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.12 | 2024-11 | PREEMPT_RT 최종 병합, printk nbcon 경로까지 메인라인화 | out-of-tree RT 패치 스택 의존을 줄이고 메인라인 RT를 기본 기준선으로 삼을 수 있습니다. |
| 6.13 | 2025-01 | CONFIG_PREEMPT_RT가 선점 모델과 직교한 옵션으로 분리 | RT 활성화와 lazy/full preemption 선택을 분리해서 튜닝할 수 있습니다. |
| 6.14 | 2025-03 | rtmutex acquire 경로 메모리 순서 의미론 정리 | ARM64/RISC-V 같은 약한 메모리 모델에서 관찰 가능 상태 정합성이 보강됩니다. |
| 6.15 | 2025-05 | Proxy Execution 준비 패치와 sched class 인터페이스 확장 | PI 체인 관련 코드가 장기적으로 스케줄러 차원으로 확장될 가능성을 반영해야 합니다. |
| 6.16 | 2025-07 | Proxy Execution 준비 패치 추가, FUTEX2_NUMA와 상호작용 정리 | 대형 NUMA 시스템에서 PI latency 재측정이 필요한 시점입니다. |
| 6.17 | 2025-09 | Proxy Execution 초기 메인라인 병합 | 단일 런큐 범위지만, 단순 priority boost를 넘어 scheduling context 위임이 실제 코드에 들어옵니다. |
| 6.18 | 2025-11 | rt_mutex API 자체 변화는 없고 6.17 코드 안정화 단계 진입 | SLUB sheaves 등 주변 개선으로 RT 경로의 할당 지연 예측성이 좋아집니다. |
Red-Black Tree 관련 최근 변경 이력
Red-Black Tree 문서에는 자료구조 선택 기준을 남기고, 최근 버전 흐름은 여기로 모읍니다.
| 커널 | 릴리즈 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.12 | 2024-11 | 코어 rbtree API 안정, mm의 VMA는 이미 Maple Tree가 기본 | 신규 사용처에서는 여전히 EPOLL, 스케줄러, dm 같은 중간 규모 색인에 rbtree가 유효합니다. |
| 6.14 | 2025-03 | device-mapper transaction manager가 선형 리스트 대신 rbtree 사용 | 중간 규모 컬렉션 최적화 수단으로 rbtree가 계속 채택됩니다. |
| 6.16 | 2025-07 | BPF에서 rbtree 순회 지원 확장 | verifier가 허용하는 BPF 자료구조 활용 범위가 넓어집니다. |
| 6.17 | 2025-09 | augmented rbtree와 latch rbtree 포함 코어 인터페이스 변화 없음 | rb_root_cached와 augmented 패턴의 안정성이 계속 유지됩니다. |
| 6.18 | 2025-11 | 코어 변화 없음, 새 서브시스템은 주변에서만 확장 | 6.18 LTS가 rbtree 사용 드라이버·서브시스템의 장기 지원 기준선이 됩니다. |
| 6.19 | 2026-02 | 6.x 마지막 릴리즈까지 코어 변경 없음 | 7.0 계열로 넘어가도 API 하위 호환성이 유지됩니다. |
IDR / IDA 관련 최근 변경 이력
IDR / IDA 문서에는 XArray 전환 배경과 사용 지침을 남기고, 최근 릴리즈 흐름은 여기로 모읍니다.
| 커널 | 릴리즈 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.12 | 2024-11 | IDR/IDA 코어 변경 없음, 주변 서브시스템의 XArray 전환 지속 | 신규 코드는 사실상 XArray 직접 사용이 기본 권장안입니다. |
| 6.13 | 2025-01 | 서브시스템 단위 XArray 이행 확대 | 새 ID 할당 로직은 xa_alloc*() 계열을 쓰는 방향으로 맞춰야 합니다. |
| 6.16 | 2025-07 | Rust용 XArray 최소 추상화 계층 도입 | Rust 드라이버는 IDR이 아니라 XArray를 기준으로 설계하는 편이 자연스럽습니다. |
| 6.17 | 2025-09 | 코어 API 안정, 주변 XArray 재인덱싱 최적화만 진행 | 기존 IDR 사용처는 유지되지만 장기 리팩터링 후보로 봐야 합니다. |
| 6.18 | 2025-11 | IDR Rust 바인딩은 추가되지 않고 XArray 우선 방침 유지 | 6.18 LTS에서도 기존 호환성은 유지되지만 새 바인딩 투자는 XArray로 집중됩니다. |
| 6.19 | 2026-02 | 6.x 마지막 릴리즈까지 코어 구조 변화 없음 | 단기 제거 계획은 없지만, 전략적 방향은 여전히 XArray 치환입니다. |
Ring Buffer 관련 최근 변경 이력
Ring Buffer 문서에는 persistent buffer, zero-copy, BPF 연계 설명을 남기고, 버전표는 여기로 모읍니다.
| 커널 | 릴리즈 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.12 | 2024-11 | Persistent ring buffer 정식 머지 | 재부팅 후 trace를 유지하는 사후 분석 경로가 공식 기능이 됩니다. |
| 6.13 | 2025-01 | persistent 메타데이터 버전 필드와 오프라인 reader 경로 정리 | 크래시 후 초기 부팅에서 이전 trace를 더 안전하게 재현할 수 있습니다. |
| 6.14 | 2025-03 | sub-buffer 크기 런타임 조정, persistent 인스턴스 mmap() 금지로 안전화 | 대형 이벤트 drop을 줄이되 persistent 버퍼의 수집 방식 제약을 이해해야 합니다. |
| 6.15 | 2025-05 | mmap() 기반 zero-copy 읽기 경로 안정화 | trace-cmd나 libtracefs 기반 고볼륨 수집의 syscall 오버헤드를 줄일 수 있습니다. |
| 6.16 | 2025-07 | persistent buffer에 eBPF 이벤트 재생용 스키마 ID 기록 | ftrace와 BPF 타임라인을 교차 분석하기 쉬워집니다. |
| 6.17 | 2025-09 | ring_buffer_meta ABI 문서화 | drgn, crash 같은 외부 분석 도구가 버전 변화에 덜 민감해집니다. |
| 6.18 | 2025-11 | persistent ring buffer의 syscall 이벤트 출력 품질 개선 | 패닉 사후 분석에서 시스템 콜 추적 가독성이 크게 좋아집니다. |
| 6.19 | 2026-02 | SFrame 기반 스택 언와인딩 인프라가 tracing 경로에 편입되기 시작 | 최적화 빌드에서도 stack trace 품질을 높일 기반이 생깁니다. |
| 7.0 | 2026-04 | rtla --bpf-action과 ring buffer 연계, 외부 도구 스키마 안정화 | 실시간 지터 분석과 자동 대응을 BPF와 결합하는 운용이 쉬워집니다. |
CAN / SocketCAN 관련 최근 변경 이력
CAN Bus 문서에는 CAN-XL, ISO-TP, J1939 운용 설명을 남기고, 최근 릴리즈 표는 여기로 모읍니다.
| 커널 | 변경 사항 | 실무 시사점 |
|---|---|---|
| 6.7 | struct canxl_frame 기반 CAN-XL 프레임 골격 머지 | 2048바이트 페이로드를 다루는 차세대 SocketCAN UAPI가 열리기 시작합니다. |
| 6.8 | ISO-TP SF escape sequence 처리 갱신 | 최신 자동차 진단 스택과의 호환성이 높아집니다. |
| 6.10 | m_can CAN-XL TX 큐 수정 | 차량 게이트웨이의 송신 안정성이 개선됩니다. |
| 6.11 | NXP S32G3 FlexCAN 드라이버 머지 | 차세대 차량용 SoC 지원 범위가 넓어집니다. |
| 6.13 | CAN_ISOTP_LISTEN_MODE 추가 | 응답 없이 진단 트래픽을 수동 관찰하는 수신 패턴이 쉬워집니다. |
| 6.14 | J1939 BAM memory leak fix, ST SPC58 M_CAN 지원 | 장기 운용 안정성과 컨트롤러 커버리지가 동시에 개선됩니다. |
| 6.15 | MCP251xFD RX FIFO 인터럽트 통합 수정 | CAN-FD 수신 누락 문제를 줄일 수 있습니다. |
| 6.16 | J1939 ETP close race 수정, Renesas RZ/G3S CAN-FD 지원 | 장시간 차량 텔레매틱스 운용의 신뢰성이 좋아집니다. |
| 6.17 | Allwinner T527 CAN-FD 지원 | 저가형 IoT / 게이트웨이 플랫폼 선택지가 늘어납니다. |
| 6.18 | CAN_RAW_XL_FRAMES 소켓 옵션 안정화 RFC 진행 | 사용자 공간 CAN-XL 표준화가 구체적인 운영 검토 대상이 됩니다. |
IIO 관련 최근 변경 이력
IIO 문서에는 backend, cyclic DMA, DMABUF 활용 설명을 남기고, 최근 버전표는 여기로 모읍니다.
| 커널 | 변경 사항 | 실무 시사점 |
|---|---|---|
| 6.7 | IIO buffer-dmaengine cyclic DMA 지원 | GHz급 ADC의 zero-copy 연속 캡처 기반이 마련됩니다. |
| 6.10 | IIO backend 프레임워크 머지 | FPGA AXI IP 코어를 표준 추상화 아래에서 다룰 수 있습니다. |
| 6.11 | ADXL367 추가 | 저전력 모션 센서 지원이 확대됩니다. |
| 6.13 | IIO event backend 표준화, LTC2664/2672 DAC 지원 | 이벤트 UAPI가 정돈되고 사용자 공간 구독 경로가 표준화됩니다. |
| 6.14 | Bosch BMP580 추가 | 차세대 환경 센서 지원이 확장됩니다. |
| 6.15 | LSM6DSV16X, SCD4x 추가 | edge AI 센서와 공기질 모니터링 장치 지원이 넓어집니다. |
| 6.16 | IIO consumer API의 hardware trigger / cross-device cascade 확장 | ADC→DAC 같은 zero-CPU 데이터 경로 설계가 쉬워집니다. |
| 6.17 | SCD4x ChromeOS 통합 | 노트북 환경 센서 스택과의 통합이 진전됩니다. |
| 6.18 | IIO DMABUF zero-copy 사용자 공간 인터페이스 안정화 | GPU/카메라/센서 파이프라인 사이 직접 버퍼 공유가 현실화됩니다. |
Intel PCM 관련 최근 변경 이력
Intel PCM 문서에는 TPMI, CXL 모니터링, perf와의 역할 분담 설명을 남기고, 플랫폼 지원 연혁은 여기로 모읍니다.
| 플랫폼 | 출시 | PCM 지원 시점 | 실무 시사점 |
|---|---|---|---|
| Sapphire Rapids | 2023-01 | PCM 202307+ | HBM, CXL 1.1, AMX 계열 모니터링이 본격화됩니다. |
| Emerald Rapids | 2023-12 | PCM 202312+ | CHA 계열 uncore 카운터 확장이 추가됩니다. |
| Granite Rapids | 2024-09 | PCM 202409+ | Xeon 6 P-core, UPI 2.0, CXL 2.0, MRDIMM 관측이 가능해집니다. |
| Sierra Forest | 2024-06 | PCM 202406+ | E-core 전용 PMU와 대규모 코어 토폴로지 분석이 가능해집니다. |
| Granite Rapids-D | 2025 | PCM 2025+ | edge-server 계열 네트워킹 가속 카운터가 중요해집니다. |
| Granite Rapids-WS | 2026-02 | PCM 2026+ | 워크스테이션 단일 소켓 uncore 관측 지점이 추가됩니다. |
| 차세대 플랫폼 | 후속 세대 | 실제 릴리스 노트 확인 필요 | Clearwater Forest, Diamond Rapids 등은 태그와 릴리스 노트를 기준으로 재검증해야 합니다. |
Watchdog 관련 최근 변경 이력
Watchdog 문서에는 pretimeout, secure watchdog, SCMI 운용 설명을 남기고, 최근 릴리즈 표는 여기로 모읍니다.
| 커널 | 변경 사항 | 실무 시사점 |
|---|---|---|
| 6.7 | pretimeout governor의 panic 기본 경로 정비 | pretimeout 기반 panic/kdump 시나리오가 더 예측 가능해집니다. |
| 6.10 | SBSA Generic Watchdog의 WS0/WS1 두 단계 분리 명확화 | Arm 서버에서 pretimeout과 reset 시나리오를 표준 방식으로 구성하기 쉬워집니다. |
| 6.13 | Qualcomm watchdog와 secure world(TZ) 협업 경로 정비 | 모바일 SoC에서 hang 분석과 secure snapshot 수집 체인이 표준화됩니다. |
| 6.16 | i.MX95 SCMI watchdog 지원 추가 | 펌웨어 관리 watchdog을 Linux 표준 인터페이스로 제어할 수 있습니다. |
| 6.17 | WDIOF_PRETIMEOUT 능력 플래그 표준화 | systemd, runit 같은 사용자 공간 도구가 pretimeout을 일관된 방식으로 다룰 수 있습니다. |
| 6.18 | watchdog-cli 1.x의 keep-alive 인터벌 자동 산출 흐름 정착 | 운영 설정이 단순해지고 사람 손으로 계산하는 구간이 줄어듭니다. |
RAPL / Powercap 관련 최근 변경 이력
RAPL & powercap 문서에는 TPMI, PLR, DTPM, AMD RAPL 활용 설명을 남기고, 최근 릴리즈 흐름은 여기로 모읍니다.
| 커널 | 릴리즈 | 변경 사항 | 실무 시사점 |
|---|---|---|---|
| 6.12 | 2024-11 | AMD family 1Ah와 Arrow Lake-U 인식, Xeon 6 OOB 모드 초기 정비 | Zen 5와 차세대 Intel 모바일/서버 플랫폼에서 powercap 관측이 본격화됩니다. |
| 6.13 | 2025-01 | RAPL PMU perf 이벤트 안정화, TPMI 기반 uncore frequency sysfs 확장 | perf와 sysfs 기반 관측이 더 일관된 기준선을 가집니다. |
| 6.14 | 2025-03 | intel_rapl_tpmi의 fabric cluster 세분화, PSys 도메인 정비 | Xeon 6 계열에서 패브릭 단위 전력·주파수 분석이 가능해집니다. |
| 6.15 | 2025-05 | DTPM regulator/voltage 백엔드 추가 | SoC 레일 수준 전력 예산 분배를 powercap 체계 안에서 다룰 수 있습니다. |
| 6.16 | 2025-07 | PLR(Performance Limit Reasons) TPMI 노출 표준화 | 왜 클럭이 제한되는지 운영 중 직접 추적하기 쉬워집니다. |
| 6.17 | 2025-09 | AMD Core/Package RAPL 코드 정리, Genoa/Turin 범위 확대 | AMD 서버 계열의 powercap 지원 범위가 안정화됩니다. |
| 6.18 | 2025-12 | TPMI 통합 인터페이스 안정화, DTPM regulator 백엔드 양산 채택 | Xeon 6 이후 세대에서 TPMI가 사실상 기본 전제 경로가 됩니다. |
IRQ Domain / MSI 도메인 관련 최근 변경 이력
IRQ Domain 문서에는 계층형 도메인과 드라이버 전환 설명을 남기고, 최근 구조 변화의 버전표는 여기로 모읍니다.
| 커널 | 변경 사항 | 실무 시사점 |
|---|---|---|
| 6.14 | CONFIG_GENERIC_MSI_IRQ_DOMAIN이 CONFIG_GENERIC_MSI_IRQ로 통합, IRQ_MSI_LIB 도입 | 커널 설정과 드라이버 Kconfig 기준선을 업데이트해야 합니다. |
| 6.15 개발 주기 | pci_msi_create_irq_domain()에서 msi_create_parent_irq_domain()으로의 전환 시작 | 새 PCI MSI 도메인 드라이버는 parent domain 기반 API를 기준으로 작성하는 편이 안전합니다. |
| 6.15 이후 | 계층형 원칙에 맞춘 독립 MSI parent domain 전환이 드라이버별로 확산 | 동적 MSI 벡터 할당과 IMS 지원을 고려한 구조로 이동해야 합니다. |
개발 통계 상세
리눅스 커널의 개발 활동을 정량적으로 분석하면, 이 프로젝트의 규모와 활력을 구체적으로 이해할 수 있습니다.
디렉토리별 코드 비중 변화
| 디렉토리 | 2.6.0 (2003) | 4.0 (2015) | 6.1 (2022) | 7.0 (2026) | 역할 |
|---|---|---|---|---|---|
drivers/ | 55% | 65% | 68% | 69% | 하드웨어 드라이버 |
arch/ | 18% | 14% | 12% | 11% | 아키텍처별 코드 |
fs/ | 8% | 6% | 5% | 5% | 파일시스템 |
net/ | 6% | 5% | 5% | 5% | 네트워크 스택(Network Stack) |
kernel/ | 3% | 3% | 3% | 3% | 코어 커널 |
mm/ | 1% | 1% | 1% | 1% | 메모리 관리 |
sound/ | 3% | 3% | 3% | 3% | 오디오 |
rust/ | - | - | <0.1% | ~0.1% | Rust 바인딩/드라이버 |
| 기타 | 6% | 3% | 3% | 3% | tools, docs 등 |
릴리즈 주기 통계
| 통계 | 2.6.x 시대 (2003~2011) | 3.x~5.x (2011~2022) | 6.x (2022~현재) |
|---|---|---|---|
| 릴리즈 주기 | 60~90일 | 63~70일 | 63~70일 |
| 릴리즈당 커밋 | 5,000~12,000 | 12,000~16,000 | 15,000~18,000 |
| 릴리즈당 기여자 | 500~1,500 | 1,500~2,000 | 1,800~2,200 |
| Merge Window 커밋 | ~70% | ~75% | ~75% |
| rc 기간 커밋 | ~30% | ~25% | ~25% |
# 릴리즈별 상세 통계 명령어
# 릴리즈 간 커밋 수
git rev-list --count v6.11..v6.12
# 릴리즈 간 기여자 수
git shortlog -sn v6.11..v6.12 | wc -l
# 릴리즈 간 변경 파일 수
git diff --stat v6.11..v6.12 | tail -1
# 릴리즈 간 추가/삭제 라인 수
git diff --shortstat v6.11..v6.12
# 상위 10 기여자
git shortlog -sn v6.11..v6.12 | head -10
# merge window 기간 커밋 (rc1까지)
git rev-list --count v6.11..v6.12-rc1
# rc 기간 커밋 (rc1~final)
git rev-list --count v6.12-rc1..v6.12
# 디렉토리별 변경 비중
git diff --stat v6.11..v6.12 -- drivers/ | tail -1
git diff --stat v6.11..v6.12 -- net/ | tail -1
git diff --stat v6.11..v6.12 -- mm/ | tail -1
Stable/Longterm 프로세스 상세
stable 트리의 패치 선정과 릴리즈 과정은 엄격한 규칙을 따릅니다. 이 프로세스를 이해하면 배포판 커널 업데이트의 배경을 알 수 있습니다.
LTS 정책 상세
| 항목 | 일반 Stable | LTS (Long Term Support) |
|---|---|---|
| 지원 기간 | 다음 릴리즈까지 (~2~3개월) | 최소 2년, 최대 6년 |
| 선정 기준 | 모든 메인라인 릴리즈 | 연 1~2개, 기술적 중요도 기준 |
| 패치 범위 | 버그 수정, 보안 수정 | 버그 수정, 보안 수정 (더 보수적) |
| 사용처 | 롤링 릴리즈 배포판 | 엔터프라이즈 배포판, 임베디드, Android |
| 릴리즈 빈도 | 주 1~2회 | 주 1~2회 |
| 관리자 | Greg KH, Sasha Levin | Greg KH (일부 위임) |
releases.json에서 각 LTS 커널의 EOL 예정일을 확인할 수 있습니다.
EOL 이후에도 해당 커널을 사용하는 배포판은 자체적으로 보안 패치를 관리해야 합니다.
커널 거버넌스 구조 상세
리눅스 커널의 거버넌스는 공식적인 조직 구조 없이, 기술적 역량과 신뢰에 기반한 유기적 체계로 운영됩니다. 2018년 Code of Conduct 채택 이후 커뮤니티 운영 방식에도 변화가 있었습니다.
Technical Advisory Board (TAB)
Linux Foundation의 Technical Advisory Board는 커널 커뮤니티의 기술적 방향성을 논의하는 자문 기구입니다. 구성원은 커뮤니티 선거로 선출되며, Code of Conduct 위반 사항 조정 역할도 수행합니다.
| 역할 | 담당자/조직 | 권한 | 선출 방식 |
|---|---|---|---|
| BDFL (Benevolent Dictator) | Linus Torvalds | 최종 병합 결정권 | 창시자 |
| 대리 관리자 | Greg Kroah-Hartman | Linus 부재 시 관리 | Linus 지명 |
| 서브시스템 메인테이너 | ~1,700명 | 서브시스템 패치 리뷰/병합 | 기술적 역량 기반 |
| TAB 위원 | 선출직 10명 | 기술 자문, CoC 조정 | 커뮤니티 투표 |
| Stable 관리자 | Greg KH, Sasha Levin | stable/LTS 릴리즈 | 지명 |
| linux-next 관리자 | Stephen Rothwell | 통합 빌드 테스트 | 지명 |
MAINTAINERS 파일 구조
# MAINTAINERS 파일 엔트리 형식
NETWORKING [DSA]
M: Andrew Lunn <andrew@lunn.ch>
M: Florian Fainelli <f.fainelli@gmail.com>
M: Vladimir Oltean <olteanv@gmail.com>
L: netdev@vger.kernel.org
S: Maintained
F: net/dsa/
F: drivers/net/dsa/
F: include/net/dsa.h
F: include/linux/dsa/
# 필드 설명:
# M: = 메인테이너 (패치 리뷰 및 병합 권한)
# R: = 리뷰어 (Acked-by/Reviewed-by 제공)
# L: = 메일링 리스트
# S: = 상태 (Maintained, Supported, Orphan 등)
# F: = 파일/디렉토리 패턴
# T: = Git 트리 URL
# MAINTAINERS 활용 실전 명령어
# 특정 파일의 메인테이너 확인
scripts/get_maintainer.pl -f net/dsa/slave.c
# 특정 패치의 수신자 자동 확인
scripts/get_maintainer.pl 0001-net-dsa-fix-bug.patch
# 메인테이너 수 통계
grep "^M:" MAINTAINERS | sort -u | wc -l
# Orphan 상태 서브시스템 확인
grep -B1 "^S:.*Orphan" MAINTAINERS
# 전체 메일링 리스트 목록
grep "^L:" MAINTAINERS | sort -u
파일시스템 진화
리눅스 커널의 파일시스템 지원은 초기 Minix FS에서 현재의 ext4, Btrfs, XFS, F2FS, Bcachefs까지 지속적으로 발전해왔습니다. 파일시스템 변천사는 스토리지 기술 발전을 직접 반영합니다.
| 파일시스템 | 최초 도입 | 현재 상태 | 핵심 특징 |
|---|---|---|---|
| Minix FS | 0.01 (1991) | 레거시 | 최초 지원, 교육용 |
| ext | 0.96 (1992) | 제거됨 | 최초 Linux 전용 FS |
| ext2 | 0.99 (1993) | 유지보수 | 저널링 없음, 단순/빠름 |
| ext3 | 2.4 (2001) | 유지보수 | 저널링 추가, ext2 호환 |
| ext4 | 2.6.28 (2008) | 활발 (기본 FS) | 엑스텐트, 48비트 블록, 대용량 |
| ReiserFS | 2.4 (2001) | 제거 예정 | tail packing, 소파일 최적화 |
| XFS | 2.6 (2003) | 활발 | 64비트, 병렬 I/O, 대용량 |
| Btrfs | 2.6.29 (2009) | 활발 | CoW, 스냅샷, RAID, 압축 |
| F2FS | 3.8 (2013) | 활발 | 플래시 최적화, Android 채택 |
| OverlayFS | 3.18 (2014) | 활발 | 유니온 마운트, 컨테이너 기반 |
| NTFS3 | 5.15 (2021) | 활발 | Windows NTFS 읽기/쓰기 |
| Bcachefs | 6.7 (2024) | 실험적 | CoW, 체크섬(Checksum), 암호화, 압축 |
네트워킹 스택 진화
리눅스 네트워킹 스택은 단순한 TCP/IP 구현에서 세계에서 가장 기능이 풍부한 네트워크 OS로 발전했습니다.
| 시기 | 기능 | 커널 버전 | 영향 |
|---|---|---|---|
| 1994 | TCP/IP 스택 완성 | 1.0 | 인터넷 서버 가능 |
| 1999 | IPv6 초기 지원 | 2.2 | 차세대 인터넷 프로토콜 |
| 2001 | iptables/Netfilter | 2.4 | 방화벽 프레임워크 |
| 2001 | SCTP | 2.4 | 통신 프로토콜 |
| 2005 | NAPI | 2.6.x | 고속 패킷 처리 |
| 2006 | 네트워크 네임스페이스 | 2.6.24 | 컨테이너 네트워킹 |
| 2009 | Open vSwitch | 3.3 | SDN 가상 스위치 |
| 2013 | nftables | 3.13 | iptables 차세대 대체 |
| 2016 | XDP | 4.8 | 초고속 패킷 처리 |
| 2016 | BBR TCP 혼잡 제어 | 4.9 | Google 고성능 혼잡 제어 |
| 2018 | kTLS | 4.13 | 커널 TLS 오프로드 |
| 2020 | WireGuard | 5.6 | 현대적 VPN |
| 2020 | MPTCP | 5.6 | 다중 경로 TCP |
| 2024 | TCP 하드웨어 TX shaping | 6.13 | NIC 기반 트래픽 제어(Traffic Control) |
커널 빌드 시스템(Build System) 변천
커널 빌드 시스템도 코드베이스 성장에 맞춰 진화해왔습니다.
| 시기 | 빌드 시스템 | 특성 |
|---|---|---|
| 1991~2001 | 순수 Makefile + 쉘 스크립트 | 단순, 수동 의존성 |
| 2001 | Kconfig (menuconfig) 도입 | 대화형 설정 인터페이스 |
| 2002~2005 | Kbuild 시스템 현대화 | 재귀적 make, Sam Ravnborg 주도 |
| 2017 | GCC 플러그인 인프라 | 컴파일 시 보안 검증 |
| 2020 | Clang/LLVM 빌드 지원 | GCC 외 컴파일러 지원 |
| 2022 | Rust 빌드 통합 | rustc + bindgen + Kbuild 연동 |
| 2023 | 최소 GCC 버전 5.1 이상 | 레거시 컴파일러 지원 종료 |
# 커널 빌드 기본 명령어
# 설정
make defconfig # 기본 설정
make menuconfig # 대화형 설정
make olddefconfig # 기존 .config 유지 + 새 옵션 기본값
# 빌드
make -j$(nproc) # 병렬 빌드
make CC=clang -j$(nproc) # Clang으로 빌드
make LLVM=1 -j$(nproc) # 전체 LLVM 도구 체인
# Rust 지원 확인 및 빌드
make rustavailable # Rust 도구 체인 확인
make LLVM=1 -j$(nproc) # Rust는 LLVM 필수
# 크로스 컴파일
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
# 빌드 시간 프로파일링
make -j$(nproc) 2>&1 | ts '[%Y-%m-%d %H:%M:%S]'
미래 전망
리눅스 커널은 35년 이상의 역사를 통해 지속적으로 발전해왔으며, 7.0 출시(2026-04)를 기점으로 새로운 시대가 열렸습니다. Rust의 공식화와 sched_ext의 정식 통합은 향후 커널 개발의 방향을 근본적으로 바꿀 이정표입니다.
기술적 방향성
| 영역 | 7.0 기준 현재 상태 | 미래 방향 |
|---|---|---|
| Rust 확대 | stable 전환, PWM/I2C/hrtimer 드라이버 | 네트워크/블록 디바이스 드라이버, 핵심 서브시스템 (mm, fs) |
| 스케줄링 | EEVDF + sched_ext 정식 | BPF 기반 워크로드 적응형 스케줄링, 하이브리드 아키텍처 전용 정책 |
| 보안 | ML-DSA 포스트 양자 서명, LASS, Zicfiss/Zicfilp | 포스트 양자 암호화 전면 전환, 하드웨어 CFI 확대 |
| 이기종 컴퓨팅 | GPU/NPU 드라이버, Intel TDX 호스트 | 통합 메모리 모델, 가속기 스케줄링, CXL 메모리 풀링 |
| 실시간 | PREEMPT_RT + Lazy preemption | 더 세밀한 지연시간 보장, 하이브리드 RT/처리량 코어 프레임워크 |
| 네트워킹 | AccECN, Wi-Fi 8/UHR, VSOCK NS | 하드웨어 오프로드 확대, P4/eBPF 통합, io_uring 네트워킹 범용화 |
| 에너지 효율 | EAS, CPUFreq/CPUIdle, ZRAM writeback | 탄소 인식 스케줄링, 배터리 기기 전용 최적화 |
| 아키텍처 | x86_64, ARM64, RISC-V (Zicfiss) | RISC-V 생태계 확대, 레거시 아키텍처 정리, Loongson 메인스트림 |
| 라이브 업데이트 | Live Update Orchestrator (6.19) | 클라우드 VM 무중단 커널 업데이트 본격화 |
| AI/ML | AI 코딩 문서화 (7.0), Assisted-by 태그 | AI 생성 패치 검증 자동화, ML 기반 성능 튜닝 |
거버넌스 과제
- 후계 구도: Linus Torvalds의 은퇴 후 커널 관리 체계에 대한 논의가 지속되고 있습니다
- 다양성: 기여자 다양성 확대(지역, 성별, 배경)를 위한 노력
- 개발 도구: 메일링 리스트 중심 워크플로우의 현대화 논의 (GitLab/Forge 등)
- AI 코드 기여: 7.0에서 AI 코딩 정책이 공식 문서화되었으나, AI 생성 코드의 품질 검증 자동화와 저작권 문제는 여전히 활발한 논의 중입니다. Linus는 AI 도구가 커널의 코너 케이스를 더 많이 발견하게 될 것이라고 전망했습니다
- 보안 공개: 취약점 공개 프로세스 개선, CVE 할당 체계 정비
- LTS 지원 연장: Greg KH가 2026-02에 6.6/6.12/6.18의 LTS 지원 기간을 연장했으며, 기업 요구에 맞춘 유연한 지원 정책 논의가 계속됩니다
scripts/checkpatch.pl이 지적하는 코딩 스타일(Coding Style) 수정이 좋은 진입점(Entry Point)입니다.
메모리 관리 진화
리눅스 커널의 메모리 관리 서브시스템은 초기 단순한 페이지 할당에서 현대의 정교한 다층 메모리 관리 체계로 발전했습니다. 이 변천사는 하드웨어 발전(대용량 메모리, NUMA, 영구 메모리)과 워크로드 변화(가상화, 컨테이너)를 반영합니다.
| 시기 | 커널 버전 | 주요 변경 | 영향 |
|---|---|---|---|
| 1991 | 0.01 | 단순 페이지 할당 | 최대 16MB 메모리 지원 |
| 1995 | 1.2 | 버디 할당자(Buddy Allocator) 도입 | 외부 단편화(Fragmentation) 감소 |
| 1996 | 2.0 | SLAB 할당자 도입 | 커널 오브젝트 캐싱 |
| 1999 | 2.2 | highmem 지원 (896MB+) | 32비트에서 대용량 메모리 활용 |
| 2001 | 2.4 | ZONE_HIGHMEM, 리버스 매핑(Mapping)(rmap) | 페이지 회수 효율화 |
| 2003 | 2.6 | NUMA 정책, hugepages | 서버 워크로드 최적화 |
| 2004 | 2.6.7 | zone_reclaim, kswapd 개선 | 메모리 압력 대응 |
| 2007 | 2.6.23 | SLUB 할당자 (SLAB 대체) | 성능/디버깅(Debugging) 개선 |
| 2008 | 2.6.25 | cgroup 메모리 컨트롤러 (memcg) | 컨테이너 메모리 격리 |
| 2010 | 2.6.33 | Transparent Huge Pages (THP) | 자동 hugepage 활용 |
| 2012 | 3.2 | zswap (압축 스왑 캐시(Cache)) | I/O 감소, 스왑 성능 향상 |
| 2013 | 3.11 | zram (압축 RAM 디스크) | 모바일/임베디드 메모리 확장 |
| 2014 | 3.15 | memfd_create() 시스템 콜 | 익명 공유 메모리 |
| 2017 | 4.14 | KASAN (Kernel Address Sanitizer) | 메모리 오류 탐지 프레임워크 |
| 2018 | 4.15 | KPTI (Meltdown 대응) | 커널/유저 페이지 테이블(Page Table) 분리 |
| 2019 | 5.1 | persistent memory (DAX/PMEM) 성숙 | 영구 메모리 파일시스템 지원 |
| 2020 | 5.8 | memcg v2 성숙, slab memcg 통합 | 정확한 컨테이너 메모리 계측 |
| 2022 | 5.16 | DAMON (Data Access MONitor) | 접근 패턴 기반 메모리 관리 |
| 2022 | 5.18 | Multi-gen LRU (MGLRU) | 페이지 회수 알고리즘 혁신 |
| 2023 | 6.1 | maple tree (VMA 자료구조 교체) | VMA 관리 성능 향상 |
| 2024 | 6.8 | large folio 일반화 | THP 유연화, 파일 I/O 최적화 |
MGLRU (Multi-gen LRU): 5.18의 혁신
전통적인 LRU(Least Recently Used) 알고리즘은 active/inactive 두 리스트만으로 페이지 노화를 추적했습니다. MGLRU는 세대(generation) 개념을 도입하여 페이지 접근 패턴을 더 정밀하게 추적하고, 불필요한 페이지 스캔을 줄여 메모리 압력 상황에서 성능을 크게 개선했습니다.
# MGLRU 활성화 확인/제어
cat /sys/kernel/mm/lru_gen/enabled
# 값: 0x0007 (기본) - 모든 기능 활성
# bit 0: MGLRU 코어
# bit 1: 런타임 페이지 테이블 young 비트 스캔
# bit 2: 비활성 세대 자동 노화
# MGLRU 통계 확인 (memcg별)
cat /sys/kernel/debug/lru_gen
# memcg 0 (type=anon)
# node 0
# gen 3 age 10s nr_pages 12345
# gen 2 age 30s nr_pages 8765
# gen 1 age 60s nr_pages 4321
# gen 0 age 120s nr_pages 2345
# DAMON 기반 선제적 회수 설정
echo "2000000 3000000 5 1000 10000" > /sys/kernel/debug/damon/target_ids
# min_sz max_sz min_nr_reg sample_intv aggr_intv (마이크로초)
대형 폴리오 (Large Folio): 6.x의 진화
folio는 5.16에서 도입된 페이지 캐시(Page Cache) 관리 단위로, compound page를 대체합니다. 6.x 시리즈에서 large folio가 일반화되면서 파일 I/O와 THP 모두에서 성능이 크게 향상되었습니다.
/* folio 도입 전후 비교 */
/* 5.15 이전: struct page 기반 */
struct page *page = find_get_page(mapping, index);
if (PageCompound(page))
page = compound_head(page); /* head page 필요 */
/* 5.16 이후: struct folio 기반 */
struct folio *folio = filemap_get_folio(mapping, index);
/* folio는 항상 head page → compound_head() 불필요 */
size_t size = folio_size(folio); /* 4KB, 16KB, 64KB, ... */
/* large folio 할당 (6.8+) */
struct folio *folio = filemap_alloc_folio(GFP_KERNEL, order);
/* order=0: 4KB, order=2: 16KB, order=4: 64KB */
디바이스 모델 진화
리눅스 커널의 디바이스 모델은 하드웨어 추상화와 드라이버 관리의 근간입니다. 초기의 디바이스 번호(major/minor) 기반 모델에서 sysfs/udev 기반의 현대적 모델로 발전했습니다.
| 시기 | 커널 버전 | 변경 | 핵심 내용 |
|---|---|---|---|
| 1991 | 0.01 | 디바이스 번호 모델 | major/minor 번호로 장치 식별 |
| 1994 | 1.0 | /proc 파일시스템 | 커널 정보 노출 인터페이스 |
| 1999 | 2.2 | devfs (실험적) | 자동 디바이스 노드 생성 시도 |
| 2002 | 2.5 | 통합 디바이스 모델 | bus/device/driver 계층, Pat Mochel 설계 |
| 2003 | 2.6 | sysfs 도입 | 디바이스 트리(Device Tree)를 /sys에 노출 |
| 2003 | 2.6 | udev 도입 | 유저 공간 디바이스 관리자 (devfs 대체) |
| 2005 | 2.6.13 | uevent | hotplug 이벤트 → udev 처리 |
| 2008 | 2.6.25 | Device Tree (ARM) | 하드웨어 기술 표준화 (Open Firmware) |
| 2011 | 3.x | Device Tree 의무화 (ARM) | 보드 파일 제거, DT 기반 프로빙 |
| 2012 | 3.5 | devlink 프레임워크 | 멀티포트 디바이스 통합 관리 |
| 2016 | 4.6 | ACPI + Device Tree 공존 | x86에서도 DT 사용 가능 |
| 2019 | 5.2 | auxiliary bus | 하나의 디바이스에서 여러 서브기능 분리 |
| 2021 | 5.15 | devlink 리로드/파라미터 확장 | NIC/스위치 런타임 재설정 |
| 2023 | 6.3 | Rust 드라이버 바인딩 | 안전한 드라이버 API 시작 |
# 디바이스 모델 탐색 명령어
# sysfs 디바이스 트리 탐색
ls /sys/bus/ # 등록된 버스 타입
ls /sys/class/ # 디바이스 클래스
ls /sys/devices/platform/ # 플랫폼 디바이스
# PCI 디바이스 계층
lspci -tv # PCI 토폴로지 트리
ls /sys/bus/pci/devices/ # sysfs에서 확인
# USB 디바이스 계층
lsusb -tv # USB 토폴로지 트리
ls /sys/bus/usb/devices/ # sysfs에서 확인
# Device Tree 확인 (ARM/ARM64)
ls /proc/device-tree/ # DT 노드 탐색
dtc -I fs /proc/device-tree/ # 런타임 DT 덤프
# udev 규칙 디버깅
udevadm info --query=all --name=/dev/sda
udevadm monitor --property # 실시간 uevent 모니터링
udevadm test /sys/class/net/eth0 # 규칙 시뮬레이션
# 드라이버 바인딩 수동 제어
echo "0000:00:1f.0" > /sys/bus/pci/drivers/lpc_ich/unbind
echo "0000:00:1f.0" > /sys/bus/pci/drivers/lpc_ich/bind
가상화 지원 변천
리눅스는 세계에서 가장 널리 사용되는 하이퍼바이저(Hypervisor) 호스트 OS입니다. KVM의 메인라인 통합부터 컨테이너 격리, 마이크로VM까지 가상화 기술의 전 영역을 포괄합니다.
| 시기 | 커널 버전 | 기술 | 영향 |
|---|---|---|---|
| 2002 | 2.4.x | User-mode Linux (UML) | 커널을 유저 프로세스로 실행 |
| 2003 | 2.6.0 | Xen 파라가상화 패치 | 초기 하이퍼바이저 지원 |
| 2006 | 2.6.20 | KVM (Kernel-based VM) | 하드웨어 가상화 (VT-x/AMD-V) 활용 |
| 2007 | 2.6.23 | cgroups | 리소스 격리 프레임워크 |
| 2008 | 2.6.24 | 네트워크 네임스페이스 | 컨테이너 네트워킹 기반 |
| 2008 | 2.6.26 | 완전한 네임스페이스 세트 | PID/UTS/IPC/mount/user NS |
| 2011 | 3.0 | Xen 메인라인 통합 | 외부 패치 불필요 |
| 2013 | 3.8 | user namespace 완성 | 비특권 컨테이너 가능 |
| 2016 | 4.7 | vhost-net 고성능 I/O | VM 네트워크 성능 향상 |
| 2019 | 5.1 | io_uring (VM I/O 활용) | 비동기 I/O 혁신 |
| 2020 | 5.6 | virtio-fs | 호스트-게스트 파일 공유 |
| 2020 | 5.10 | AMD SEV-ES 지원 | 기밀 컴퓨팅(Confidential Computing) (VM 암호화) |
| 2021 | 5.13 | Intel TDX 초기 지원 | 신뢰 실행 환경(TEE) |
| 2022 | 5.19 | Intel TDX 게스트 지원 | 하드웨어 기밀 VM |
| 2023 | 6.2 | AMD SEV-SNP 게스트 | 보안 중첩 페이징 |
| 2024 | 6.9 | guest_memfd | 게스트 전용 메모리 (기밀 컴퓨팅) |
전원 관리와 에너지 효율 역사
리눅스 커널의 전원 관리는 노트북 배터리 절약에서 시작하여 데이터센터 에너지 효율과 모바일 디바이스 최적화까지 광범위한 영역으로 확장되었습니다.
| 시기 | 커널 버전 | 기술 | 영향 |
|---|---|---|---|
| 1996 | 2.0 | APM (Advanced Power Management) | BIOS 기반 전원 관리 |
| 2002 | 2.4 | ACPI 지원 | OS 주도 전원 관리 |
| 2004 | 2.6.9 | cpufreq 프레임워크 | CPU 주파수 동적 조절 |
| 2006 | 2.6.21 | tickless kernel (NO_HZ) | 유휴 시 타이머 인터럽트 제거 |
| 2008 | 2.6.28 | runtime PM 프레임워크 | 디바이스별 동적 전원 관리 |
| 2009 | 2.6.32 | PM QoS (Quality of Service) | 전원/성능 요구사항 협상 |
| 2011 | 3.0 | cpuidle 거버너 개선 | C-state 선택 최적화 |
| 2014 | 3.16 | EAS (Energy Aware Scheduling) | 에너지 인식 태스크 배치 |
| 2016 | 4.7 | schedutil 거버너 | 스케줄러 기반 주파수 결정 |
| 2019 | 5.1 | Intel Speed Select (ISST) | 코어별 성능 프로파일 |
| 2020 | 5.7 | thermal pressure 통합 | 열 스로틀링 인식 스케줄링 |
| 2021 | 5.14 | Energy Model 개선 | OPP(Operating Performance Point) 정밀화 |
| 2023 | 6.3 | AMD P-State EPP 드라이버 | 하드웨어 자율 DVFS |
| 2024 | 6.8 | Intel HWP 개선 | 하드웨어-소프트웨어 협력 DVFS |
# 전원 관리 상태 확인 명령어
# cpufreq 현재 상태
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# 모든 CPU 주파수 한번에 확인
grep MHz /proc/cpuinfo
# cpuidle C-state 통계
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/time
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/usage
# 거버너 변경
echo schedutil > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# Intel P-State 드라이버 상태
cat /sys/devices/system/cpu/intel_pstate/status # active/passive/off
cat /sys/devices/system/cpu/intel_pstate/min_perf_pct
cat /sys/devices/system/cpu/intel_pstate/max_perf_pct
# runtime PM 상태 확인 (디바이스별)
cat /sys/bus/pci/devices/0000:00:00.0/power/runtime_status
# active / suspended / suspending
# 시스템 전체 에너지 소비 (RAPL)
cat /sys/class/powercap/intel-rapl/intel-rapl:0/energy_uj
# turbostat으로 상세 분석
turbostat --Summary --show Busy%,Bzy_MHz,PkgWatt sleep 5
# 서스펜드/하이버네이트
cat /sys/power/state # freeze mem disk
echo mem > /sys/power/state # S3 서스펜드
echo freeze > /sys/power/state # s2idle (S0ix)
커널 디버깅 도구 변천
리눅스 커널 디버깅 도구는 printk에서 시작하여 현재의 정교한 트레이싱/프로파일링(Profiling) 프레임워크로 발전했습니다. 이 변천사는 커널 개발 문화와 소프트웨어 공학의 진보를 반영합니다.
| 시기 | 도구 | 커널 버전 | 용도 |
|---|---|---|---|
| 1991 | printk | 0.01 | 커널 로그 출력 (가장 기본적인 디버깅) |
| 1995 | kgdb | 외부 패치 | 원격 GDB 디버깅 |
| 1999 | ksymoops | 2.2 | 커널 Oops 심볼 해석 |
| 2004 | kprobes | 2.6.9 | 동적 커널 계측점 삽입 |
| 2005 | SystemTap | 외부 도구 | 스크립트 기반 커널 프로빙 |
| 2008 | ftrace | 2.6.27 | 함수 트레이싱 프레임워크 |
| 2009 | perf | 2.6.31 | PMU 기반 성능 프로파일링 |
| 2009 | tracepoints | 2.6.28 | 정적 커널 트레이스포인트 |
| 2014 | BPF tracing (BCC) | 3.18+ | eBPF 기반 동적 트레이싱 |
| 2017 | KASAN | 4.0 | 커널 주소 살균기 (메모리 오류 탐지) |
| 2017 | UBSAN | 4.0 | 정의되지 않은 동작 탐지 |
| 2018 | bpftrace | 4.x+ | DTrace 스타일 고수준 BPF 트레이싱 |
| 2019 | KCSAN | 5.3 | 동시성 버그 (data race) 탐지 |
| 2020 | KMSAN | 5.x | 초기화되지 않은 메모리 탐지 |
| 2022 | KFENCE | 5.12 | 경량 메모리 오류 탐지 (프로덕션) |
| 2024 | perf mem / c2c | 6.x | 캐시 라인(Cache Line) 경합(Contention) 분석 |
# 주요 커널 디버깅 도구 사용 예시
# === ftrace: 함수 트레이싱 ===
cd /sys/kernel/tracing
echo function_graph > current_tracer
echo 'tcp_sendmsg' > set_graph_function
echo 1 > tracing_on
sleep 2
echo 0 > tracing_on
cat trace | head -50
# === perf: 성능 프로파일링 ===
# CPU 프로파일링 (플레임 그래프용)
perf record -g -a sleep 10
perf report --stdio
# 하드웨어 이벤트 카운팅
perf stat -e cycles,instructions,cache-misses,branches,branch-misses ./workload
# 스케줄러 지연시간 분석
perf sched record sleep 5
perf sched latency
# === bpftrace: 고수준 트레이싱 ===
# 프로세스별 시스콜 빈도
bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @[comm] = count(); }'
# 블록 I/O 지연시간 히스토그램
bpftrace -e 'tracepoint:block:block_rq_issue { @start[args->dev, args->sector] = nsecs; }
tracepoint:block:block_rq_complete /@start[args->dev, args->sector]/ {
@usecs = hist((nsecs - @start[args->dev, args->sector]) / 1000);
delete(@start[args->dev, args->sector]);
}'
# TCP 재전송 추적
bpftrace -e 'kprobe:tcp_retransmit_skb { printf("retransmit: %s:%d\n", comm, pid); }'
# === KASAN: 메모리 오류 탐지 (빌드 시 설정) ===
# .config에서 CONFIG_KASAN=y 설정 후 빌드
# 버그 발생 시 dmesg에 상세 리포트 출력
dmesg | grep -A 20 "BUG: KASAN"
# === crash: 커널 덤프 분석 ===
crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/vmcore
# crash> bt (backtrace)
# crash> ps (프로세스 목록)
# crash> vm (가상 메모리)
# crash> log (커널 로그)
커널 테스트 인프라 발전
리눅스 커널은 세계 최대 규모의 오픈소스 프로젝트답게 정교한 테스트 인프라를 구축해왔습니다. 초기에는 테스트가 거의 없었으나, 현재는 수십 개의 자동화된 CI 시스템이 매 패치를 검증합니다.
| 테스트 시스템 | 시작 | 용도 | 운영 주체 |
|---|---|---|---|
| LTP (Linux Test Project) | 2001 | 시스콜, 파일시스템 회귀 테스트 | SGI → IBM → 커뮤니티 |
| kselftest | 2012 (3.7) | 서브시스템별 단위 테스트 | 커널 트리 내장 |
| 0-day (Intel) | 2012 | 빌드/부트/실행 테스트 자동화 | Intel |
| kernelci.org | 2014 | 다중 아키텍처 CI | Linux Foundation |
| syzbot (syzkaller) | 2017 | 커버리지 기반 커널 퍼징 | |
| KUnit | 2019 (5.5) | 커널 내 단위 테스트 프레임워크 | |
| LKFT | 2017 | 기능 테스트 자동화 | Linaro |
| CKI (CentOS) | 2019 | Red Hat 커널 CI | Red Hat |
| virtme-ng | 2023 | 빠른 커널 부팅/테스트 | 커뮤니티 |
# 커널 테스트 실행 예시
# === KUnit: 커널 단위 테스트 ===
# 모든 KUnit 테스트 실행 (UML 기반, 하드웨어 불필요)
./tools/testing/kunit/kunit.py run
# 특정 테스트 스위트만 실행
./tools/testing/kunit/kunit.py run --filter=kunit_example
# QEMU에서 실행 (ARM64)
./tools/testing/kunit/kunit.py run --arch=arm64 --cross_compile=aarch64-linux-gnu-
# === kselftest: 서브시스템 테스트 ===
# 전체 selftest 빌드 및 실행
make -C tools/testing/selftests run_tests
# 특정 서브시스템 테스트만
make -C tools/testing/selftests TARGETS=net run_tests
make -C tools/testing/selftests TARGETS=bpf run_tests
make -C tools/testing/selftests TARGETS=mm run_tests
# === syzkaller: 커널 퍼징 (로컬) ===
# syz-manager 설정 후 실행
./bin/syz-manager -config my.cfg
# === LTP: 회귀 테스트 ===
# 기본 시스콜 테스트
./runltp -f syscalls -z -o /tmp/ltp-results.log
# === virtme-ng: 빠른 커널 부팅 ===
# 현재 커널 소스로 빌드 후 즉시 부팅
vng --build --run
# 특정 명령 실행 후 종료
vng --run -- uname -r
커널 문서화 시스템 변천
커널 문서화 체계의 발전은 프로젝트 규모 성장과 개발자 온보딩의 필요성을 반영합니다.
| 시기 | 시스템 | 특징 |
|---|---|---|
| 1991~2000 | 일반 텍스트 (Documentation/) | 형식 없는 .txt 파일 |
| 2000 | DocBook XML | 구조화된 API 문서 (xmlto 빌드) |
| 2004 | kernel-doc 주석 | 소스 코드 내 API 주석 자동 추출 |
| 2016 | Sphinx + reStructuredText | 현대적 문서 빌드 시스템으로 전환 |
| 2017 | docs.kernel.org | 온라인 문서 자동 배포 |
| 2019 | .rst 의무화 | 모든 새 문서는 RST 형식 |
| 2020 | MAINTAINERS에 문서 매핑 | 서브시스템별 문서 관리자 |
| 2022 | 번역 시스템 강화 | 중국어, 일본어, 한국어, 이탈리아어 문서 |
# 커널 문서 빌드
# HTML 문서 생성
make htmldocs
# 특정 서브시스템 문서만
make SPHINXDIRS=networking htmldocs
make SPHINXDIRS=driver-api htmldocs
# PDF 생성
make pdfdocs
# kernel-doc 추출 (특정 파일의 API 문서)
scripts/kernel-doc -man include/linux/skbuff.h
scripts/kernel-doc -rst include/linux/list.h
# 문서 검증 (스타일 체크)
make htmldocs 2>&1 | grep WARNING
# 번역 문서 빌드 (한국어)
make SPHINXDIRS=translations/ko_KR htmldocs
/**로 시작하는 주석은 kernel-doc 형식으로,
Sphinx가 자동으로 API 문서를 생성합니다. 새 API를 추가할 때는 반드시 kernel-doc 주석을 작성해야
문서 빌드 경고 없이 통과할 수 있습니다. scripts/kernel-doc -none -Wall로 형식을 검증할 수 있습니다.
리눅스 커널의 문화와 커뮤니케이션
리눅스 커널 개발 커뮤니티는 독특한 문화와 커뮤니케이션 방식을 발전시켜왔습니다. 30년 이상 지속된 메일링 리스트 기반 워크플로우는 현재까지 커널 개발의 근간입니다.
커뮤니케이션 채널
| 채널 | 용도 | 특징 |
|---|---|---|
| LKML (linux-kernel@) | 일반 커널 개발 토론 | 하루 500~1000건, 1991년부터 운영 |
| 서브시스템 리스트 | 영역별 개발 (netdev, linux-mm 등) | 40개 이상 활성 리스트 |
| lore.kernel.org | 메일 아카이브 | 모든 메일링 리스트 통합 검색 |
| IRC (#kernel, OFTC) | 실시간 토론 | 비공식 소통 채널 |
| Kernel Summit | 연간 개발자 회의 | 주요 방향 결정, 대면 토론 |
| LPC (Linux Plumbers) | 기술 컨퍼런스 | 서브시스템별 심층 기술 토론 |
| bugzilla.kernel.org | 버그 트래커 | 공식 버그 보고 채널 |
| patchwork | 패치 추적 | 메일 기반 패치의 상태 관리 |
패치 워크플로우
# 커널 패치 제출 전체 과정
# 1. 코딩 스타일 검증
scripts/checkpatch.pl --strict -f drivers/net/dsa/my_driver.c
# 2. 패치 생성
git format-patch -v2 --cover-letter -o /tmp/patches HEAD~3
# -v2: 두 번째 버전
# --cover-letter: 시리즈 설명
# 3. 수신자 자동 확인
scripts/get_maintainer.pl /tmp/patches/*.patch
# 4. 패치 전송
git send-email --to=maintainer@example.com \
--cc=linux-kernel@vger.kernel.org \
/tmp/patches/*.patch
# 5. 패치 상태 확인
# lore.kernel.org에서 Message-ID로 검색
# patchwork에서 상태 확인 (New/Under Review/Accepted 등)
# 6. 피드백 반영 후 재전송
git format-patch -v3 --cover-letter -o /tmp/patches_v3 HEAD~3
# v3 커버레터에 변경 이력(changelog) 포함
코드 리뷰 태그
| 태그 | 의미 | 누가 부여 |
|---|---|---|
| Reviewed-by | 코드를 상세히 리뷰함 | 리뷰어/메인테이너 |
| Acked-by | 변경에 동의함 (서브시스템 관리자) | 관련 서브시스템 메인테이너 |
| Tested-by | 실제 하드웨어/환경에서 테스트 | 테스터 |
| Reported-by | 버그를 보고한 사람 | 작성자가 추가 |
| Suggested-by | 아이디어를 제안한 사람 | 작성자가 추가 |
| Fixes: | 수정 대상 커밋 참조 | 작성자가 추가 |
| Cc: stable@ | stable 백포트 요청 | 작성자가 추가 |
| Signed-off-by | DCO(Developer Certificate of Origin) 서명 | 모든 기여자 필수 |
git commit -s로 자동 추가됩니다.
커널 주요 인물과 기여
리눅스 커널의 역사는 핵심 개발자들의 기여와 분리할 수 없습니다. 프로젝트 초기부터 현재까지 커널의 방향을 결정지은 주요 인물들을 정리합니다.
| 인물 | 주요 기여 | 활동 시기 | 현재 역할 |
|---|---|---|---|
| Linus Torvalds | 커널 창시, Git 개발, 전체 관리 | 1991~현재 | BDFL / 최종 통합자 |
| Alan Cox | 네트워킹, TTY, 초기 SMP | 1991~2013 | 반은퇴 (Intel) |
| Andrew Morton | mm, -mm 트리, 통합 관리 | 2001~현재 | 부관리자 (Google) |
| David S. Miller | 네트워킹 스택, SPARC | 1996~현재 | net 메인테이너 (Oracle) |
| Greg Kroah-Hartman | 드라이버 코어, USB, stable 관리 | 2001~현재 | stable 관리자 (Linux Foundation) |
| Thomas Gleixner | 인터럽트, 타이머, PREEMPT_RT | 2003~현재 | x86 공동 메인테이너 |
| Ingo Molnar | 스케줄러(CFS), perf, RT | 2001~현재 | tip 트리 관리자 (Red Hat) |
| Tejun Heo | cgroups v2, workqueue, sata/libata | 2005~현재 | cgroup/workqueue (Meta) |
| Dave Airlie | DRM/GPU 서브시스템 | 2004~현재 | DRM 메인테이너 (Red Hat) |
| Jakub Kicinski | 네트워크 드라이버, BPF | 2016~현재 | net 공동 메인테이너 (Meta) |
| Miguel Ojeda | Rust for Linux | 2021~현재 | Rust 서브시스템 관리자 |
| Alexei Starovoitov | eBPF 확장 (프로그래머블 커널) | 2014~현재 | BPF 메인테이너 (Meta) |
| Jens Axboe | 블록 레이어, io_uring | 2001~현재 | block/io_uring (Oracle) |
| Ted Ts'o | ext2/3/4 파일시스템, e2fsprogs | 1991~현재 | ext4 메인테이너 (Google) |
| Chris Mason | Btrfs 개발 | 2007~현재 | Btrfs 원 저자 (Meta) |
| Christoph Hellwig | VFS, 블록 I/O, DMA API | 2000~현재 | 다수 서브시스템 리뷰어 |
기업별 기여 비중 (2024년 기준)
현대 리눅스 커널 개발은 기업 후원에 크게 의존합니다. Linux Foundation의 분석에 따르면 전체 커밋의 약 85%가 기업 소속 개발자에 의해 이루어집니다.
| 기업 | 기여 비중 (6.x) | 주요 관심 영역 |
|---|---|---|
| Intel | ~12% | x86, 드라이버, 보안, Wi-Fi |
| Red Hat | ~10% | 스케줄러, RHEL 커널, 가상화 |
| ~8% | Android, eBPF, 메모리, KVM | |
| Linaro | ~6% | ARM, Device Tree, 전원 관리 |
| AMD | ~5% | GPU(amdgpu), CPU, KVM |
| Meta | ~4% | eBPF, cgroups, 네트워킹 |
| NVIDIA | ~3% | GPU(nouveau/open), Tegra |
| Microsoft | ~3% | Hyper-V, WSL, Surface |
| Samsung | ~3% | ARM, 스토리지, F2FS |
| SUSE | ~2% | Btrfs, 엔터프라이즈 기능 |
| 개인/독립 | ~15% | 다양한 영역 |
주요 기술 논쟁과 분기점
리눅스 커널 30년 역사에서 커뮤니티를 뒤흔든 주요 기술 논쟁들은 프로젝트의 방향을 결정지었습니다. 각 논쟁의 배경, 결과, 교훈을 정리합니다.
마이크로커널 vs 모놀리식 (1992)
Andrew Tanenbaum과 Linus Torvalds의 유명한 논쟁. Tanenbaum은 "Linux는 시대에 뒤떨어진 모놀리식 설계"라고 비판했으나, Linus는 실용적 성능을 이유로 모놀리식을 고수했습니다. 결과적으로 loadable module, 네임스페이스 등 모듈화 기법으로 모놀리식의 단점을 보완하며 현재에 이르렀습니다.
BitKeeper 논쟁과 Git 탄생 (2002~2005)
2002년 Linus가 상용 VCS인 BitKeeper를 채택하면서 오픈소스 커뮤니티 내 논란이 시작되었습니다. 2005년 BitKeeper의 무료 라이선스가 철회되자 Linus가 2주 만에 Git을 개발했습니다. 이 사건은 분산 VCS의 혁명을 일으켰고, Git은 현재 세계에서 가장 널리 쓰이는 VCS가 되었습니다.
스케줄러 전쟁: O(1) vs CFS (2007)
Con Kolivas의 RSDL/BFS 스케줄러와 Ingo Molnar의 CFS(Completely Fair Scheduler) 사이의 경쟁. 결과적으로 CFS가 2.6.23에 병합되어 2024년까지 17년간 기본 스케줄러로 사용되었습니다. 2024년 6.6에서 Peter Zijlstra의 EEVDF가 CFS를 대체하며 새로운 시대를 열었습니다.
GPL 전용 심볼 논쟁 (지속)
NVIDIA 등의 바이너리 전용 드라이버가 GPL 전용 심볼(EXPORT_SYMBOL_GPL)을 사용할 수 없는 문제는
커널 라이선스 정책의 핵심 논쟁입니다. Linus의 유명한 "NVIDIA, f*** you" 발언(2012)은 이 갈등을 상징합니다.
2022년 NVIDIA가 커널 모듈을 오픈소스화하면서 일부 해소되었습니다.
Rust 도입 논쟁 (2020~현재)
C 언어 30년 전통의 커널에 Rust를 도입하는 것은 커뮤니티 내 가장 뜨거운 논쟁 중 하나입니다. 메모리 안전성(Rust 지지) vs 복잡성 증가/학습 곡선(반대)의 대립이 지속되고 있습니다. 2022년 6.1에서 Rust 인프라가 병합되었고, 2024년부터 실제 드라이버(nova-gpu)가 작성되고 있지만, 일부 메인테이너들의 반발도 여전합니다.
코드 오브 컨덕트 도입 (2018)
Linus Torvalds가 일시적으로 커널 관리를 중단하고 Linux Foundation의 Contributor Covenant를 채택한 사건. 이전의 "Code of Conflict"를 대체하여 보다 포용적인 커뮤니티 문화로의 전환을 시도했습니다. Linus는 자신의 공격적인 커뮤니케이션 스타일을 반성하며 복귀했습니다.
커널과 산업 생태계
리눅스 커널은 세계 IT 인프라의 근간입니다. 서버, 클라우드, 모바일, 임베디드, 슈퍼컴퓨터까지 거의 모든 컴퓨팅 영역에서 지배적 위치를 차지합니다.
시장 점유율 (2025~2026)
| 분야 | 리눅스 점유율 | 비고 |
|---|---|---|
| 슈퍼컴퓨터 (Top500) | 100% | 2017년부터 전수 리눅스 |
| 클라우드 서버 | ~90% | AWS, GCP, Azure 기본 OS |
| 웹 서버 | ~80% | Apache, Nginx, Caddy 운영 |
| 모바일 (Android) | ~72% | Android 커널 = 리눅스 커널 |
| IoT/임베디드 | ~65% | 라우터, NAS, 산업 자동화 |
| 컨테이너 호스트 | ~95% | Docker/Kubernetes 표준 OS |
| 데스크톱 | ~4% | 지속적 성장 (Steam Deck 영향) |
주요 배포판 커널 정책
| 배포판 | 커널 정책 | 현재 커널 | 지원 기간 |
|---|---|---|---|
| RHEL 9 | 5.14 기반 + 백포트 | 5.14.0-xxx | 2032년 (10년) |
| Ubuntu 26.04 LTS | 7.0 기반 + HWE | 7.0.0-xxx | 2031년 (5년) |
| Ubuntu 24.04 LTS | 6.8 기반 + HWE | 6.8.0-xxx | 2029년 (5년) |
| Debian 13 (Trixie) | 6.6/6.12 LTS 기반 | 6.12.xxx | 2029년+ (5년+) |
| Debian 12 (Bookworm) | 6.1 LTS 기반 | 6.1.xxx | 2028년 (5년+) |
| Fedora 44 (2026-04-28 예정) | 최신 안정 커널 | 6.19 | ~13개월 |
| Arch Linux | 최신 릴리스 직후 | 6.19.13 | 롤링 릴리스 |
| Android 16 | GKI 2.0 (6.12 LTS) | 6.12.xxx | 기기 수명 |
| ChromeOS | LTS + 백포트 | 6.6/6.12 | 기기 AUE 날짜 |
| SLES 15 SP6 | 6.4 기반 + 백포트 | 6.4.xxx | 2031년 |
Android GKI (Generic Kernel Image)
Google의 GKI는 Android 커널 파편화 문제를 해결하기 위한 핵심 프로젝트입니다. 기존에는 각 제조사(삼성, 퀄컴, 미디어텍 등)가 독자적으로 포크한 커널을 사용했으나, GKI 2.0(Android 12+)부터 Google이 단일 커널 바이너리를 제공하고 벤더 모듈만 별도로 로드하는 구조로 전환했습니다.
# Android GKI 커널 구조
# GKI 커널 (Google 제공, 공통)
boot.img
├── kernel (vmlinuz - GKI) # 모든 기기 공통
├── ramdisk.img # 초기 램디스크
└── dtb # Device Tree Blob
# 벤더 모듈 (제조사 제공, 기기별)
vendor_boot.img
├── vendor_ramdisk.img
└── dtb (추가 오버레이)
vendor_dlkm.img
└── lib/modules/ # 벤더 커널 모듈 (.ko)
├── qcom_xxx.ko # 퀄컴 SoC 드라이버
├── samsung_xxx.ko # 삼성 하드웨어 드라이버
└── camera_xxx.ko # 카메라 HAL 드라이버
# GKI 버전 확인 (Android 기기에서)
uname -r
# 예: 6.6.30-android15-6-gxxxxxxxx
# GKI 모듈 심볼 리스트 (ABI 안정성 보장)
# android/abi_gki_aarch64.stg 파일로 관리
클라우드 커널 커스터마이징
주요 클라우드 공급자들은 자체 커널을 운영하여 가상화 성능과 보안을 최적화합니다.
| 클라우드 | 커널 | 특징 |
|---|---|---|
| AWS | Amazon Linux Kernel (5.10/6.1 LTS) | Nitro 하이퍼바이저 최적화, ENA 드라이버 |
| Google Cloud | GKE 커널 (COS) | Container-Optimized OS, eBPF 강화 |
| Azure | Microsoft Linux Kernel | Hyper-V 최적화, CBL-Mariner |
| Oracle Cloud | UEK (Unbreakable Enterprise Kernel) | DTrace, Btrfs 강화 |
| IBM Cloud | RHEL 커널 기반 | POWER/s390x 최적화 |
실시간 리눅스와 자동차/산업 분야
PREEMPT_RT의 메인라인 통합(6.12)은 자동차, 로봇, 산업 자동화 분야에서 리눅스 채택을 가속화하고 있습니다. 이전에는 별도의 RT 패치를 유지해야 했으나, 이제 표준 커널에서 하드 실시간을 달성할 수 있습니다.
| 표준 | 리눅스 활용 | 요구 지연시간 |
|---|---|---|
| AUTOSAR Adaptive | 자율주행 ECU의 OS 후보 | <1ms |
| AGL (Automotive Grade Linux) | IVI/클러스터/ADAS 플랫폼 | 5~50ms (IVI) |
| ROS 2 (Robot OS) | 로봇 제어 미들웨어 | <1ms (모터 제어) |
| EtherCAT/PROFINET | 산업용 실시간 이더넷 | <1ms (사이클 타임) |
| 5G RAN (O-RAN) | 기지국 L1/L2 처리 | <100us |
# PREEMPT_RT 커널 설정 및 검증
# RT 커널 빌드 설정
make menuconfig
# General setup → Preemption Model → Fully Preemptible Kernel (RT)
# CONFIG_PREEMPT_RT=y
# RT 커널 확인
uname -a
# ...SMP PREEMPT_RT...
# 최악 지연시간 측정 (cyclictest)
cyclictest -m -p 99 -t 4 -D 60 -q
# T: 0 Min: 2 Act: 5 Avg: 4 Max: 18
# T: 1 Min: 2 Act: 4 Avg: 4 Max: 22
# Max < 50us가 일반적인 RT 성능 기준
# IRQ 스레드 확인 (RT에서는 대부분의 IRQ가 스레드화)
ps -eo pid,cls,rtprio,comm | grep irq
# RT 태스크 우선순위 설정
chrt -f 80 ./my_realtime_app # SCHED_FIFO, 우선순위 80
chrt -r 50 ./my_realtime_app # SCHED_RR, 우선순위 50
# CPU isolation (RT 전용 코어 확보)
# 커널 부팅 파라미터: isolcpus=2,3 nohz_full=2,3 rcu_nocbs=2,3
taskset -c 2 ./my_realtime_app # 격리된 CPU 2에서 실행
커널 참고 도서 (역사 이해에 도움)
| 도서 | 저자 | 연도 | 내용 |
|---|---|---|---|
| Just for Fun | Linus Torvalds | 2001 | 리눅스 탄생 스토리 (자서전) |
| Rebel Code | Glyn Moody | 2001 | 리눅스와 오픈소스 역사 |
| Understanding the Linux Kernel | Bovet, Cesati | 2005 | 2.6 커널 내부 구조 상세 |
| Linux Kernel Development | Robert Love | 2010 | 커널 개발 입문서 (3rd ed.) |
| Linux Device Drivers | Corbet, Rubini, Kroah-Hartman | 2005 | 드라이버 개발 바이블 (LDD3) |
| The Art of Linux Kernel Design | Lixin Yang | 2014 | 커널 설계 철학 |
| BPF Performance Tools | Brendan Gregg | 2019 | eBPF 기반 성능 분석 |
| Linux Observability with BPF | Calavera, Fontana | 2019 | BPF 관측 가능성 |
| Learning eBPF | Liz Rice | 2023 | 현대 eBPF 프로그래밍 |
참고자료
커널 공식 문서 및 아카이브
- The Linux Kernel Archives — 커널 공식 배포 사이트, 모든 릴리즈 타르볼과 변경 이력
- HOWTO do Linux kernel development — 커널 개발 참여 방법 공식 가이드
- A guide to the Kernel Development Process — 머지 윈도우, RC, 릴리즈 사이클 상세 설명
- Everything you ever wanted to know about Linux -stable releases — Stable/LTS 패치 선정 기준과 백포트 규칙
- Submitting patches: the essential guide — 패치 형식, 커밋 메시지, Signed-off-by 규칙
- Kernel Maintainer Handbooks — 서브시스템별 메인테이너 역할과 운영 가이드
- Linux Kernel Code of Conduct — 2018년 채택된 커뮤니티 행동 강령
- git.kernel.org — 커널 공식 Git 저장소 브라우저 (Linus 트리, 서브시스템 트리)
LWN.net 역사 관련 기사
- A 20-year timeline of Linux (2011) — 리눅스 20주년 주요 이정표 정리
- How the development process works (2014) — 커널 개발 프로세스 심층 분석
- Rust in the Linux Kernel (2020) — Rust for Linux 프로젝트 초기 논의
- The kernel's command line (2015) — 커널 부트 파라미터의 진화
- How the kernel is tested (2015) — 커널 테스트 인프라 발전사
- LWN.net Kernel Page — 매주 업데이트되는 커널 개발 뉴스와 분석
역사 및 문화 자료
- A Brief History of Linux — 카네기 멜론 대학의 리눅스 역사 요약
- Linux Foundation — Kernel Development Reports — Linux Foundation의 연례 커널 개발 통계 보고서
- Linux Kernel History Report — 커널 개발 참여자, 기업 기여도 통계
- lore.kernel.org (LKML) — 리눅스 커널 메일링 리스트 아카이브, 모든 기술 토론 원문
- KernelNewbies — Linux Versions — 버전별 주요 기능 변경사항 정리 (인간 친화적 요약)
- KernelNewbies — Linux Changes — 최신 커널 릴리즈 변경사항 상세
버전 관리와 Git 역사
- A Short History of Git — Linus Torvalds가 Git을 만든 배경과 BitKeeper 사건
- Linus Torvalds: Git (Google Tech Talk, 2007) — Git 설계 철학을 설명하는 유명 발표
- Linus Torvalds announces Linux 0.01 — 1991년 최초 리눅스 공개 메일 원문
컨퍼런스 및 발표
- Linux Plumbers Conference (YouTube) — 커널 플러머 컨퍼런스 발표 영상
- Kernel Recipes — 유럽 커널 개발자 컨퍼런스, 역사적 회고 발표 다수
- Linux Foundation (YouTube) — Linux Foundation 주최 컨퍼런스 발표 영상
- Open Source Summit — Linux Foundation 주최 오픈소스 서밋
서적
- Just for Fun: The Story of an Accidental Revolutionary (Linus Torvalds, David Diamond, 2001) — 리눅스 탄생 자서전
- Rebel Code: Linux and the Open Source Revolution (Glyn Moody, 2001) — 리눅스와 오픈소스 운동의 역사
- Free as in Freedom (Sam Williams, 2002) — Richard Stallman과 GNU 프로젝트 이야기
- The Cathedral and the Bazaar (Eric S. Raymond, 1999) — 오픈소스 개발 모델 분석의 고전
- Linux Kernel Development, 3rd ed. (Robert Love, 2010) — 커널 개발 입문서의 표준
- Understanding the Linux Kernel, 3rd ed. (Bovet & Cesati, 2005) — 2.6 커널 내부 구조 바이블
관련 문서
커널 역사와 함께 이해하면 유용한 문서들입니다.