리눅스커널 러스트 논쟁, 다시 불타오르다

2025-02-12

리눅스커널에 메모리 안전 언어인 ‘러스트’를 추가하는 시도가 또 다시 커널 유지 관라자의 저항에 부딪혔다. 이에 리눅스커널의 러스트 프로젝트가 심각하게 흔들리고 있다.

대략적 사태의 흐름은 이렇다. 한 리눅스커널 유지 관리자가 러스트로 작성된 장치 드라이버 패치의 승인을 거부하면서 러스트 코드를 넣지 말라고 밝혔다. 이후 해당 패치를 두고 논쟁이 벌어졌고, Arm 기반 애플 맥용 아사히리눅스 프로젝트 책임자인 헥터 마틴은 소셜미디어의 지지자를 활용해 러스트 회의론자들을 공격하자고 선동했다. 이에 리누스 토발즈가 나서 헥터 마틴에게 ‘브리게이딩’을 중단하라고 경고했다. 그리고 헥터 마틴은 리눅스커널 유지관리자를 그만뒀다.

사건의 발단과 진행

사태의 구체적 발단은 1월 8일 제출된 러스트 기반 장치 드라이버의 패치었다. 러스트로 작성된 장치 드라이버가 C 기반 커널의 다이렉트메모리액세스(DMA) API를 호출할 수 있게 하자는 제안이다.

이에 커널 유지관리자 중 한 명인 크리스토프 헬위그가 “kernel/DMA에 러스트 코드를 넣지 마라”고 답하고 패치를 거부했다. 사실 해당 패치는 C 기반 DMA API 코드베이스에 러스트 코드를 넣은 게 아니었다.

리눅스용 러스트 프로젝트의 미겔 오헤다는 헬위그에게 대안을 제안해달라고 요청했고, 헬위그는 “다른 사람의 삶을 고통스럽게 만드는 대신 당신의 코드에 래퍼를 유지하라”고 쏘아붙였다.

그리고 다닐로 크럼리히가 “당신의 코드가 무슨 뜻이냐”며 “모든 드라이버에 중복되나, 그렇지 않으면 rust/kernel/dma.rs가 적당해 보이지 않냐”고 헬위그에게 물었다.

다시 헬위그는 “DMA API 인터페이스는 이상한 바인딩이 아니라 쉽게 읽을 수 있는 C 코드로 유지 관리돼야 한다”고 답했다.

다닐로 크럼리히는 “러스트 드라이버는 C API의 일부 요구사항을 컴파일러가 특정 사항을 보장하는 방식으로 추상화한다”며 “결국 러스트 드라이버는 내부 모든 곳에서 C API를 사용하는 대신 각 드라이버에 해당 추상화 복사본을 포함하게 된다”고 설명했다.

이에 헬위그는 “당신의 반짝이는 언어를 다루도록 강요하지 말라”며 “다중 언어 프로젝트를 관리하는 것은 내게 전혀 흥미롭지 않은 골치 아픈 일”이라고 답했다. 이어 “C가 아닌 것을 사용하고 싶다면 어셈블리나 러스트든 C 인터페이스를 작성하고 임피던스 불일치 문제를 직접 처리하라”고 덧붙였다.

크럼리히는 “우리는 모든 러스트에 대한 C API를 추상화하는 단일 러스트 코드를 작성했고, 직접 유지 관리하는 담당자도 있다”고 답했다.

한동안 헬위그는 아무 반응을 하지 않다가 18일 뒤 더 강한 어조로 자신의 입장을 재확인했다. 급기야 러스트를 ‘암 세포’라고 표현했다.

헬위그는 “나는 또 다른 유지 관리자를 원하지 않는다”며 “만약 여러분이 교차 언어 코드베이스로 인해 리눅스를 유지 관리할 수 없도록 만들고 싶다면 드라이버에서 그렇게 하라”고 적었다. 또 “이 암이 핵심 하위 시스템으로 번지는 대신 드라이버에서 이를 처리해야 한다”며 “이 암은 명백히 교차 언어 코드베이스이고, 러스트 자체가 아니라 플레임웨어 브리게이드를 피하기 위해서다”라고 덧붙였다.

크럼리히는 러스트 드라이버의 DMA API 접근 추상화에 대한 기술적 취지를 다시 강조하면서 “커널에서 러스트에 관여하고 싶지 않다는 걸 받아들이며 DMA 일관성 할당자에 대한 러스트 추상화 계층을 별도의 구성요소로 유지관리 하겠다고 제한한 것”이라고 설명했다.

그는 “이 대화에서 기술적인 주장이나 우려는 없지만 커널과 교차 언어 프로젝트에서 러스트에 대한 반대 입장을 확인했다”며 “유지관리자가 특정 엔티티에 공개 커널 API 사용을 임의로 또는 개인적 선호로 제한하는 건 범위에서 벗어난 것이며, 그렉 크로아 하트만과 리누스 토발즈 당신들의 관할 범위인 것 같다”고 밝혔다.

그리고 헬위그가 또 답을 달았다. 헬위그는 “다른 언어가 추가적으로 들어오는 모든 비트는 통합 프로젝트로서 커널의 유지 관리성을 크게 떨어뜨린다”며 “리눅스가 오랫동안 살아남을 수 있었던 유일한 이유가 내부 경계가 없었기 때문이며 다른 언어를 추가하면 이를 완전히 깨뜨린다”고 밝혔다.

그는 “나는 이를 막기 위해 할 수 있는 모든 것을 할 것”이라며 “이는 내가 러스트를 싫어해서가 아니며, 내가 유지 관리해야 하는 거대한 C 코드베이스 근처에도 (러스트를) 원하지 않는다”고 덧붙였다.

그러자 아사히리눅스 프로젝트 책임자인 헥터 마틴이 리누스 토발즈의 개입을 요구했다. 헥터 마틴은 “리누스가 이 스레드에 권위있는 답변을 내놓지 않으면 러스트 측은 이 시리즈를 그냥 병합하고 크리스토프의 노골적인 방해 시도를 무시해야 한다”며 “리누스가 풀리퀘스트를 수락하지 않는다면 리눅스용 러스트 프로젝트는 리누스나 크리스토프가 움직일 때까지 사실상 죽은 것”이라고 밝혔다.

헥터 마틴은 한발 더 나아갔다. 그는 “러스트는 이런 드라마에 시간과 정신적 순환을 낭비하지 말라”며 “모든 것은 여러분이 포기할 때까지 여러분을 낙담시키려는 방해꾼 유지 관리자의 하위 집단이 조직한 방해 행위”라고 비난했다.

또 “그들은 조만간 역사에서 패배할 것이란 것을 알고 있기 때문”이라며 “오래 되고 굳건한 유지 관리자의 방해 행위가 아무리 많아도 세상이 메모리 안전 언어로 나아가는 것을 막을 수 없다”고 적었다. 마지막으로 “크리스토프의 암 발언은 행동 강령 조치를 받을 만하다”며 “그러나 그런 일이 일어날 가능성은 낮을 것”이라고 덧붙였다.

헥터 마틴의 글은 논쟁의 방향을 바꿨다. 헥터 마틴의 발언은 커뮤니티에서 폭언으로 받아들여졌고, 핵터 마인을 비판하는 목소리가 여럿 나왔다.

헥터 마틴은 다시 “리눅스용 러스트에서 이미 유명 인사들이 이탈했고, 특정 커널 유지 관리자의 공개적인 적대감으로 프로젝트가 중단됐다”며 “공기 중에 긴장감이 감돌고 사기도 저하되고 있다”고 답했다. 또 “크리스토프 헬위그는 어떤 종류의 실행 가능한 해결책도 도출할 생각이 없다”며 “그는 사보타주를 하고 있다”고 덧붙였다.

오히려 행동 강령 위반을 헥터 마틴이 하고 있다는 비판이 제기됐다. 헥터 마틴이 소셜미디어를 활용해 러스트 프로젝트를 방해하는 유지관리자를 비난해야 한다고 선동했다는 것이다.

길고 긴 스레드가 이어진 지 거의 한달 만에 리누스 토발즈가 드디어 나섰다. 토발즈는헥터 마틴의 행동에 점잖은 경고를 던졌다.

리누스 토발즈는 헥터 마틴에게 “문제가 바로 당신 자신에게 있다는 사실을 받아들이는 건 어떻냐”며 “당신은 더 잘 안다고 생각하지만 현재의 프로세스는 효과가 있다”고 적었다.

토발즈는 “문제는 있고, 문제는 삶의 사실이며, 완벽한 것은 없다”며 “하지만 나는 소셜 미디어의 맹공격이 해법이 아니라고 말할 것이고 귀하의 접근 방식과 관련한 어떤 것도 원하지 않는다”고 밝혔다.

그는 “커널 개발 모델에 문제가 있는 경우 소셜 미디어는 확실히 해결책이 아니”라며 “기술적 패치와 토론이 중요하지 소셜미디어 브리게이딩은 안 된다”고 덧붙였다.

러스트 드라이버의 DMA API 호출 제안이 기술적 문제인데, 헥터 마틴이 정치적 문제로 바꿔버려 해결을 더 어렵게 했다는 얘기다.

리누스 토발즈의 글 이후 커널 유지관리와 개발 모델에 대한 토론이 이어졌다. 그러다 헥터 마틴은 애플 Arm 호환 하드웨어를 지원하는 업스트림 리눅스 코드 유지관리자에서 해임해달라고 요청했다.

그는 “나는 더 이상 커널 개발 프로세스나 커뮤니티 관리 방식에 대한 믿음이 없다”며 “Apple/Arm 플랫폼 개발은 다운스트림에서 계속 될 것이고, 앞으로 내가 어떤 서브 트리에 대한 패치를 업스트림으로 직접 보내고 싶거나 그렇지 않은 경우 업스트림 싸움을 직접 하고 싶은 사람은 누구나 환영한다”고 적었다.

해설1: 고령화된 C 전문가의 신경질적인 러스트 배척

일단 리눅스용 러스트 측의 반응에 대해 살펴보자. 리눅스용 러스트에 대한 커널 커뮤니티 내부의 저항 문제는 작년부터 표면화됐다.

리눅스용 러스트 프로젝트 책임자 중 하나였던 마이크로소프트의 소프트웨어 엔지니어 웻슨 알메이다 필료가 작년 9월 사임을 발표한 것이다. 그는 “거의 4년이 지난 지금 한때 비기술적 넌센스에 대응할 때 가졌던 에너지와 열정이 부족하다는 걸 알게 됐다”며 “그래서 여전히 그것을 갖고 있는 사람들에게 맡기는 게 가장 좋겠다”고 적었다.

그는 리눅스용 러스트 팀에 감사를 표하면서, 러스트 언어의 메모리 안전성 이점을 C 기반 리눅스커널에 가져오는 것을 목표로 하는 프로젝트를 지지한다고 강조했다.

그는 “커널의 미래가 메모리 안전 언어에 있다고 진심으로 믿는다”며 “리눅스가 이를 내재화하지 않는다면, 다른 커널이 유닉스에 한일을 리눅스에 할까봐 두렵다”고 적었다.

그러면서 비기술적 넌센스란 표현의 의미를 설명하는 동영상 링크 하나를 덧붙였다. 해당 영상은 작년 5월 열린 ‘리눅스스토리지, 파일시스템, 메모리매니지먼트, BPF 서밋’ 중 한 강연 모습이다. 영상 속에서 웻슨 알메이다 필료는 오류 감소 방법으로 러스트 바인딩에서 파일시스템 인터페이스 의미론을 정적으로 인코딩하는 정보를 요청한다. 그러자 리눅스커널 유지관리자인 테어도어 조(Ted Ts’d)가 “C 코드는 계속 진화할 것이고, 러스트 바인딩을 손상시킬 수 있으며, 그런 일이 발생하면 이를 수정하는 책임을 지고 싶지 않다”며 “나는 러스트를 배우고 싶지 않다”고 짜증 섞인 목소리로 말한다.

필료는 사임 발표 글에서 “어느 누구도 러스트를 배우라고 강요하지 않고, 누구도 C 코드 리팩토링을 막으려고 하지 않는다”고 썼다. 테어도어 조의 발언에 대한 비아냥이다.

그는 더레지스터와 이메일 인터뷰에서 “프로젝트를 시작했을 때 기술적 측면에서 반발이 있을 것이라 예상했고 결국 합의에 도달할 것이란 가정 하에 그것을 극복할 의향이 있었다”며 “이 일을 시작한 지 거의 4년 됐는데 리눅스 커널 커뮤니티의 존경받는 멤버들의 짜증을 넘어설 것이라 예상했지만 이제 그들을 상대할 기력이 없다”고 설명했다.

현재 리눅스커널 프로젝트 관리자들은 C와 C++ 언어를 다뤄온 오랜 베테랑이다. 저명한 관리자 중 여러 명이 커널 관리만 하기에도 벅찬 상황에서 러스트 언어를 배울 시간이 없다며 러스트 코드의 병합을 반대해왔다. 대표적인 러스트 반대론자 드류 드볼트는 C 기반 커널에 러스트를 병합하려 시도하지 말고, 러스트만으로 새로운 커널 포크를 만들라고 제안하기도 했다.

리눅스커널이 처음 만들어졌을 때만 해도 C와 C++은 당연히 사용되는 프로그래밍 언어였다. 하지만 C와 C++로 작성된 코드는 메모리 안전 버그를 자주 일으켜 심각한 보안 취약점으로 작용한다.

2022년 마이크로소프트 애저 CTO였던 마크 루시노비치는 “새로운 프로그래밍 프로젝트는 C나 C++ 대신 러스트로 작성해야 한다”며 “보안과 신뢰성을 위해 업계에서 해당 언어를 더 이상 사용하지 않는다고 선언해야 한다”고 주장했다. 그리고 미국 연방정부는 메모리 안전 버그를 가진 C계열 언어를 사용하지 말고, 러스트 같은 메모리 안전 언어를 사용하라고 권고하기에 이른다. 러스트는 소유권 모델을 사용해 메모리 안전성을 강화하도록 설계됐다.

리눅스커널의 러스트 채택은 2020년부터 검토되기 시작해 2년만인 2022년 10월 리눅스커널 6.1 버전에서 처음으로 러스트 병합을 시작했다. C와 C++ 계열 개발자들도 자신들의 사용 언어에서 메모리 안전 버그 문제를 인정하고 해법을 마련하기 시작했다.

하지만 리눅스커널의 러스트 코드 채택은 끊임없는 내부 논쟁을 일으켰다. 러스트 회의론자들은 최근의 크리스토프 헬위그가 전면적인 러스트 거부 의사를 밝히며 내세운 근거인 ‘C 코드베이스에 러스트를 추가하면 복잡성을 증가시키고 유지 관리 부담을 늘린다’를 주된 이유로 들며 저항했다.

리눅스용러스트를 주도하는 미겔 오헤다와 그 지지자들은 11일 ‘러스트 커널 정책’을 발표하고 러스트 코드를 리눅스 커널의 C 코드베이스에 통합하는 노력의 현황을 밝혔다. 커널 유지관리자 일부의 저항을 인정하면서도 또 한편에 러스트를 지지하는 유지관리자도 있다고 강조했다.

당분간 리눅스커널에서 러스트가 핵심으로 진입하기 어려울 것으로 보인다. 커널 유지관리자가 기여자의 러스트 관련 제안을 거절하면, 최종 결정권자인 리누스 토발즈는 아예 러스트 관련 작업의 풀리퀘스트를 받지 못하게 된다. 헥터 마틴은 중간에 버티는 방해를 돌파하기 위해 중간 관리자를 건너뛰어 최상위의 리누스 토발즈에게 기여자가 직접 코드 풀리퀘스트를 제출하라고 주장한 것이다.

해설2: 암이 아니라고 싸워온 커널 관리자의 ‘암’ 발언

헥터 마틴의 ‘급발진’은 크리스토프 헬위그의 ‘암’이란 표현에서 비롯됐다.

리눅스 개발자들에게 ‘암’이란 단어는 이른바 ‘발작 버튼’이다. 2001년 스티브 발머 전 마이크로소프트 회장의 “리눅스는 암”이란 발언을 연상시키기 때문이다.

스티브 발머는 리눅스를 암으로 상용 소프트웨어를 정상 세포로 비유하고, 리눅스 같은 GPL 기반 소프트웨어가 소스코드를 무조건 공개하게 만들기 때문에 지적재산권 소프트웨어를 죽이게 될 것이라고 주장했다. 그리고 스티브 발머와 마이크로소프트는 리눅스 생태계를 무너뜨리려는 시도를 실행에 옮겼다. 리눅스를 향한 SCO그룹의 저작권 소송을 배후에서 지원한 것이다. SCO그룹은 리눅스가 자사의 유닉스 코드 80만 라인을 복사했다며 IBM과 레드햇에게 로열티 소송을 걸었다. 마이크로소프트는 SCO그룹과 유닉스 특허 및 유닉스 소스코드 사용계약을 체결했다.

이는 리눅스 커뮤니티가 마이크로소프트의 막강한 공세를 생존 위협으로 느끼기에 충분했다.

리눅스커널 유지관리자들은 1991년 이후 35년간 마이크로소프트 같은 외부 공격과, 커뮤니티 내부의 다양한 견해차 등 수많은 난관을 넘으며 헌신적으로 커널을 관리해왔다. 리눅스를 암이라 비난했던 마이크로소프트와 싸워 이겼던 그 유지관리자가 지금은 같은 커뮤니티의 구서원을 ‘암’이라 비유했으니 반발감을 일으킬 수밖에 없다.

리눅스커널 유지관리자도 나이를 먹었다. 리눅스 개발자의 고령화 문제 지적이 이미 10년전부터 제기돼왔다. 젊은 개발자가 C와 C++ 언어를 배우려 하지 않고, 리눅스커널 개발에 잘 참여하지 않는다는 지적이었다.

이런 상황은 러스트의 등장으로 반전됐다. 러스트를 중심으로 젊은 개발자의 리눅스커널 커뮤니티 진입이 가파르게 증가했다. 탄생 이래 다른 언어를 받아들이지 않았던 기존 커널 개발자들은 러스트를 배척 대상으로 봤다.

리눅스커널 유지관리 체계는 각 요소별로 책임자를 중간 관리자로 두고, 최정점에 리누스 토발즈를 둔다. 리누스 토발즈는 곳곳에서 제출된 풀리퀘스트를 검토하고 최종적으로 새로운 커널 버전을 빌드해 정해진 시점에 배포한다. 정점에 있는 리누스 토발즈는 보수적이기보다 새로운 시도에 호의적 태도를 보여온 반면, 여러 유지관리자는 자신에게 주어진 역할에 무한한 책임감을 드러내며 보수적인 입장을 견지했다.

크리스토프 헬위그의 ‘암’ 발언은 러스트에 대한 기존 커널 유지관리자들의 인식을 보여준다. 그리고 러스트 측의 반발은 기존 유지관리자의 보수성에 대한 누적된 불만을 보여준다.

일부는 현재 리눅스커널 유지관리자들이 더 나이를 먹고 은퇴하면 자연스럽게 러스트가 핵심으로 진출하게 될 것으로 전망하기도 한다. 리누스 토발즈는 “유지 관리자가 러스트를 이해할 필요 없이 하위시스템에 도입할 수 있다”며 “아무도 메모리 관리 하위시스템을 이해하지 못하지만 누구나 그것으로 작업한다”고 지적했다.

결국 러스트의 리눅스커널 병합은 매우 더디더라도 조금씩은 진행될 것으로 보인다. 러스트 개발자들이 리눅스커널 커뮤니티에서 완전히 지쳐 떨어져나가지 않는 한 말이다.

문제의 발단이었던 러스트 드라이버의 DMA API 호출 패치는 현재까지도 승인되지 않았다.

글. 바이라인네트워크

<김우용 기자>yong2@byline.network

Menu

Kollo 를 통해 내 지역 속보, 범죄 뉴스, 비즈니스 뉴스, 스포츠 업데이트 및 한국 헤드라인을 휴대폰으로 직접 확인할 수 있습니다.