Linus Torvalds는 AI를 사용하여 Linux 커널 코드의 가독성을 재구성하고 우연히 10년 이상 존재해 온 세 가지 취약점을 발견했습니다.

📅 2026-10-12

요약:

Linux 창립자인 Linus Torvalds는 커널 개발에 인공 지능 프로그래밍 도구를 적용하는 방법을 더욱 탐구하고 있습니다. 최근 Anthropic의 Claude Code의 도움으로 Linux 커널 성능 최적화 패치를 개발한 후 Torvalds는 LLM(대형 언어 모델)을 사용하여 오랫동안 이해하기 어려웠던 커널 코드 조각을 분석했습니다. 그는 이전에 개발자가 보고한 결함을 확인했을 뿐만 아니라 10년 이상 잠복해 있던 다른 취약점 3개도 발견했습니다. 이러한 문제는 모두 Linux 커널의 연관 배열 구현과 관련이 있습니다.

image.webp

10월 12일 Phoronix가 발표한 보고서에 따르면 Torvalds는 최근 Linux 커널 코드 저장소에 "assoc-array-fixes"라는 Git 태그를 추가하여 연관 배열 코드에 대한 일련의 복구를 구성하고 표시했습니다. 이 작업은 파일 읽기 성능을 최적화하기 위해 Claude Code를 사용하는 이전 프로젝트와는 별개이지만, 둘 다 복잡한 커널 개발 프로세스에 AI 도구를 도입하려는 그의 시도를 반영합니다.

이 작업의 원인은 개발자 Nils Ollrogge가 연관 배열 라이브러리의 버그를 보고하고 해당 수정 패치를 제출했기 때문입니다. 그러나 토발즈는 패치를 검토해 본 결과 해당 코드의 구현이 너무 모호해 구체적인 로직을 직접적으로 이해할 수 없어 패치가 문제를 올바르게 해결했는지 쉽게 판단할 수 없다는 점을 발견했다.

이러한 상황에 직면하여 Torvalds는 분석을 지원하기 위해 현대적인 대규모 언어 모델을 사용하기로 결정했습니다. 그는 Git 태그 설명에 이전에 옹호했던 접근 방식, 즉 복잡한 코드를 이해하는 데 도움이 되는 최신 LLM 도구를 사용했다고 썼습니다.

Torvalds는 AI 지원 수정을 통해 패치 세트를 구성하여 일부 크고 읽기 어려운 기능을 보다 명확한 구조로 분할하여 코드 로직을 더 쉽게 이해하고 검토할 수 있도록 했습니다. 이 작업의 목표는 단순히 AI가 전체 연관 배열 구현을 다시 작성하도록 하는 것이 아니라 먼저 기존 코드의 가독성을 향상시킨 다음 해당 동작이 예상대로 작동하는지 테스트를 통해 확인하는 것입니다.

수정이 완료된 후 관련 코드도 사용자 공간 테스트 프레임워크에 넣어 실행했습니다. 테스트를 통해 Olrog가 처음 보고한 버그가 실제로 존재함을 확인했을 뿐만 아니라 세 가지 추가 문제도 발견했습니다.

더욱 우려스러운 점은 이러한 결함이 최근에 발생한 새로운 문제가 아니라는 것입니다. Torvalds에 따르면 추가로 발견된 세 가지 취약점은 연관 배열 라이브러리가 Linux 커널에 처음 도입된 2013년으로 거슬러 올라갑니다. 즉, 관련 테스트를 통해 완전히 발견되지 않은 채 10년 넘게 코드에 숨어 있었습니다.

Linux 커널의 연관 배열은 키 값별로 데이터를 구성하고 검색하는 데 사용되는 데이터 구조입니다. 정수 첨자를 통해 요소에 접근하는 일반 배열과 달리 연관 배열은 특정 키를 기반으로 해당 데이터를 찾을 수 있으므로 유연한 인덱싱 및 개체 관리가 필요한 시나리오에 적합합니다.

Linux 커널의 연관 배열 구현은 커널 내의 데이터 관리 요구 사항을 충족합니다. 커널 코드는 엄격한 성능, 메모리 안전 및 동시 액세스 요구 사항에 따라 실행되어야 하기 때문에 이러한 기본 구성 요소의 구현은 일반 응용 프로그램의 유사한 코드보다 더 복잡한 경우가 많습니다. 함수가 표면적으로는 데이터 삽입, 삭제, 조회만 수행하더라도 트리 구조 조정, 노드 수명 주기 관리, 다양한 경계 조건이 포함될 수 있습니다.

이러한 유형의 코드에는 명확한 구조가 없기 때문에 유지관리자가 해당 동작을 이해하기가 더 어렵습니다. 개발자는 정상적인 상황에서 동작 로직을 확인해야 할 뿐만 아니라, 비정상적인 입력, 특수한 데이터 구조 상태, 여러 동작을 연속적으로 수행할 때 발생할 수 있는 문제 등을 분석해야 합니다.

코드가 계속 발전함에 따라 초기 구현에서 쉽게 발생하지 않는 결함이 오랫동안 남아 있을 수 있습니다. 특히 복잡한 데이터 구조에서 일부 오류는 특정 작업 순서나 특수한 구조 상태에서만 노출되며 일반 테스트에서는 모든 상황을 반드시 다룰 수는 없습니다.

이 AI 지원 작업에서 채택한 아이디어는 먼저 이해하기 어려운 큰 기능을 분석하기 쉬운 부분으로 분할한 다음 독립적인 테스트 프로그램을 통해 관련 로직을 검증하는 것입니다. 보다 명확한 코드 구조는 개발자가 다양한 작업 간의 관계를 식별하는 데 도움이 되며 테스트 도구가 특정 동작에 대한 확인 조건을 더 쉽게 구축할 수 있도록 해줍니다.

그러나 이번에 발견된 세 가지 취약점은 단순히 인간을 넘어서는 프로그램을 이해하는 AI의 능력에만 기인할 수는 없습니다. 보다 정확하게는 AI 지원 코드 리팩토링, 개발자 검토 및 테스트 프레임워크가 모두 함께 작동합니다. 대규모 언어 모델은 코드 논리를 구성하고 잠재적인 문제를 식별하는 데 도움이 될 수 있지만 궁극적으로는 실제 실행과 반복 가능한 테스트를 통해 결함이 실제인지 확인하는 것이 여전히 필요합니다.

이 사례의 특별한 점은 AI가 코드 분석에 참여할 뿐만 아니라 Torvalds가 패치 검토 과정에서 이해 장벽을 해결하는 데 도움을 주었다는 것입니다. 대규모 오픈소스 프로젝트를 유지하는 개발자에게는 이것이 실용적인 가치가 있는 작업 방법이 될 수 있습니다. 코드가 너무 복잡하여 유지관리자가 수리 계획이 올바른지 신속하게 판단하기 어려운 경우 AI를 사용하여 코드 구조를 정리하는 데 도움을 주고 테스트와 수동 검토를 통해 결론을 확인할 수 있습니다.

현재 연관 배열에 대한 이 수정 사항 세트는 아직 Linux 커널 메인라인에 병합되지 않았습니다. Phoronix 보고서에 따르면 다가오는 Linux 7.4 병합 기간 동안 관련 작업이 더욱 발전할 것으로 예상되지만 최종 병합 여부는 여전히 후속 코드 검토 및 테스트 결과에 달려 있습니다.

Torvalds가 최근 Linux 커널 개발에서 AI 사용을 공개적으로 시연한 것이 이번이 처음이 아니라는 점은 주목할 가치가 있습니다.

이전에 그는 Claude Code를 사용하여 또 다른 커널 최적화 작업을 수행했습니다. 목표는 여러 스레드가 동시에 동일한 파일을 읽을 때 메모리 페이지 참조 카운팅 작업으로 인해 발생하는 경쟁 문제를 해결하는 것이었습니다. 관련 패치는 파일 읽기 경로를 조정하여 불필요한 참조 카운팅 작업을 줄여 특정 작업 부하에서 읽기 성능을 향상시키려고 합니다.

이 작업에서 AI는 초기 코드 작성, 테스트 프로그램 개발, 코드 검토, 패치 노트 문서 초안 작성에 참여했습니다. Torvalds는 최적화 방향을 결정하고, 개발 프로세스를 감독하고, 자신의 컴퓨터에서 성능 측정을 수행하는 일을 담당합니다.

두 작업의 기술적 목표는 다르지만 유사한 개발 모델을 구현합니다. 커널에 익숙한 엔지니어가 문제를 파악한 다음 AI를 사용하여 복잡한 구현을 이해하고, 코드를 작성 또는 조정하고, 최종적으로 테스트를 통해 결과를 확인합니다.

이 모델은 Linux처럼 규모가 크고 유지 관리 주기가 긴 오픈소스 프로젝트에 특히 유용할 수 있습니다. 커널 코드는 수십 년에 걸쳐 계속 발전해 왔으며 광범위한 구현 기록과 복잡한 호환성 요구 사항을 포함하고 있습니다. 숙련된 유지관리자라도 각 하위 시스템의 모든 세부 사항을 항상 숙지할 수는 없습니다.

기존 코드 검토에서는 주로 개발자가 코드를 읽고, 논리를 분석하고, 테스트를 설계하는 방식에 의존했습니다. AI 도구는 유지관리자가 익숙하지 않은 코드를 더 빠르게 분류하고, 기능 간의 관계를 설명하고, 가능한 경계 조건을 제안하고, 테스트 사례 생성을 지원할 수 있는 기회를 제공합니다. 전문적인 검토를 대체하지는 않지만 복잡한 코드를 이해하는 데 드는 시간 비용을 줄일 수 있을 것으로 기대됩니다.

동시에 AI 생성 코드에도 한계가 있습니다. 대규모 언어 모델은 복잡한 제어 흐름을 오해하거나, 드문 경계 조건을 무시하거나, 합리적으로 보이지만 실제로 정확성을 보장하지 않는 수정을 제안할 수 있습니다. 운영 체제 커널의 경우 코드 오류가 시스템 안정성, 메모리 안전은 물론 전체 시스템의 안정적인 작동에 영향을 미칠 수 있으므로 이러한 문제는 특히 중요합니다.

따라서 AI가 커널 개발에 참여한다고 해서 검토 요구 사항이 완화될 수 있는 것은 아닙니다. 대신 코드 리팩토링, 자동화된 테스트, 패치 검토 및 실제 검증이 수정 품질을 보장하는 데 핵심입니다. 연관 배열 프로젝트는 AI 도구가 효과적이기 위해서는 엄격한 엔지니어링 검증 프로세스와 결합되어야 함을 보여주는 오랜 문제를 발견할 수 있었습니다.

Torvalds는 항상 AI 프로그래밍 도구에 대해 실용적인 태도를 취해왔습니다. 그는 개발 프로세스에 도움이 되는 AI의 가치를 인식했지만 개발자가 검토 없이 기계 생성 코드를 수용해야 한다고 주장하지는 않았습니다. 이번에 그는 LLM을 사용하여 코드를 분석한다고 공개적으로 밝혔으며, 이는 AI가 커널 개발 도구 상자의 보조 옵션이 되고 있음을 더욱 보여주었습니다.

더 광범위하게, 이 사건은 또한 대규모 소프트웨어 프로젝트를 유지하는 데 있어 오랫동안 지속되어 온 어려움을 조명합니다. 즉, 코드는 올바르게 실행되어야 할 뿐만 아니라 미래의 개발자가 이해할 수 있어야 합니다. 10년 이상, 심지어 수십 년 이상 유지관리된 기본 소프트웨어의 경우 가독성 자체가 신뢰성에 영향을 미치는 중요한 요소입니다.

이 수정은 복잡한 기능을 분할하여 코드 구조를 개선하고 테스트를 사용하여 이전에 놓친 문제를 발견함으로써 코드 가독성과 결함 문제 해결 사이의 긴밀한 연관성을 보여줍니다. 프로그램 논리가 더 명확해지면 개발자가 잠재적인 오류 경로를 식별하고 관련 동작을 다루는 테스트를 구축하기가 더 쉽습니다.

이 패치 세트가 결국 Linux 메인라인에 도입된다면 그 중요성은 확인된 네 가지 문제를 해결할 뿐만 아니라 후속 유지 관리를 위한 보다 명확한 코드 기반을 제공하게 될 것입니다.

AI 프로그래밍 도구가 계속 발전함에 따라 앞으로 대규모 오픈소스 프로젝트에서 유사한 사례가 더 많아질 수 있습니다. 그러나 리눅스 커널과 같은 핵심 기본 소프트웨어의 경우 AI 지원 개발이 장기적으로 인정받을 수 있는지 여부를 실제로 결정하는 것은 패치가 엄격한 검토를 통과할 수 있는지, 테스트가 문제를 재현할 수 있는지, 최종 코드가 충분히 신뢰할 수 있는지 여부입니다.

이번 AI는 최종 판단에서 리눅스 창시자를 대신한 것이 아니라, 원래 검토하기 어려웠던 코드를 이해하고, 수년간 숨겨져 있던 결함을 더욱 찾아내도록 도와주었습니다. 성숙한 소프트웨어 엔지니어링의 경우 이는 인공 지능의 가장 실용적인 적용 방향 중 하나일 수 있습니다.

관련 태그

관련 글

댓글

0/500
Captcha (click to refresh)
댓글 없음