커널 역사 (Kernel History)

리눅스 커널의 역사를 1991년 탄생부터 현재까지 버전별 릴리즈 시기, 주요 변경사항, 코드베이스 성장 통계, VCS 변천사, 커널 거버넌스 구조, stable/longterm 프로세스, 서브시스템 메인테이너 트리, 개발 프로세스의 모든 것을 심층적으로 정리합니다.

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

전제 조건: 커널 아키텍처커널 개발 주의사항 문서를 먼저 읽으세요. 참고 문서는 문제 해결 중 빠르게 맥락을 확인하는 용도이므로, 기본 실행 모델을 알고 읽으면 활용 효율이 크게 올라갑니다.
일상 비유: 이 주제는 현장용 기술 핸드북과 비슷합니다. 작업 중 바로 펼쳐 보는 기준서처럼, 핵심 용어/배경/연결 문서를 짧은 경로로 확인하는 데 초점을 둡니다.

핵심 요약

  • Mainline -- Linus Torvalds가 주도하는 최신 개발 라인
  • Stable -- 메인라인에서 분기된 버그/보안 수정 중심의 유지보수 라인
  • LTS -- 장기간 지원되는 장기 유지보수 버전
  • Merge Window -- 새 기능이 병합되는 초기 약 2주 구간
  • Release Candidate (rc) -- 최종 릴리즈 전 주간 검증 빌드

단계별 이해

  1. 초기 버전 읽기
    0.x~2.x에서 리눅스가 단일 아키텍처 실험 단계에서 범용 서버 OS로 확장된 흐름을 확인합니다.
  2. 현대화 전환점 확인
    3.x~5.x에서 cgroups, eBPF, io_uring 등 현재 운영환경에 직결되는 기능이 자리 잡는 과정을 봅니다.
  3. 최신 6.x 변화 추적
    실시간 지원, Rust 도입, 스케줄러 개선처럼 최근 설계 방향을 파악합니다.
  4. 운영 관점으로 연결
    stable/LTS 정책과 릴리즈 주기를 이해해 배포판 커널 선택과 업데이트 정책에 적용합니다.

개요 -- 리눅스 커널의 시작

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

리눅스 커널 탄생의 주요 영향 MINIX (1987) 교육용 마이크로커널 GNU (1983~) GCC, Bash, coreutils Intel i386 (1985) 보호 모드, MMU, TSS Linux 0.01 (1991) 10,239줄, i386, GPLv2 모놀리식 커널 서버/클라우드 전 세계 서버 90%+ 모바일 (Android) 30억+ 디바이스 임베디드/IoT 라우터, 자동차, 로봇
날짜사건의미
1983GNU 프로젝트 시작자유 소프트웨어 운동의 시작, 사용자 공간 도구 개발
1985Intel 80386 출시보호 모드, MMU, 태스크 스위칭 하드웨어 지원
1987MINIX 출시교육용 마이크로커널 OS, Linux 개발의 영감
1991-08-25Linus의 Usenet 포스팅Linux 프로젝트 공식 시작 선언
1991-09Linux 0.01 공개최초 소스 코드 배포 (10,239줄)
1992-01GPLv2 라이선스 전환자유로운 배포/수정 허용, 개발자 참여 폭발
1992-04Tanenbaum-Torvalds 논쟁마이크로커널 vs 모놀리식 설계 철학 대립
1994-03-14Linux 1.0 릴리즈첫 안정 릴리즈, TCP/IP 완전 통합
Tanenbaum-Torvalds 논쟁 (1992): MINIX 창시자 Andrew Tanenbaum은 "Linux는 구식(obsolete)"이라며 마이크로커널 설계의 우월성을 주장했다. Linus는 실용주의를 내세워 모놀리식 커널의 성능 이점을 반박했다. 30년이 지난 지금, Linux의 성공은 실용적 설계 선택의 정당성을 입증했다.

커널 버전 연대표

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

리눅스 커널 주요 버전 타임라인 0.01 1991 1.0 1994 2.0 1996 2.4 2001 2.6 2003 3.0 2011 4.0 2015 5.0 2019 6.0 2022 6.19 2025 초기 실험 엔터프라이즈 진입 현대화 (Git, CFS, cgroups) 성숙/혁신 (Rust, PREEMPT_RT) 주요 이정표 1992: GPLv2 전환 2005: Git 도입 2007: CFS 스케줄러 2013: User namespace (컨테이너) 2019: io_uring, WireGuard 2022: Rust 지원 2024: PREEMPT_RT 통합
버전릴리즈일핵심 변경사항
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)
6.182025-08-03최신 stable 계열의 기준 버전(2026-02-13 기준 stable: 6.18.10)
6.192025-10-12최신 mainline 버전(2026-02-13 기준)

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

0.01 (1991년 9월)

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

/* 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();
}
0.01 소스 구조: 전체 파일 88개, 디렉토리 구조는 boot/, fs/, include/, init/, kernel/, lib/, mm/, tools/로 구성되었다. 현재 커널의 기본 구조가 이미 이 시기에 확립되었다는 점이 주목할 만하다.

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.x 시대 버전 번호 체계 (홀수=개발, 짝수=안정) 개발 브랜치 (홀수) 2.1.x -> 2.2 (안정 릴리즈) 2.3.x -> 2.4 (안정 릴리즈) 2.5.x -> 2.6 (안정 릴리즈) 안정 브랜치 (짝수) 2.0.x -- 버그 수정만 2.2.x -- 버그 수정만 2.4.x -- 버그 수정만 2.6부터: 시간 기반 릴리즈 모델로 전환 2.6.x 포인트 릴리즈마다 새 기능 추가 (개발/안정 분리 폐기) 약 2~3개월 간격으로 릴리즈, merge window + rc 사이클 확립 이 모델은 3.x, 4.x, 5.x, 6.x까지 계속 유지됨

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, 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)
컨테이너 혁명 (3.8): User namespace 완성은 Docker(2013)와 현대 컨테이너 기술의 기반이 되었다. PID, mount, network, UTS, IPC namespace와 결합하여 비특권 사용자도 격리된 환경을 생성할 수 있게 되었다.

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
5.x 시대 핵심 기술 도입 흐름 io_uring (5.1) 비동기 I/O 혁신 WireGuard (5.6) 현대적 VPN BPF 확장 (5.x) 관측성/보안/네트워크 NTFS3 (5.15) Windows 호환성 Landlock 비특권 샌드박스 5.x 시대의 기술적 의미 io_uring: epoll/aio를 대체하는 고성능 비동기 I/O, 파일시스템/네트워크/소켓 통합 WireGuard: IPsec/OpenVPN 대비 코드 4,000줄, 현대 암호학(ChaCha20, Curve25519) BPF: 트레이싱, 네트워크 필터링, 보안 정책을 사용자 공간 프로그램으로 커널에 주입 PREEMPT_DYNAMIC (5.19): 부팅 시 선점 모델 변경 가능 (none/voluntary/full) LoongArch (5.19): 중국 자체 개발 ISA 지원, 아키텍처 다양성 확대

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
6.132025-01-19Lazy preemption 모델, Arm CCA, AArch64 GCS, RTNL per-namespace 락, XFS atomic writes, Rust trace events, TX H/W shaping API
6.142025-03-23ntsync, Btrfs RAID1 read balancing, uncached buffered I/O, FUSE io_uring, 4096 CPU 코어, DRM panic AMDGPU, SELinux extended permissions
6.152025-06-01Rust hrtimer/ARMv7, sched_ext 이벤트 리포팅, HW 래핑 암호화 키, EROFS 48-bit 블록, io_uring LSM 훅
6.162025-07-27Intel TDX 호스트, Intel APX, USB 오디오 오프로드, device memory TCP TX, XFS 대형 atomic writes, EXT4 large folio
6.172025-09-28CPU 버그 완화 선택 간소화(mitigations= 통합)
6.182025-08-03SLUB sheaves, dm-pcache, stable 최신 계열 (2026-02-13 기준 stable: 6.18.10)
6.192025-10-12mainline 최신 (2026-02-13 기준)
PREEMPT_RT 통합 (6.12): 약 20년간 out-of-tree 패치로 유지되던 실시간(RT) 스케줄링 지원이 드디어 메인라인에 완전히 통합되었다. 이는 산업용 임베디드, 로봇, 자동차, 오디오 등 실시간 요구사항이 있는 분야에서 큰 의미를 갖는다.
최신성 기준일: 이 문서의 버전 상태 표기는 2026-02-13 기준이며, kernel.org 공개 데이터 기준으로 mainline 6.19, stable 6.18.10, longterm 6.12.70입니다.

스케줄러 변천사

리눅스 커널의 프로세스 스케줄러는 워크로드 변화에 맞춰 꾸준히 진화해왔다. 스케줄러 변천사는 커널 설계 철학의 변화를 가장 잘 보여주는 지표이다.

리눅스 스케줄러 진화 초기 스케줄러 0.01~2.4 O(n) 순차 탐색 O(1) 스케줄러 2.6.0 (2003) Ingo Molnar CFS 2.6.23 (2007) Red-Black Tree EEVDF 6.6 (2023) Eligible/Deadline sched_ext 6.11 (2024) BPF 확장 스케줄러별 핵심 특성 초기: 런큐를 순차 탐색하여 가장 높은 우선순위 프로세스 선택, 프로세스 수에 비례하는 O(n) 비용 O(1): 비트맵 기반 우선순위 큐, 프로세스 수와 무관한 상수 시간 선택, 대화형 판별 휴리스틱 CFS: vruntime 기반 공정 스케줄링, Red-Black Tree, 가중치(nice)로 CPU 시간 비율 조정 EEVDF: Eligible/Virtual Deadline 기반, CFS의 공정성 + 지연시간 보장, lag 기반 선택 sched_ext: BPF 프로그램으로 스케줄링 정책을 런타임에 교체, 워크로드별 최적화 가능 PREEMPT_RT (6.12): 모든 스핀락을 RT-mutex로 대체, 결정적 지연시간 보장 Lazy preemption (6.13): voluntary preemption과 full preemption의 중간 모델
스케줄러커널 버전알고리즘시간 복잡도핵심 특성
초기0.01~2.4순차 탐색O(n)단순, 프로세스 수 증가 시 성능 저하
O(1)2.6.0비트맵 + 큐O(1)상수 시간 선택, 대화형 휴리스틱
CFS2.6.23Red-Black TreeO(log n)공정성 보장, vruntime 기반
EEVDF6.6Augmented RB-TreeO(log n)지연시간 보장, 공정성 유지
sched_ext6.11BPF 정의정책 의존런타임 교체 가능

VCS(버전 관리 시스템) 변천사

리눅스 커널의 소스 코드 관리 방식은 프로젝트 규모의 성장과 함께 극적으로 변화해왔다. VCS 변천사는 오픈소스 개발 방법론의 진화를 직접적으로 반영한다.

커널 소스 관리 시스템 변천 Tarball + 패치 1991 ~ 2002 FTP/메일링 리스트 BitKeeper 2002 ~ 2005 분산 VCS (상용) Git 2005 ~ 현재 Linus가 직접 개발 Git + Forge 2010s ~ 현재 GitHub/GitLab 미러 BitKeeper -> Git 전환 (2005) BitMover사가 무료 라이선스를 철회하면서 Linus는 2주 만에 Git을 작성 첫 Git 커밋: 2005-04-16 "Initial revision of 'git'" (Linus Torvalds) 2005-06-17: Linux 2.6.12가 Git으로 관리된 첫 번째 커널 릴리즈 Git은 이후 전 세계에서 가장 널리 사용되는 VCS가 되었으며, GitHub/GitLab 등의 기반이 됨 현재 커널 Git 저장소: 100만+ 커밋, 2만+ 기여자 (git.kernel.org)
시기관리 방식특성한계
1991~2002Tarball + 메일 패치Linus가 수작업 병합확장성 한계, 병합 충돌 관리 어려움
2002~2005BitKeeper (상용)분산 VCS, 효율적 병합라이선스 분쟁, 커뮤니티 갈등
2005~현재Git (오픈소스)Linus 직접 개발, SHA-1 해시, 분산없음 (사실상 표준)
# 커널 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
Git 탄생 비화: Linus는 BitKeeper의 무료 라이선스가 철회된 후, 기존의 어떤 VCS도 커널 개발의 요구사항(성능, 분산, 무결성)을 충족하지 못한다고 판단했다. 그는 2005년 4월 3일에 Git 개발을 시작했고, 4월 16일에 첫 커밋을 생성했다. 불과 2주 만의 일이다.

커널 개발 프로세스

릴리즈 사이클

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

리눅스 커널 릴리즈 사이클 (~9~10주) Merge Window ~2주 새 기능 병합 기간 Release Candidates (rc1 ~ rc7) ~7주 (매주 rc 릴리즈) 버그 수정만 허용 Final Release v6.X 안정 릴리즈 릴리즈 사이클 상세 Merge Window: 서브시스템 메인테이너가 준비한 pull request를 Linus가 병합 rc1: merge window 종료 시점, 이후 버그 수정만 허용 rc2~rc7: 매주 일요일 릴리즈, 리그레션 수정에 집중 Final: rc가 충분히 안정적이면 최종 릴리즈 (보통 rc7~rc8 후) 릴리즈 직후 다음 merge window가 즉시 열림 -> 사이클 반복
단계기간허용 사항설명
Merge Window~2주새 기능 + 버그 수정서브시스템 메인테이너가 준비한 변경사항을 Linus의 트리에 병합
rc1merge window 종료 시버그 수정만merge window 종료 선언, 안정화 시작
rc2 ~ rc7~7주 (매주)리그레션 수정만Release Candidate, 매주 일요일 릴리즈
Final Release1일-마지막 rc가 충분히 안정적이면 최종 릴리즈

Stable/LTS 프로세스

LTS (Long Term Support) 정책

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

Stable/LTS 릴리즈 프로세스 Mainline (Linus 트리): v6.17 -> v6.18 -> v6.19 -> ... Stable (Greg KH): v6.18.1 -> v6.18.2 -> ... -> v6.18.10 (다음 릴리즈까지) LTS: v6.12.1 -> v6.12.2 -> ... -> v6.12.70+ (2~6년 지원) backport LTS backport 현재 유지되는 LTS 커널 (2026-02-13 기준) 6.12.x (2024-11 ~): 최신 LTS, PREEMPT_RT 포함 6.6.x (2023-10 ~): EEVDF 스케줄러 6.1.x (2022-12 ~): Rust 지원, MGLRU 5.15.x (2021-10 ~): NTFS3, DAMON 5.10.x (2020-12 ~): Static calls, Android GKI 기반
LTS 버전릴리즈일예상 EOL주요 사용처
6.122024-112026~2028최신 임베디드/서버, RT 요구 환경
6.62023-102026~2028Debian 13, Ubuntu 24.04
6.12022-122026~2028Debian 12, 범용 서버
5.152021-102026Ubuntu 22.04, 임베디드
5.102020-122026Android GKI, 임베디드
5.42019-112025Ubuntu 20.04, 구형 임베디드

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+
Stable 메인테이너: Greg Kroah-Hartman이 stable 트리의 주 관리자이며, Sasha Levin이 보조한다. 이들은 매주 수십 개의 패치를 선별하여 stable 릴리즈에 포함시킨다. 자동화된 봇(AUTOSEL)이 메인라인 패치 중 stable 후보를 자동으로 선별하기도 한다.

커널 거버넌스

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

리눅스 커널은 계층적 메인테이너 구조로 관리된다. 이 구조는 "신뢰의 사슬(web of trust)"이라고도 불린다:

커널 메인테이너 계층 구조 Linus Torvalds 최상위 메인테이너 네트워킹 David Miller 메모리 관리 Andrew Morton 파일시스템 다수 FS 메인테이너 드라이버 Greg KH 등 스케줄러 Ingo Molnar 리뷰어 / 기여자 (전 세계 수천 명) 패치 흐름 개발자 -> 메일링 리스트(LKML) -> 서브시스템 메인테이너 리뷰 -> 서브시스템 트리에 적용 -> merge window 기간에 서브시스템 메인테이너가 Linus에게 pull request -> 메인라인 병합
# 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
Code of Conduct: 2018년 리눅스 커널은 Contributor Covenant 기반의 행동 강령(Code of Conduct)을 채택했다. 이는 커뮤니티 참여의 문턱을 낮추고, 건전한 협업 환경을 조성하기 위한 것이다.

커널 규모 변화

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

리눅스 커널 코드베이스 성장 (LOC) LOC 연도 0 5M 10M 20M 30M 0.01 1991 1.0 1994 2.0 1996 2.4 2001 2.6.0 2003 2.6.32 2009 3.0 2011 4.0 2015 5.0 2019 6.0 2022 6.1 2022
버전연도코드 라인 수 (약)파일 수 (약)디렉토리 비중
0.01199110,00088kernel/ 40%
1.01994176,000561drivers/ 30%
2.01996780,0002,100drivers/ 40%
2.4.020013,800,0008,200drivers/ 50%
2.6.020035,900,00015,000drivers/ 55%
2.6.32200912,600,00028,000drivers/ 60%
3.0201114,600,00037,000drivers/ 62%
4.0201519,500,00049,000drivers/ 65%
5.0201926,100,00063,000drivers/ 67%
6.0202230,400,00074,000drivers/ 68%
6.1202231,000,00076,000drivers/ 68%

코드 증가의 대부분은 디바이스 드라이버(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 릴리즈 기준 (약)비고
릴리즈당 커밋 수15,000~17,000rc 포함
릴리즈당 기여자 수1,800~2,200Signed-off-by 기준
릴리즈당 기여 회사 수200~250Linux Foundation 보고서 기준
하루 평균 커밋약 200merge window 기간 더 높음
하루 평균 변경 라인약 10,000+추가+삭제 합산
전체 기여자 누적20,000+git log 기준
전체 커밋 누적1,000,000+git rev-list 기준

주요 기여 조직

조직기여 비율 (약)주요 기여 영역
Intel10~12%x86, GPU(i915), 네트워킹, 보안
Red Hat8~10%파일시스템, 가상화, 네트워킹
Google6~8%Android, BPF, 메모리 관리
Linaro4~6%ARM, 전원 관리, 부트
SUSE3~5%파일시스템(Btrfs), 보안
AMD3~5%AMDGPU, 프로세서 지원
Meta2~4%BPF, 네트워킹, sched_ext
Huawei2~4%파일시스템, 스케줄링, ARM
개인 기여자10~15%다양한 영역
Linux Foundation 연례 보고서: Linux Foundation은 매년 "Who Writes Linux" 또는 "Linux Kernel Development Report"를 발간하여 기여자 통계, 회사별 기여 비율, 개발 프로세스 현황을 공개한다.

아키텍처 지원 역사

리눅스 커널은 i386 단일 아키텍처에서 시작하여 현재 30개 이상의 하드웨어 아키텍처를 지원한다.

아키텍처최초 지원 버전현재 상태주요 사용처
x86 (i386)0.01 (1991)활발데스크탑, 서버
x86_64 (AMD64)2.4.x (2001)활발 (주력)서버, 클라우드
Alpha1.2 (1995)제거됨 (6.x)역사적
SPARC1.2 (1995)유지보수레거시 서버
MIPS1.2 (1995)유지보수네트워크 장비, 임베디드
ARM (32-bit)2.0 (1996)유지보수구형 임베디드
PowerPC2.0 (1996)활발서버 (IBM Power)
ARM64 (AArch64)3.7 (2012)활발 (주력)모바일, 서버, Mac
RISC-V4.15 (2018)활발 (성장)임베디드, 학술
LoongArch5.19 (2022)활발Loongson 프로세서
제거된 아키텍처: 유지보수 기여자가 없는 오래된 아키텍처는 주기적으로 커널에서 제거된다. 최근에 제거된 아키텍처로는 Itanium(ia64, 6.7에서 제거), 일부 레거시 ARM 플랫폼 등이 있다.

보안 관련 주요 사건

리눅스 커널의 보안은 하드웨어 취약점 발견, LSM 프레임워크 발전, 커널 자체 방어 기능 강화를 통해 지속적으로 발전해왔다.

연도사건커널 대응영향
2001LSM(Linux Security Module) 프레임워크SELinux, AppArmor 등 플러그인 보안다양한 보안 정책 지원
2009SELinux 완전 통합NSA 개발 강제 접근 제어서버 보안 표준
2012seccomp-bpf (3.5)BPF 기반 시스템 콜 필터링컨테이너 보안 기반
2016Dirty COW (CVE-2016-5195)copy-on-write 레이스 컨디션 수정권한 상승 취약점
2018Meltdown/SpectreKPTI, Retpoline, IBRS/IBPBCPU 하드웨어 취약점 시대 개막
2019Lockdown LSM (5.4)커널 무결성 보호Secure Boot 연동 강화
2021Landlock LSM (5.13)비특권 사용자 샌드박싱프로세스별 접근 제어
2022Retbleedreturn speculation 완화추가 CPU 취약점 대응
2024Intel 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 73.10~2024 (ELS)대규모 백포트, ABI 안정성
RHEL 84.18~2029BPF, TLS offload
RHEL 95.14~2032core scheduling, io_uring
Ubuntu 20.04 LTS5.4~2030 (ESM)io_uring, WireGuard 백포트
Ubuntu 22.04 LTS5.15~2032 (ESM)NTFS3, DAMON
Ubuntu 24.04 LTS6.8~2034 (ESM)Intel FRED, Rust 지원
Debian 12 (Bookworm)6.1~2028 (LTS)MGLRU, Rust
Debian 13 (Trixie)6.6+~2030 (예상)EEVDF
SLES 15 SP55.14~2031LTSS 추가 가능
Android 14 GKI5.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
배포판 커널 vs 메인라인: 배포판 커널은 수천 개의 백포트 패치가 적용되어 있어, 단순히 uname -r 버전만으로 기능 지원 여부를 판단하면 안 된다. 예를 들어 RHEL 7의 3.10 커널에는 4.x/5.x에서 백포트된 수천 개의 패치가 포함되어 있다.

리눅스 커널의 라이선스 역사는 오픈소스 소프트웨어 법률의 발전과 밀접하게 연관되어 있다.

시기사건의미
1991자체 라이선스 (상업 배포 금지)초기 배포 제한
1992GPLv2 전환자유로운 배포, 개발자 참여 폭발
2003~2007SCO vs IBM 소송Linux에 Unix 코드 포함 주장 -> 패소
2006GPLv3 발표, Linus 거부Linux는 GPLv2 유지 (DRM 조항 반대)
2017SPDX 라이선스 태그 도입모든 소스 파일에 기계 읽기 가능한 라이선스 표시
2018Contributor Covenant 채택행동 강령(Code of Conduct) 공식화
2022Rust 코드 듀얼 라이선스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
GPLv2 vs GPLv3: Linus Torvalds는 GPLv3의 "Tivoization" 금지 조항(하드웨어에서 수정된 소프트웨어 실행을 막는 것을 금지)에 반대하여 Linux 커널을 GPLv2로 유지했다. 이 결정은 임베디드/모바일 산업에서 Linux 채택을 촉진하는 데 기여했다는 평가와, 사용자 자유를 제한한다는 비판이 공존한다.

Rust in Kernel 역사

C 언어로만 작성되던 리눅스 커널에 Rust가 도입된 것은 30년 역사상 가장 큰 언어 변화이다.

시기사건의미
2020-07Rust for Linux RFC 제안Miguel Ojeda의 최초 제안
2021-04RFC v2 패치 시리즈커뮤니티 피드백 반영
2022-106.0: Rust 인프라 초기 도입CONFIG_RUST 빌드 옵션
2022-126.1: 공식 통합Rust 커널 모듈 작성 가능
2023-046.3: Rust alloc 모듈커널 메모리 할당자 바인딩
2024-056.9: 첫 Rust 파일시스템(PuzzleFS)실용적 Rust 드라이버
2025-016.13: Rust trace events트레이싱 연동
2025-066.15: Rust hrtimer/ARMv7타이머/아키텍처 확장
# 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");
    }
}
Rust 도입의 논쟁: Rust의 커널 도입은 메모리 안전성 향상이라는 명확한 이점이 있지만, 기존 C 개발자들의 학습 곡선, 빌드 의존성 증가, 커뮤니티 분열 우려 등 논쟁도 있다. Linus는 Rust가 "커널의 유일한 언어가 되는 것이 아니라, C와 공존하는 것"이라고 강조했다.

서브시스템 메인테이너 트리

리눅스 커널의 개발은 수십 개의 서브시스템 트리로 분산되어 진행된다. 각 서브시스템 메인테이너는 자신의 Git 트리에서 패치를 관리하고, merge window 기간에 Linus에게 pull request를 보낸다.

서브시스템 메인테이너 트리 구조 Linus 트리 (mainline) git.kernel.org/torvalds/linux.git net-next 네트워킹 (신기능) David Miller, Jakub K. net 네트워킹 (버그수정) David Miller mm 메모리 관리 Andrew Morton tip x86, 스케줄러, 타이머 Ingo Molnar, Thomas G. driver-core/staging 드라이버 코어, USB Greg KH bpf-next / bpf eBPF 서브시스템 Alexei S., Daniel B. block 블록 I/O Jens Axboe drm GPU/디스플레이 Dave Airlie 등 sound ALSA/ASoC Takashi Iwai security LSM, 보안 Paul Moore 등 주요 서브시스템 트리 목록 net-next/net: 네트워킹 전체 (프로토콜, 드라이버, BPF 연동) mm: 메모리 관리, SLUB, 페이지 캐시, OOM, swap tip: x86 아키텍처, 스케줄러(CFS/EEVDF), IRQ, 타이머, locking block: 블록 I/O 스택, io_uring, NVMe, SCSI drm: GPU 드라이버 (i915, amdgpu, nouveau), DRM/KMS bpf-next/bpf: eBPF 코어, 검증기, JIT, libbpf kvm: KVM 하이퍼바이저, VFIO, virtio rust: Rust 인프라, 바인딩, 드라이버
서브시스템 트리주 관리자Git URL범위
net-nextDavid Miller, Jakub Kicinskigit.kernel.org/.../net-next.git네트워킹 신기능
netDavid Millergit.kernel.org/.../net.git네트워킹 버그 수정
mmAndrew Mortongit.kernel.org/.../mm.git메모리 관리
tipIngo Molnar, Thomas Gleixnergit.kernel.org/.../tip.gitx86, 스케줄러, 잠금
blockJens Axboegit.kernel.org/.../block.git블록 I/O
bpf-nextAlexei Starovoitov, Daniel Borkmanngit.kernel.org/.../bpf-next.giteBPF
drmDave Airlie 외git.kernel.org/.../drm.gitGPU/디스플레이
kvmPaolo Bonzinigit.kernel.org/.../kvm.git가상화
driver-coreGreg Kroah-Hartmangit.kernel.org/.../driver-core.git드라이버 코어, USB
rustMiguel Ojedagit.kernel.org/.../rust.gitRust 인프라
soundTakashi Iwaigit.kernel.org/.../sound.gitALSA/ASoC
securityPaul Moore 외git.kernel.org/.../security.gitLSM, SELinux
arm-socArnd Bergmann, Olof Johanssongit.kernel.org/.../arm-soc.gitARM 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 트리: Stephen Rothwell이 관리하는 linux-next 트리는 다음 merge window에 포함될 모든 서브시스템 트리의 통합 빌드입니다. 매일 업데이트되며, 서브시스템 간 충돌을 사전에 감지하는 역할을 합니다.

릴리즈별 주요 기능 상세

이 섹션에서는 커널 역사에서 특히 영향력이 컸던 기능들의 도입 배경, 설계 결정, 이후 발전 과정을 상세히 다룬다.

cgroups (2.6.24, 2008)

Control Groups는 Google 엔지니어들(Paul Menage, Rohit Seth)이 개발한 프로세스 자원 제어 메커니즘이다. 프로세스 그룹에 CPU, 메모리, I/O, 네트워크 대역폭 등의 자원 한도를 설정할 수 있다.

eBPF (3.18~현재)

extended Berkeley Packet Filter는 커널 내에서 안전하게 실행되는 사용자 정의 프로그램 프레임워크이다. 원래 패킷 필터링용이었으나, 현재는 트레이싱, 보안, 네트워킹, 스케줄링 등 거의 모든 커널 서브시스템에서 사용된다.

버전eBPF 기능의의
3.18bpf() 시스템 콜 도입사용자 공간에서 BPF 프로그램 로드
4.1kprobes 연동커널 함수 트레이싱
4.7cgroup BPFcgroup 단위 네트워크 정책
4.9XDP (eXpress Data Path)NIC 드라이버 레벨 패킷 처리
4.15BPF Type Format (BTF)타입 정보 기반 이식성
5.2BPF 트램폴린fentry/fexit 고성능 트레이싱
5.8BPF 링 버퍼고성능 이벤트 전달
6.11sched_extBPF 기반 스케줄러 교체

io_uring (5.1~현재)

Jens Axboe가 개발한 io_uring은 비동기 I/O의 혁명적 개선이다. 기존 aio(Linux AIO)와 epoll의 한계를 극복하기 위해, 사용자-커널 간 공유 링 버퍼로 시스템 콜 오버헤드를 최소화했다.

PREEMPT_RT (6.12, 2024)

약 20년간 out-of-tree로 유지된 실시간 스케줄링 패치가 드디어 메인라인에 통합되었다. Thomas Gleixner와 Peter Zijlstra의 주도로, 모든 스핀락을 RT-mutex로 대체하고 인터럽트를 스레드화하여 결정적(deterministic) 지연시간을 보장한다.

시기PREEMPT_RT 이정표상세
2004PREEMPT_RT 패치 시작Ingo Molnar의 최초 패치
2006-rt 패치 시리즈 안정화산업용 환경에서 채택 시작
2015Linux Foundation RT 프로젝트기업 지원 시작
20246.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

개발 통계 상세

리눅스 커널의 개발 활동을 정량적으로 분석하면, 이 프로젝트의 규모와 활력을 구체적으로 이해할 수 있다.

릴리즈 주기별 개발 활동 (6.x 기준) 커밋수 릴리즈 0 5K 10K 15K 18K 6.0 15.4K 6.1 16.1K 6.2 14.6K 6.3 15.8K 6.4 16.5K 6.5 16.8K 6.6 17.5K 6.7 17.2K 6.8 16.2K 6.9 16.9K 6.12 18.2K 평균: ~16,000 커밋/릴리즈 | ~1,900 기여자/릴리즈 | ~70일 사이클 6.12 (LTS): PREEMPT_RT 통합으로 커밋 수 최대

디렉토리별 코드 비중 변화

디렉토리2.6.0 (2003)4.0 (2015)6.1 (2022)역할
drivers/55%65%68%하드웨어 드라이버
arch/18%14%12%아키텍처별 코드
fs/8%6%5%파일시스템
net/6%5%5%네트워크 스택
kernel/3%3%3%코어 커널
mm/1%1%1%메모리 관리
sound/3%3%3%오디오
기타6%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,00012,000~16,00015,000~18,000
릴리즈당 기여자500~1,5001,500~2,0001,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 트리의 패치 선정과 릴리즈 과정은 엄격한 규칙을 따른다. 이 프로세스를 이해하면 배포판 커널 업데이트의 배경을 알 수 있다.

Stable 패치 흐름 메인라인 패치 Cc: stable 태그 AUTOSEL 봇 자동 후보 선별 Greg KH 리뷰 수동 검증 + 빌드 테스트 stable-rc 트리 후보 패치 큐 (리뷰 대기) 자동 테스트 KernelCI, 0-day bot Stable 릴리즈 v6.X.Y 태그 Stable 패치 선정 기준 (Documentation/process/stable-kernel-rules.rst) 1. 메인라인에 이미 병합된 패치여야 한다 (upstream first) 2. 실제 버그를 수정하거나 보안 문제를 해결해야 한다 3. 100줄 이하의 작은 패치여야 한다 (예외: 보안 수정) 4. Cc: stable@vger.kernel.org 태그가 있거나 AUTOSEL이 선별 5. 72시간 리뷰 기간 후 이의 없으면 stable 트리에 적용 6. KernelCI/0-day 자동 빌드/부트 테스트 통과 필수 7. 릴리즈 주기: 주 1~2회 (긴급 보안 수정 시 즉시)

LTS 정책 상세

항목일반 StableLTS (Long Term Support)
지원 기간다음 릴리즈까지 (~2~3개월)최소 2년, 최대 6년
선정 기준모든 메인라인 릴리즈연 1~2개, 기술적 중요도 기준
패치 범위버그 수정, 보안 수정버그 수정, 보안 수정 (더 보수적)
사용처롤링 릴리즈 배포판엔터프라이즈 배포판, 임베디드, Android
릴리즈 빈도주 1~2회주 1~2회
관리자Greg KH, Sasha LevinGreg KH (일부 위임)
LTS EOL 주의: LTS 커널의 EOL(End of Life) 이후에는 보안 패치가 제공되지 않는다. kernel.org의 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-HartmanLinus 부재 시 관리Linus 지명
서브시스템 메인테이너~1,700명서브시스템 패치 리뷰/병합기술적 역량 기반
TAB 위원선출직 10명기술 자문, CoC 조정커뮤니티 투표
Stable 관리자Greg KH, Sasha Levinstable/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 FS0.01 (1991)레거시최초 지원, 교육용
ext0.96 (1992)제거됨최초 Linux 전용 FS
ext20.99 (1993)유지보수저널링 없음, 단순/빠름
ext32.4 (2001)유지보수저널링 추가, ext2 호환
ext42.6.28 (2008)활발 (기본 FS)엑스텐트, 48비트 블록, 대용량
ReiserFS2.4 (2001)제거 예정tail packing, 소파일 최적화
XFS2.6 (2003)활발64비트, 병렬 I/O, 대용량
Btrfs2.6.29 (2009)활발CoW, 스냅샷, RAID, 압축
F2FS3.8 (2013)활발플래시 최적화, Android 채택
OverlayFS3.18 (2014)활발유니온 마운트, 컨테이너 기반
NTFS35.15 (2021)활발Windows NTFS 읽기/쓰기
Bcachefs6.7 (2024)실험적CoW, 체크섬, 암호화, 압축
ext4의 장수 비결: ext4는 2008년 안정화 이후 15년 이상 리눅스 기본 파일시스템 지위를 유지하고 있다. fast commit (5.10), large folio (6.16) 등 지속적인 개선이 이루어지고 있으며, 안정성과 호환성 면에서 여전히 가장 신뢰받는 파일시스템이다.

네트워킹 스택 진화

리눅스 네트워킹 스택은 단순한 TCP/IP 구현에서 세계에서 가장 기능이 풍부한 네트워크 OS로 발전했다.

시기기능커널 버전영향
1994TCP/IP 스택 완성1.0인터넷 서버 가능
1999IPv6 초기 지원2.2차세대 인터넷 프로토콜
2001iptables/Netfilter2.4방화벽 프레임워크
2001SCTP2.4통신 프로토콜
2005NAPI2.6.x고속 패킷 처리
2006네트워크 네임스페이스2.6.24컨테이너 네트워킹
2009Open vSwitch3.3SDN 가상 스위치
2013nftables3.13iptables 차세대 대체
2016XDP4.8초고속 패킷 처리
2016BBR TCP 혼잡 제어4.9Google 고성능 혼잡 제어
2018kTLS4.13커널 TLS 오프로드
2020WireGuard5.6현대적 VPN
2020MPTCP5.6다중 경로 TCP
2024TCP 하드웨어 TX shaping6.13NIC 기반 트래픽 제어

커널 빌드 시스템 변천

커널 빌드 시스템도 코드베이스 성장에 맞춰 진화해왔다.

시기빌드 시스템특성
1991~2001순수 Makefile + 쉘 스크립트단순, 수동 의존성
2001Kconfig (menuconfig) 도입대화형 설정 인터페이스
2002~2005Kbuild 시스템 현대화재귀적 make, Sam Ravnborg 주도
2017GCC 플러그인 인프라컴파일 시 보안 검증
2020Clang/LLVM 빌드 지원GCC 외 컴파일러 지원
2022Rust 빌드 통합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]'

미래 전망

리눅스 커널은 30년 이상의 역사를 통해 지속적으로 발전해왔으며, 앞으로도 여러 방향에서 진화가 예상된다.

기술적 방향성

영역현재 상태미래 방향
Rust 확대인프라 + 초기 드라이버네트워크/파일시스템 드라이버, 핵심 서브시스템
스케줄링EEVDF + sched_extBPF 기반 워크로드 적응형 스케줄링
보안CFI, shadow stack, Landlock하드웨어 보안 기능 통합 확대
이기종 컴퓨팅GPU/NPU 드라이버통합 메모리 모델, 가속기 스케줄링
실시간PREEMPT_RT 통합더 세밀한 지연시간 보장
네트워킹XDP, AF_XDP, io_uring하드웨어 오프로드 확대, P4/eBPF 통합
에너지 효율EAS, CPUFreq/CPUIdle탄소 인식 스케줄링, 지속 가능성
아키텍처x86_64, ARM64, RISC-VRISC-V 생태계 확대, 레거시 아키텍처 정리

거버넌스 과제

참여 방법: 커널 개발에 참여하려면 Documentation/process/howto.rst를 읽고, kernelnewbies.org에서 시작하는 것을 권장한다. 첫 패치로는 scripts/checkpatch.pl이 지적하는 코딩 스타일 수정이 좋은 진입점이다.

메모리 관리 진화

리눅스 커널의 메모리 관리 서브시스템은 초기 단순한 페이지 할당에서 현대의 정교한 다층 메모리 관리 체계로 발전했다. 이 변천사는 하드웨어 발전(대용량 메모리, NUMA, 영구 메모리)과 워크로드 변화(가상화, 컨테이너)를 반영한다.

시기커널 버전주요 변경영향
19910.01단순 페이지 할당최대 16MB 메모리 지원
19951.2버디 할당자(Buddy Allocator) 도입외부 단편화 감소
19962.0SLAB 할당자 도입커널 오브젝트 캐싱
19992.2highmem 지원 (896MB+)32비트에서 대용량 메모리 활용
20012.4ZONE_HIGHMEM, 리버스 매핑(rmap)페이지 회수 효율화
20032.6NUMA 정책, hugepages서버 워크로드 최적화
20042.6.7zone_reclaim, kswapd 개선메모리 압력 대응
20072.6.23SLUB 할당자 (SLAB 대체)성능/디버깅 개선
20082.6.25cgroup 메모리 컨트롤러 (memcg)컨테이너 메모리 격리
20102.6.33Transparent Huge Pages (THP)자동 hugepage 활용
20123.2zswap (압축 스왑 캐시)I/O 감소, 스왑 성능 향상
20133.11zram (압축 RAM 디스크)모바일/임베디드 메모리 확장
20143.15memfd_create() 시스템 콜익명 공유 메모리
20174.14KASAN (Kernel Address Sanitizer)메모리 오류 탐지 프레임워크
20184.15KPTI (Meltdown 대응)커널/유저 페이지 테이블 분리
20195.1persistent memory (DAX/PMEM) 성숙영구 메모리 파일시스템 지원
20205.8memcg v2 성숙, slab memcg 통합정확한 컨테이너 메모리 계측
20225.16DAMON (Data Access MONitor)접근 패턴 기반 메모리 관리
20225.18Multi-gen LRU (MGLRU)페이지 회수 알고리즘 혁신
20236.1maple tree (VMA 자료구조 교체)VMA 관리 성능 향상
20246.8large folio 일반화THP 유연화, 파일 I/O 최적화
메모리 관리 서브시스템 계층 구조 유저 공간: malloc / mmap / brk VMA 관리: maple tree (6.1+) / red-black tree (이전) 페이지 폴트 핸들러 demand paging, CoW, THP 페이지 회수 (reclaim) MGLRU / kswapd / direct reclaim 버디 할당자 order 0~10 페이지 SLUB 할당자 kmalloc / kmem_cache CMA / DMA 풀 연속 메모리 할당 물리 메모리: ZONE_DMA | ZONE_DMA32 | ZONE_NORMAL | ZONE_MOVABLE | ZONE_DEVICE

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에서 도입된 페이지 캐시 관리 단위로, 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 */
MGLRU의 실측 효과: Google의 ChromeOS 벤치마크에서 MGLRU는 전통적 LRU 대비 메모리 압력 시 애플리케이션 응답 시간을 40% 개선하고, kswapd CPU 사용량을 60% 줄였다. 서버 환경에서도 Redis/Memcached 같은 캐시 워크로드에서 유의미한 지연시간 감소를 보였다.

디바이스 모델 진화

리눅스 커널의 디바이스 모델은 하드웨어 추상화와 드라이버 관리의 근간이다. 초기의 디바이스 번호(major/minor) 기반 모델에서 sysfs/udev 기반의 현대적 모델로 발전했다.

시기커널 버전변경핵심 내용
19910.01디바이스 번호 모델major/minor 번호로 장치 식별
19941.0/proc 파일시스템커널 정보 노출 인터페이스
19992.2devfs (실험적)자동 디바이스 노드 생성 시도
20022.5통합 디바이스 모델bus/device/driver 계층, Pat Mochel 설계
20032.6sysfs 도입디바이스 트리를 /sys에 노출
20032.6udev 도입유저 공간 디바이스 관리자 (devfs 대체)
20052.6.13ueventhotplug 이벤트 → udev 처리
20082.6.25Device Tree (ARM)하드웨어 기술 표준화 (Open Firmware)
20113.xDevice Tree 의무화 (ARM)보드 파일 제거, DT 기반 프로빙
20123.5devlink 프레임워크멀티포트 디바이스 통합 관리
20164.6ACPI + Device Tree 공존x86에서도 DT 사용 가능
20195.2auxiliary bus하나의 디바이스에서 여러 서브기능 분리
20215.15devlink 리로드/파라미터 확장NIC/스위치 런타임 재설정
20236.3Rust 드라이버 바인딩안전한 드라이버 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
devfs에서 udev로의 전환: devfs(2.4 시대)는 커널 공간에서 /dev 노드를 자동 생성했으나, 네이밍 정책이 커널에 하드코딩되어 유연성이 부족했다. udev(2.6~)는 유저 공간에서 규칙 기반으로 디바이스 노드를 생성함으로써 이 문제를 해결했다. 현재 systemd-udevd가 사실상 표준이다.

가상화 지원 변천

리눅스는 세계에서 가장 널리 사용되는 하이퍼바이저 호스트 OS이다. KVM의 메인라인 통합부터 컨테이너 격리, 마이크로VM까지 가상화 기술의 전 영역을 포괄한다.

시기커널 버전기술영향
20022.4.xUser-mode Linux (UML)커널을 유저 프로세스로 실행
20032.6.0Xen 파라가상화 패치초기 하이퍼바이저 지원
20062.6.20KVM (Kernel-based VM)하드웨어 가상화 (VT-x/AMD-V) 활용
20072.6.23cgroups리소스 격리 프레임워크
20082.6.24네트워크 네임스페이스컨테이너 네트워킹 기반
20082.6.26완전한 네임스페이스 세트PID/UTS/IPC/mount/user NS
20113.0Xen 메인라인 통합외부 패치 불필요
20133.8user namespace 완성비특권 컨테이너 가능
20164.7vhost-net 고성능 I/OVM 네트워크 성능 향상
20195.1io_uring (VM I/O 활용)비동기 I/O 혁신
20205.6virtio-fs호스트-게스트 파일 공유
20205.10AMD SEV-ES 지원기밀 컴퓨팅 (VM 암호화)
20215.13Intel TDX 초기 지원신뢰 실행 환경
20225.19Intel TDX 게스트 지원하드웨어 기밀 VM
20236.2AMD SEV-SNP 게스트보안 중첩 페이징
20246.9guest_memfd게스트 전용 메모리 (기밀 컴퓨팅)
리눅스 가상화 기술 스택 KVM (하드웨어 가상화) Guest VM (QEMU/Firecracker) virtio 드라이버 vhost-net / vhost-user KVM 모듈 (VT-x/AMD-V) 하드웨어 (CPU + IOMMU) 컨테이너 (OS-level) Docker / Podman / LXC OCI Runtime (runc/crun) namespaces cgroups v2 seccomp-BPF AppArmor/SEL 공유 커널 (호스트와 동일) 기밀 컴퓨팅 (CoCo) Confidential VM (CVM) guest_memfd / SWIOTLB SEV-SNP Intel TDX 원격 증명 (Remote Attestation) 암호화된 메모리 + 하드웨어 TEE
KVM의 성공 요인: KVM이 Xen을 제치고 기본 하이퍼바이저가 된 핵심 이유는 "커널 자체가 하이퍼바이저"라는 설계 철학이다. 기존 리눅스 스케줄러, 메모리 관리, 드라이버를 그대로 활용하므로 별도 하이퍼바이저 개발 부담이 없고, 커널 개선이 곧 하이퍼바이저 개선이 되는 선순환 구조를 만들었다. AWS Firecracker, Google gVisor 등 현대 마이크로VM도 KVM 위에 구축되었다.

전원 관리와 에너지 효율 역사

리눅스 커널의 전원 관리는 노트북 배터리 절약에서 시작하여 데이터센터 에너지 효율과 모바일 디바이스 최적화까지 광범위한 영역으로 확장되었다.

시기커널 버전기술영향
19962.0APM (Advanced Power Management)BIOS 기반 전원 관리
20022.4ACPI 지원OS 주도 전원 관리
20042.6.9cpufreq 프레임워크CPU 주파수 동적 조절
20062.6.21tickless kernel (NO_HZ)유휴 시 타이머 인터럽트 제거
20082.6.28runtime PM 프레임워크디바이스별 동적 전원 관리
20092.6.32PM QoS (Quality of Service)전원/성능 요구사항 협상
20113.0cpuidle 거버너 개선C-state 선택 최적화
20143.16EAS (Energy Aware Scheduling)에너지 인식 태스크 배치
20164.7schedutil 거버너스케줄러 기반 주파수 결정
20195.1Intel Speed Select (ISST)코어별 성능 프로파일
20205.7thermal pressure 통합열 스로틀링 인식 스케줄링
20215.14Energy Model 개선OPP(Operating Performance Point) 정밀화
20236.3AMD P-State EPP 드라이버하드웨어 자율 DVFS
20246.8Intel 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)
EAS (Energy Aware Scheduling)의 원리: ARM big.LITTLE 아키텍처에서 에너지 효율이 다른 코어들 사이에서 태스크를 최적 배치하는 기술이다. 작은 태스크는 LITTLE 코어에, 무거운 태스크는 big 코어에 배치하여 성능과 에너지 효율을 동시에 최적화한다. schedutil 거버너와 결합하면 주파수 결정까지 통합된다.

커널 디버깅 도구 변천

리눅스 커널 디버깅 도구는 printk에서 시작하여 현재의 정교한 트레이싱/프로파일링 프레임워크로 발전했다. 이 변천사는 커널 개발 문화와 소프트웨어 공학의 진보를 반영한다.

시기도구커널 버전용도
1991printk0.01커널 로그 출력 (가장 기본적인 디버깅)
1995kgdb외부 패치원격 GDB 디버깅
1999ksymoops2.2커널 Oops 심볼 해석
2004kprobes2.6.9동적 커널 계측점 삽입
2005SystemTap외부 도구스크립트 기반 커널 프로빙
2008ftrace2.6.27함수 트레이싱 프레임워크
2009perf2.6.31PMU 기반 성능 프로파일링
2009tracepoints2.6.28정적 커널 트레이스포인트
2014BPF tracing (BCC)3.18+eBPF 기반 동적 트레이싱
2017KASAN4.0커널 주소 살균기 (메모리 오류 탐지)
2017UBSAN4.0정의되지 않은 동작 탐지
2018bpftrace4.x+DTrace 스타일 고수준 BPF 트레이싱
2019KCSAN5.3동시성 버그 (data race) 탐지
2020KMSAN5.x초기화되지 않은 메모리 탐지
2022KFENCE5.12경량 메모리 오류 탐지 (프로덕션)
2024perf mem / c2c6.x캐시 라인 경합 분석
# 주요 커널 디버깅 도구 사용 예시

# === 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    (커널 로그)
eBPF의 디버깅 혁명: eBPF(2014~)는 커널 디버깅/트레이싱의 패러다임을 바꿨다. 커널을 재빌드하지 않고, 프로덕션 환경에서 안전하게 커널 내부를 관측할 수 있게 되었다. Brendan Gregg의 BCC/bpftrace 도구들은 "커널 관측 가능성(observability)"이라는 새로운 분야를 열었으며, 이제는 성능 분석, 보안 모니터링, 네트워크 필터링까지 eBPF가 핵심 기술로 자리잡았다.

커널 테스트 인프라 발전

리눅스 커널은 세계 최대 규모의 오픈소스 프로젝트답게 정교한 테스트 인프라를 구축해왔다. 초기에는 테스트가 거의 없었으나, 현재는 수십 개의 자동화된 CI 시스템이 매 패치를 검증한다.

테스트 시스템시작용도운영 주체
LTP (Linux Test Project)2001시스콜, 파일시스템 회귀 테스트SGI → IBM → 커뮤니티
kselftest2012 (3.7)서브시스템별 단위 테스트커널 트리 내장
0-day (Intel)2012빌드/부트/실행 테스트 자동화Intel
kernelci.org2014다중 아키텍처 CILinux Foundation
syzbot (syzkaller)2017커버리지 기반 커널 퍼징Google
KUnit2019 (5.5)커널 내 단위 테스트 프레임워크Google
LKFT2017기능 테스트 자동화Linaro
CKI (CentOS)2019Red Hat 커널 CIRed Hat
virtme-ng2023빠른 커널 부팅/테스트커뮤니티
# 커널 테스트 실행 예시

# === 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
syzbot의 영향: Google의 syzbot은 매일 수천 개의 커널 빌드를 퍼징하여 수백 개의 버그를 자동 발견한다. 2017년 이후 syzbot이 보고한 커널 버그는 10,000건 이상이며, 이 중 상당수가 보안 취약점이었다. syzbot은 reproducer와 bisect 결과까지 자동 생성하여 개발자의 디버깅 부담을 크게 줄였다.

커널 문서화 시스템 변천

커널 문서화 체계의 발전은 프로젝트 규모 성장과 개발자 온보딩의 필요성을 반영한다.

시기시스템특징
1991~2000일반 텍스트 (Documentation/)형식 없는 .txt 파일
2000DocBook XML구조화된 API 문서 (xmlto 빌드)
2004kernel-doc 주석소스 코드 내 API 주석 자동 추출
2016Sphinx + reStructuredText현대적 문서 빌드 시스템으로 전환
2017docs.kernel.org온라인 문서 자동 배포
2019.rst 의무화모든 새 문서는 RST 형식
2020MAINTAINERS에 문서 매핑서브시스템별 문서 관리자
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 주석 형식: 커널 소스에서 /**로 시작하는 주석은 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-byDCO(Developer Certificate of Origin) 서명모든 기여자 필수
DCO (Developer Certificate of Origin): Signed-off-by 태그는 기여자가 해당 코드의 저작권/라이선스 적합성을 확인한다는 법적 선언이다. 2004년 SCO-IBM 소송 이후 도입되었으며, 모든 커널 패치에 필수이다. git commit -s로 자동 추가된다.

커널 주요 인물과 기여

리눅스 커널의 역사는 핵심 개발자들의 기여와 분리할 수 없다. 프로젝트 초기부터 현재까지 커널의 방향을 결정지은 주요 인물들을 정리한다.

인물주요 기여활동 시기현재 역할
Linus Torvalds커널 창시, Git 개발, 전체 관리1991~현재BDFL / 최종 통합자
Alan Cox네트워킹, TTY, 초기 SMP1991~2013반은퇴 (Intel)
Andrew Mortonmm, -mm 트리, 통합 관리2001~현재부관리자 (Google)
David S. Miller네트워킹 스택, SPARC1996~현재net 메인테이너 (Oracle)
Greg Kroah-Hartman드라이버 코어, USB, stable 관리2001~현재stable 관리자 (Linux Foundation)
Thomas Gleixner인터럽트, 타이머, PREEMPT_RT2003~현재x86 공동 메인테이너
Ingo Molnar스케줄러(CFS), perf, RT2001~현재tip 트리 관리자 (Red Hat)
Tejun Heocgroups v2, workqueue, sata/libata2005~현재cgroup/workqueue (Meta)
Dave AirlieDRM/GPU 서브시스템2004~현재DRM 메인테이너 (Red Hat)
Jakub Kicinski네트워크 드라이버, BPF2016~현재net 공동 메인테이너 (Meta)
Miguel OjedaRust for Linux2021~현재Rust 서브시스템 관리자
Alexei StarovoitoveBPF 확장 (프로그래머블 커널)2014~현재BPF 메인테이너 (Meta)
Jens Axboe블록 레이어, io_uring2001~현재block/io_uring (Oracle)
Ted Ts'oext2/3/4 파일시스템, e2fsprogs1991~현재ext4 메인테이너 (Google)
Chris MasonBtrfs 개발2007~현재Btrfs 원 저자 (Meta)
Christoph HellwigVFS, 블록 I/O, DMA API2000~현재다수 서브시스템 리뷰어

기업별 기여 비중 (2024년 기준)

현대 리눅스 커널 개발은 기업 후원에 크게 의존한다. Linux Foundation의 분석에 따르면 전체 커밋의 약 85%가 기업 소속 개발자에 의해 이루어진다.

기업기여 비중 (6.x)주요 관심 영역
Intel~12%x86, 드라이버, 보안, Wi-Fi
Red Hat~10%스케줄러, RHEL 커널, 가상화
Google~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%다양한 영역
자원봉사에서 기업 주도로: 리눅스 커널 개발은 1991년 Linus의 개인 프로젝트에서 시작하여 수천 명의 자원봉사 개발자가 참여하는 프로젝트로 성장했다. 2005년 이후 기업 기여가 급증하여 현재는 대부분의 커밋이 유급 개발자에 의해 이루어진다. 그러나 개인 기여자(취미, 학술)의 역할은 새로운 아이디어 제안과 소규모 서브시스템 유지에서 여전히 중요하다.

주요 기술 논쟁과 분기점

리눅스 커널 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는 자신의 공격적인 커뮤니케이션 스타일을 반성하며 복귀했다.

기술 선택의 교훈: 커널의 주요 기술 논쟁들은 대부분 "이론적 우수성 vs 실용적 효과"의 대립이었다. 모놀리식 설계, Git, CFS 모두 이론적 최적이 아닌 실용적 판단이 승리한 사례이다. 이것이 "Talk is cheap. Show me the code." (Linus Torvalds)라는 커널 커뮤니티 철학의 근간이다.

커널과 산업 생태계

리눅스 커널은 세계 IT 인프라의 근간이다. 서버, 클라우드, 모바일, 임베디드, 슈퍼컴퓨터까지 거의 모든 컴퓨팅 영역에서 지배적 위치를 차지한다.

시장 점유율 (2024~2025)

분야리눅스 점유율비고
슈퍼컴퓨터 (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 95.14 기반 + 백포트5.14.0-xxx2032년 (10년)
Ubuntu 24.04 LTS6.8 기반 + HWE6.8.0-xxx2029년 (5년)
Debian 12 (Bookworm)6.1 LTS 기반6.1.xxx2028년 (5년+)
Fedora 41최신 안정 커널6.11+~13개월
Arch Linux최신 릴리스 직후항상 최신롤링 릴리스
Android 15GKI 2.0 (6.6 LTS)6.6.xxx기기 수명
ChromeOSLTS + 백포트6.1/6.6기기 AUE 날짜
SLES 15 SP66.4 기반 + 백포트6.4.xxx2031년

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 파일로 관리

클라우드 커널 커스터마이징

주요 클라우드 공급자들은 자체 커널을 운영하여 가상화 성능과 보안을 최적화한다.

클라우드커널특징
AWSAmazon Linux Kernel (5.10/6.1 LTS)Nitro 하이퍼바이저 최적화, ENA 드라이버
Google CloudGKE 커널 (COS)Container-Optimized OS, eBPF 강화
AzureMicrosoft Linux KernelHyper-V 최적화, CBL-Mariner
Oracle CloudUEK (Unbreakable Enterprise Kernel)DTrace, Btrfs 강화
IBM CloudRHEL 커널 기반POWER/s390x 최적화
커널 생태계의 선순환: 클라우드 기업들이 자체 커널을 운영하면서 발견한 버그 수정과 성능 개선은 대부분 메인라인에 다시 기여된다. AWS의 Firecracker(KVM 기반 마이크로VM), Google의 gVisor(시스콜 필터링), Meta의 eBPF 생태계 등은 모두 메인라인 커널에 기반하며 개선사항을 업스트림한다. 이러한 선순환 구조가 리눅스 커널의 지속적인 발전을 보장한다.

실시간 리눅스와 자동차/산업 분야

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에서 실행
실시간 vs 처리량: PREEMPT_RT는 최악 지연시간을 보장하지만 전체 처리량(throughput)은 감소한다. 서버 워크로드에서는 기본 PREEMPT_DYNAMIC이 더 적합하며, 실시간이 필요한 특수 환경에서만 PREEMPT_RT를 사용해야 한다. 하이브리드 접근법으로 RT 코어와 처리량 코어를 분리하는 것이 일반적이다.

커널 참고 도서 (역사 이해에 도움)

도서저자연도내용
Just for FunLinus Torvalds2001리눅스 탄생 스토리 (자서전)
Rebel CodeGlyn Moody2001리눅스와 오픈소스 역사
Understanding the Linux KernelBovet, Cesati20052.6 커널 내부 구조 상세
Linux Kernel DevelopmentRobert Love2010커널 개발 입문서 (3rd ed.)
Linux Device DriversCorbet, Rubini, Kroah-Hartman2005드라이버 개발 바이블 (LDD3)
The Art of Linux Kernel DesignLixin Yang2014커널 설계 철학
BPF Performance ToolsBrendan Gregg2019eBPF 기반 성능 분석
Linux Observability with BPFCalavera, Fontana2019BPF 관측 가능성
Learning eBPFLiz Rice2023현대 eBPF 프로그래밍

커널 역사와 함께 이해하면 유용한 문서들입니다.