LWN Weekly Report: 2026년 10월 29일 주요 뉴스

이번 주 LWN.net 위클리 에디션(10월 29일자) 주요 내용이다. CPython의 실험적 JIT는 PEP 836이 철회되면서 main 브랜치에서 빠지게 됐다. 리누스 토발즈는 x86에서 __get_user()와 __put_user()를 없앴다. 48개 패치를 만드는 데 LLM을 “코시넬(Coccinelle) 스크립트”처럼 썼다.

Kangrejos 2026에서는 두 가지를 논의했다. 커널 Rust 코드가 언제 panic해도 되는지, 그리고 앞으로 Rust 언어에 들어올 기능이다. 이 밖에 세 가지를 더 정리한다. LLM으로 작성한 브라우저 Northstar의 배포판 진입 시도, 7.4 머지 윈도우 전반부, 커널 스택 축소 논의다.

Python의 실험적 JIT 제거

CPython JIT는 2024년 3.13에 실험적 기능으로 들어왔다. 브랜트 부커(Brandt Bucher)가 표준 트랙(standards-track) PEP 없이 머지했고, 사후에 정보성(informational) PEP 744만 작성했다. 운영위원회(steering council)는 올해 6월 이 상태를 바로잡기로 했다.

시점사건
2026년 6월운영위원회가 표준 트랙 PEP를 요구. 6개월 안에 제출·승인되지 않으면 main에서 JIT 코드 제거
7월 3일Bucher, 사바나 오스트로스키(Savannah Ostrowski), 켄 진(Ken Jin)이 PEP 836 “JIT Go Brrr” 공개. “PEP 2개로 나눠야 한다”는 의견이 다수
9월 21일운영위원회가 10개 항목 보완 요구. 플랫폼 독립성, 사용자 영향, 보안 리뷰, 호환성 리뷰 시점(3.17 RC인 2028년 8월은 “너무 늦다”)
10월 19일작성자들이 “개인적 여력이 없다”며 PEP 철회. 참조 구현은 철회된 PEP에 링크로 남긴다

브렛 캐넌(Brett Cannon)은 JIT를 이끌던 사람이 모두 PEP 작성자나 기여자라서 대안 PEP가 나올 가능성은 낮다고 했다. JIT는 문제를 일찍 발견할 수 있도록 3.16 개발 주기 초반에 제거될 전망이다.

__get_user()와 __put_user()의 퇴장

__get_user()와 __put_user()는 주소를 검사하지 않고 사용자 공간에 접근하는 매크로다. 호출자가 먼저 access_ok()로 한 번 검사한다. 예전에는 검사 비용이 컸기 때문에 이 매크로가 빨랐다. 지금은 SMAP(supervisor-mode access prevention)을 접근마다 껐다 켜는 비용이 더 커서, 이 매크로도 검사하는 버전보다 빠르지 않다.

여러 필드를 읽을 때 지금 권장하는 방법은 6.18에서 들어온 scope guard다. 블록을 벗어나면 컴파일러가 SMAP을 다시 켠다. 그래서 오류 경로에서 사용자 공간 접근을 켜 둔 채 빠져나가는 버그가 생기지 않는다.

scoped_user_read_access(ptr, label) {
	unsafe_get_user(dest1, ptr->field1, label);
	/* ... */
	unsafe_get_user(destN, ptr->fieldN, label);
}
기존 사용 형태바꾼 방법
단순 단일 접근일반 get_user()/put_user()
여러 필드 연속 접근(시그널 코드 등)scoped_user_*_access() + unsafe_get_user()
폴트 처리가 필요해 커널 주소에 사용get_kernel_nofault()
폴트를 막아야 했던 곳폴트 비활성화로 교체
사용자·커널 주소 모두 가능한 포인터개별 패치로 분리

7.4부터 x86에는 두 매크로가 아예 없다. arm64에서는 원래 동작 차이가 없어서 당분간 남는다. x86용 out-of-tree 모듈은 수정해야 한다.

커널 Rust 코드의 panic 가이드라인

알렉상드르 쿠르보(Alexandre Courbot)는 Kangrejos에서 오류 처리의 “바람직함 사다리”를 제시했다. 실패할 수 없는 코드가 가장 좋고, 그다음이 컴파일 타임 검사, Result를 쓰는 런타임 검사 순이다. panic은 최후의 수단이다. 사다리를 올라간 예로 Nova 드라이버의 vGPU 상태 표현이 나왔다.

// 변경 전: enabled == true인데 total_vfs == 0인 상태를 런타임에 계속 검사
struct VgpuState {
    enabled: bool,
    total_vfs: u16,
}

// 변경 후: 잘못된 상태를 표현할 수 없음
enum VgpuState {
    Disabled,
    Enabled {
        total_vfs: NonZero<u16>,
    },
}
사례논의 결과
udelay()에 범위 밖 값값을 잘라서(clamp) 계속 진행. 미겔 오헤다(Miguel Ojeda)는 이를 “erroneous behavior”(버그지만 동작이 정의됨)로 분류
binder의 add_death()에 엉뚱한 리스트안전한 대체 동작이 없으므로 assert! 허용. “메인테이너가 죽기를 원하면 괜찮다”
CONFIG_RUST_BITMAP_HARDENED로 panic 여부 선택서브시스템별 Kconfig로 panic 정책을 정하는 것은 잘못. C 코드와 같아서 이번만 허용
const fn Hertz::from_ghz() 오버플로컴파일 타임이면 빌드 에러, 런타임이면 panic. wrapping/saturating도 괜찮다는 의견
Nova의 panic 지점 170곳140곳이 산술 오버플로/언더플로. 충분히 신경 쓰면 없앨 수 있다

도달 가능한 panic은 버그라는 점, 컴파일 타임 검사가 런타임 검사보다 낫다는 점만 합의됐다. 오헤다는 드라이버가 코어 코드보다 panic을 더 엄격하게 정당화해야 한다고 했다. 게리 궈(Gary Guo)는 “자기 완결적” 컴포넌트라면 잘못된 입력에 panic해도 된다고 봤다. 코딩 가이드라인은 아직 갱신되지 않았다.

앞으로 Rust에 들어올 기능

조시 트리플렛(Josh Triplett)은 커널 개발자들이 이미 기다리는 기능 말고, Rust 프로젝트가 현재 작업 중인 다른 기능을 소개했다.

기능내용상태
View type함수 시그니처에 접근하는 구조체 필드를 선언. 함수를 나눠도 필드 단위 빌림이 유지됨담당자 1명, 1년 안에 프로토타입 예상
Pattern typetype Errno = u32 is 0..4096;처럼 값 범위를 타입에 넣음. 일반 정수로 바꾸려면 명시적 검사 필요nightly에 있음, 표준 라이브러리 미통합
Linear / unforgettable type암묵적으로 drop하거나 mem::forget()할 수 없는 타입(예: 반드시 commit/abort해야 하는 트랜잭션)구상 단계
into() turbofishx.into::<T>()를 쓸 수 있게 표준 라이브러리 수정다음 에디션 목표
is 연산자while func().await is Some(x) && x.some_condition() { ... }처럼 왼쪽에서 오른쪽으로 읽히는 패턴 매칭실험 중, 에디션 변경 필요
Polonius제어 흐름을 반영하는 새 빌림 검사기. 루프 중간 return 같은 경우를 허용nightly에서 활성화, 성능 회귀 해결 중
comptimeZig처럼 컴파일 타임에만 실행되는 함수와 리플렉션 API. 이후 새 매크로 시스템의 기반프로토타입
보장된 꼬리 호출인터프리터, 재귀 알고리즘용작업 중

오헤다에 따르면 커널은 stable과 nightly 컴파일러 모두로 테스트되므로 Polonius에서도 동작한다. 다만 최소 지원 Rust 버전을 올리기 전에는 전체 커널에 무조건 켤 수 없다.

Northstar 브라우저를 배포판에 넣으려는 시도

Nordstjernen은 2026년 초에 등장한 브라우저 프로젝트다. 1.0 발표문은 엔진이 “Claude와 Codex가 쓴 C 코드 약 88,000줄”이라고 했다. 탭과 WebGL을 뺀 GPLv3 변형이 Northstar다. 개발자 안드레아스 뢰스달(Andreas Røsdal)은 Debian과 Arch Linux에 이 브라우저를 넣어 달라고 요청했다.

쟁점내용
감사 가능성“한 사람이 끝까지 감사할 수 있다”는 주장과 달리 저장소 누적 변경은 추가 262만·삭제 153만 줄. 사람이 리뷰하는지 묻자 답하지 않음
Debian stable 지원마크 하버(Marc Haber)는 stable에는 새 버전이 아니라 보안 수정만 백포트해야 하므로 최소 3년 지원 버전이 필요하다고 지적
라이선스·저작권“경쟁 사용”을 금지하는 비자유 라이선스와 GPLv3 이중 표기. LLM 생성 코드의 저작권 성립 여부
보안테드 쵸(Ted Ts’o)가 LLM으로 만든 15쪽 리포트에서 치명 8건·높음 8건. 사이트에 웹캠 권한을 조용히 주는 환경 변수 훅, 검증 없이 바이너리를 내려받아 실행하는 빌드 스크립트
no-AI 정책10월 22일 README에 “AI 생성 기여 금지”를 넣었지만, 그 뒤 커밋 70건 이상에 Claude Opus 5.5가 공동 저자로 기록됨

Debian에서 거절당하자 뢰스달은 쵸가 Google 소속이라 편향됐다며 Arch AUR로 옮겼다. Arch에서도 옐레 판 데르 바(Jelle van der Waa)가 장기 유지 능력과 보안 리뷰를 먼저 보여 달라며 패키징에 반대했다.

7.4 머지 윈도우 전반부

지금까지 메인라인에 머지 제외 체인지셋 6,753개가 들어왔다. linux-next에는 11,461개가 남아 있고, 머지 윈도우가 3주로 늘어날 가능성도 있다.

분야주요 변경
코어close_range()에 지정 범위 밖을 닫는 CLOSE_RANGE_EXCEPT, close-on-exec만 닫는 CLOSE_RANGE_CLOEXEC_ONLY. sysfs로 드라이버 bind/unbind 시 커널 taint
스케줄러sched_ext의 lazy preemption, proxy execution 훅
코어 덤프소켓 전송 시 연속된 0 구간 압축
파일시스템iomap의 lazy bounce buffering(하드웨어 체크섬 사용 시), Btrfs 백업 루트 슬롯 지정 옵션, 같은 백킹 파일을 여러 번 마운트한 EROFS의 슈퍼블록 공유, BFS 제거
아키텍처Arm supersection 매핑 제거, User-mode Linux로 NOMMU 구성 테스트 가능
네트워킹셀룰러망에서 bufferbloat가 적은 CUBIC 기반 TCP ROCCET
보안x86 W+X 매핑 탐지 수정, 네임스페이스용 LSM 훅과 Landlock의 capability·네임스페이스 제한, keyring의 커널 주소 유출 수정, AES 구현을 공통 crypto 라이브러리로 이동
가상화다른 게스트가 빼앗은 시간(steal time)을 반영하는 VM용 cpufreq governor
내부 API__{get,put}_user() 제거, pin_init 자기 참조 구조체, devm_kmalloc()용 kmalloc_obj*() 계열, 모든 컨텍스트에서 call_srcu()

크리스티안 브라우너(Christian Brauner)는 코어 덤프와 시그널 사이의 버그를 TLA+ 모델로 찾아 고쳤다. binfmt_misc는 이제 구분자로 구두점만 받는다.

더 작은 커널 스택을 찾아서

arm64와 x86에서 스레드마다 16KB의 커널 스택이 페이지 아웃 없이 잡혀 있다. 유휴 상태의 Android 기기도 스레드가 5,000개쯤이고, 데이터센터 전체로는 페타바이트 단위가 된다. 윌 디컨(Will Deacon)은 LPC 메모리 관리 마이크로컨퍼런스에서 이 16KB의 근거부터 되짚었다.

커널변경
3.7 (2012)arm64 머지, 스택 8KB
3.11 (2013)arm64 16KB. 근거는 커밋 메시지의 “SpecWeb 벤치마크 실패” 한 줄
3.16x86도 16KB. “arm64도 그렇게 했다”, 일부 GCC 버전의 큰 스택 프레임
4.5 (2016)arm64 per-CPU 인터럽트 스택
4.14가상 매핑 커널 스택. 32KB 정렬 필요

8KB 스택으로 빌드하면 테스트는 거의 통과하지만 메모리 압박 테스트가 실패한다. 크래시에는 거의 항상 direct reclaim이 끼어 있다. 4KB 스택은 부팅조차 안 된다.

접근제안자
전용 예외 스택윌 디컨
커맨드라인으로 스택 크기 지정(지금 12KB 가능)Mostafa Saleh
direct reclaim을 전용 워커 스레드로 이동(8KB 가능성)수렌 바그다사리안(Suren Baghdasaryan)
블록된 태스크의 스택 메모리 회수David Stevens
동적 스택 할당 재검토리누스 발레이(Linus Walleij)
실행 중 스레드를 새 스택으로 전환하는 범용 기능매슈 윌콕스(Matthew Wilcox), 페터 지일스트라(Peter Zijlstra)

slab 할당자로 스택을 잡자는 제안은 가드 페이지가 없다는 이유로 기각됐다. 결론은 없었지만 스택 전환 메커니즘이 곧 메일링 리스트에 올라올 가능성이 높다.

짧은 소식

  • KeePassXC 2.8.0 — Qt5에서 Qt6로 전환했다. 새 기능은 Wayland 자동 입력(Auto-Type), 단축키 설정, 외부 도구로 하는 원격 DB 동기화, Polkit 빠른 잠금 해제다. Windows ARM64 네이티브 빌드와 실험적 AArch64 AppImage도 처음 나왔다.
  • 커널 릴리스 현황 — 7.4 머지 윈도우는 11월 1일에 닫힐 예정이다. 10월 26일 7.2.13과 6.18.59가 나왔다. 리뷰 중인 안정 버전 8개는 10월 30일에 나올 예정이다. 7.3.1, 7.2.14, 6.18.60, 6.12.115, 6.6.161, 6.1.191, 5.15.224, 5.10.273이다. 보안 관련 수정이 여럿 있고 6.1.191은 특히 크다.
  • LPC sched_ext 마이크로컨퍼런스 — 주요 주제는 세 가지였다. 첫째는 우선순위 역전이다. 락 홀더 선점, 타임 슬라이스 연장, proxy execution과 BPF 스케줄러의 결합을 다뤘다. 둘째는 호스트와 게스트 스케줄러가 협력하는 반가상화 스케줄링이다. 셋째는 Intel HFI와 캐시 토폴로지를 쓰는 토폴로지 인지 스케줄링이다.
  • Fedora의 라즈베리파이 5 지원 — 피터 로빈슨(Peter Robinson)에 따르면 Fedora 45는 Model 5B 전 변형에서 동작한다. 가속 데스크톱, 스토리지, 네트워크, USB가 되고 사운드는 아직 안 된다. Compute Module 5와 Pi 500+는 작업 중이다. Fedora 44는 첫 부팅에 임시 우회가 필요하다.
  • Redox OS 링 버퍼 — Redox는 Rust로 작성한 마이크로커널 OS다. 지원금을 받아 진행한 io_uring 방식 링 버퍼 작업을 9월에 마쳤다. 결과물은 세 가지다. 시스템 서비스와 드라이버용 링 버퍼, 애플리케이션용 liburing 유사 API, 드라이버용 async 실행기다.
  • systemd의 Rust 지원 — 크리스티안 브라우너가 systemd 리프(leaf) 컴포넌트를 Rust로 작성할 수 있게 머지했다. 기존 코드는 옮기지 않고, 다른 컴포넌트가 의존하는 부분에는 쓰지 않는다. 코어까지 넓히려면 Rust의 동적 라이브러리 지원 문제가 먼저 풀려야 한다. 12월 예정인 v263에 들어갈 전망이다.
  • 이번 주 인용문 — 벤 피니(Ben Finney)는 Debian NEW 큐에 LLM 리뷰를 넣자는 논의에서 이렇게 말했다. “사람은 동료라서 관용을 베풀어야 하지만, 기계에는 그럴 의무가 없다.” 제이미 샤프(Jamey Sharp)는 Rust 300줄로 첫 Wayland 클라이언트를 작성했다. 그는 Wayland가 “쉬운 일을 쉽게”보다 “어려운 일을 가능하게”를 골랐고, 그 선택이 옳다고 평가했다.

이번 주 핵심 요약

  • CPython JIT에 기대던 코드가 있다면 3.16부터 빌드 옵션 자체가 사라진다고 보고 계획한다. 성능이 필요하면 free-threaded 빌드, PyPy, 네이티브 확장을 비교할 것. 이번 사례는 기능보다 절차(표준 트랙 PEP)가 먼저라는 Python 거버넌스의 원칙을 보여준다.
  • x86용 out-of-tree 모듈에서 __get_user()/__put_user()를 쓴다면 7.4 전에 고친다. 여러 필드를 읽는 코드는 scoped_user_read_access()로 옮기는 것이 기본이다. 토발즈의 사례처럼 이런 기계적 API 전환은 LLM이 가장 잘 쓰이는 영역이 되고 있다.
  • 커널 Rust 코드를 리뷰한다면 panic을 줄이는 첫 대상은 산술 오버플로다. Nova의 사례처럼 enum과 NonZero로 잘못된 상태를 타입에서 없애는 것이 가장 효과적이다.
  • Northstar 논란은 배포판이 새 패키지에 요구하는 조건을 분명히 보여준다. 장기 보안 백포트, 사람의 코드 리뷰, 유지보수 커뮤니티가 필요하다. LLM으로 코드를 빠르게 쓸 수 있어도 이 조건은 그대로다.
  • 임베디드나 메모리가 작은 시스템이라면 커널 스택 크기를 커맨드라인으로 정하는 Saleh의 패치를 지켜볼 것. 12KB만 돼도 스레드가 많은 시스템에서는 메모리 절감 효과가 크다. 단, direct reclaim 경로가 스택을 가장 많이 쓴다는 점을 먼저 테스트한다.

원문: LWN.net Weekly Edition for October 29, 2026

답글 남기기