리누스 토발즈, 분노를 담아 ‘리눅스 6.17 rc1’ 배포

리눅스커널 6.17 버전의 첫번째 릴리스후보(RC1)가 배포됐다. 리누스 토발즈는 새 버전 후보를 공개하면서 무언가 기분 상한 분위기를 풍겼다. 지난 몇달 간 리눅스커널 관리자 커뮤니티에서 벌어진 토발즈와 몇몇 개발자 사이의 갈등 때문인 것으로 보인다.

지난 15일 리누스 토발즈는 ‘리눅스 6.17 rc1’을 발표했다.

리누스 토발즈의 강력한 통제 하에 개발, 관리되는 리눅스커널 프로젝트는 수시로 주요 관리자와 기여자 사이의 갈등으로 마찰을 보여왔다. 대부분 유지관리자 간 갈등이거나 주요 의사결정 과정에서 벌어지는 기술적 토론이다. 그런데 최근 리누스 토발즈는 갈등의 한가운데서 주요 개발자 2명과 격하게 대립했다.

리눅스 차세대 COW 파일시스템 ‘Bcachefs’ 퇴출 위기

첫 사건은 6월로 거슬러올라간다. 리눅스커널 6.7에 새로운 파일시스템으로 추가된 Bcachefs의 유지관리자 켄트 오버스트리트가 리누스 토발즈와 대립했다.

Bcachefs는 ‘카피온라이트(COW)’ 파일시스템으로 ZFS, Btrfs와 경쟁한다. Bcachefs 작성자인 켄트 오버스트리트는 Btrfs의 디자인에 데이터 손실을 초래하는 심각한 결함이 있다고 비판해왔다. 켄트 오버스트리트는 Bcachefs를 ‘데이터를 먹어치우지 않는 파일시스템’이라고 홍보한다.

리눅스 6.16 rc 출시 과정에서 켄트 오버스트리트는 Bcachefs의 새로운 기능을 담은 코드에 대해 풀리퀘스트(PR)를 요청했다. 리누스 토발즈는 이에 커널 개발 프로세스를 위반했다며 불만을 표출했다.

리눅스커널 프로젝트는 리누스 토발즈를 최종 결정권자로 두고 커널의 주요 요소별로 유지관리자가 존재한다. RC는 커널 요소별로 개발완료된 코드를 하나로 병합하는 단계다. 커널 버전의 최종 릴리스에 앞서 리누스 토발즈가 ‘병합 창(merge window)’을 열면, 각 유지관리자가 그사이 자기 책임하에 개발완료한 코드를 제출한다. 토발즈는 병합 창에 등록된 프로젝트 코드를 검토하고 테스트 버전에 해당하는 릴리스후보를 내놓는다. 몇차례 RC를 거쳐서 최종 릴리스가 나오게 되는데, 그 사이 유지관리자가 제출하는 PR은 버그 수정으로 한정된다.

켄트 오버스트리트는 RC 과정에서 새로운 기능을 추가하겠다고 검증되지 않은 코드로 변경할 것을 주장한 것이다. 커널 개발 프로세스가 RC로 넘어간 상황에서 새로운 기능 추가가 인정되면, 검증을 다시 거쳐야 하기 때문에 리눅스 커널의 신규 버전 릴리스 일정이 연기될 수 있다. 리누스 토발즈는 새 버전 출시 일정 준수를 철칙처럼 여긴다. 당연히 새로운 커널의 안정성 확보는 기본 전제다.

켄트 오버스트리트는 이전에도 커널 커뮤니티에서 문제를 일으켜 제재를 받았던 전적이 있다. 그는 작년 11월 리눅스행동강령위원회로부터 커널6.13 버전에 기여하는 것을 금지당했다. 메일링리스트 토론 과정에서 타인을 공격했다는 이유였다.

오버스트리트의 새로운 PR 요청에 토발즈는 “병합 창의 요점이 무엇인지 잊어버린 것 같다”며 “여러분이 다른 버그를 발견했다고 해서 새로운 기능을 추가하지는 않는다”고 밝혔다.

오버스트리트는 물러서지 않고 변경을 계속 주장했다. 그러면서 리누스 토발즈에게 bcachefs 코드에 참견하지 말라고 했다.

토발즈는 오버스트리트의 PR 요청을 받아주지 않다가 결국 수용하면서 “나는 결국 이것을 받아들였지만, 우리는 6.17 병합창에서 헤어질 것이라 생각한다”고 적었다. 이어 “당신은 내가 버스 수정에 대해 아무런 의문도 제기할 수 없고, 그냥 모든 것을 삭제해야 한다고 했다”며 “솔직히 그 시점에 관여하기 불편했고, 그 토론에서 우리 둘 다 근본적으로 동의한 유일한 부분은 ‘이제 끝났다’는 것이었다”고 덧붙였다.

오버스트리트는 이에 “당신이 멍청한 짓을 하지 않을 때 나는 당신과 함께 일하기를 긍정적으로 즐긴다”며 “내가 원했던 건 당신이 좀 더 차분해지고 멈추는 것뿐이고, 토론을 위한 장소로 풀리퀘스트를 삼지 말라”고 받아쳤다.

이후 여러 개발자가 켄트 오버스트리트의 행동을 월권이라고 비난했다. 메인 커널 프로세스에서 bcachefs 개발에 대한 예외를 요구하고, 커널의 안정성을 위협한다는 의견이 제기됐다. 이에 오버스트리트는 일일이 댓글을 달며 자신의 주장을 굽히지 않았다.

오버스트리트가 제출한 새로운 기능은 ‘저널 리와인드(journal-rewind)’다. Bcachefs의 복구 기능을 개선하기 위한 기능이라고 오버스트리트는 주장했다. 토발즈의 프로세스 위반과 별개로 시어도어 초 리눅스커널 유지관리자는 파일시스템의 저널링의 민감한 부분에 영향을 미쳐 회귀 문제를 야기할 수 있다고 위험성을 지적했다. 그는 “병합 창 관련 규칙은 커널 커뮤니티에서 오랫동안 합의돼왔으며, 이를 시행하는 것은 리누스의 역할”이라고 강조했다.

리누스 토발즈는 리눅스커널 6.17 rc1을 내놓으면서 bcachefs를 언급조차 하지 않았다. 리눅스커널 6.17 rc1에 켄트 오버스트리트가 제출한 업데이트도 병합하지 않았다. 다만, 6.17에서 Bcachefs를 삭제하겠다던 발언을 실행에 옮기진 않았다. 6.18 버전에서 Bcachefs가 삭제될 가능성이 커보인다.

차기 리눅스커널에서 Bcachefs가 삭제되면 타 리눅스 배포판에 영향을 미치게 됐다. 캐노니컬은 우분투25.10(퀘스팅 쿼카)에 커널6.17을 사용할 계획이었다. 10월 출시될 우분투25.10은 현재 기능 동결 상태(더 이상 추가 변경 없음)로, bcachefs의 최신 안정화 코드를 담지못하게 됐다.

켄트 오버스트리트는 리눅스의 차세대 COW 파일시스템 도입을 주도하고 싶어하지만, 그의 발언과 행동은 커널 커뮤니티의 핵심 유지관리자들의 감정을 심각하게 상하게 만들었다. 켄트 오버스트리트는 지난달말 Bcachefs의 변경사항을 알렸는데, 이 글에 여러 개발자가 켄트 오버스트리트의 행동을 믿을 수 없다는 댓글을 달았다. 켄트 오버스트리트는 자신의 의견을 밝히면서 Btrfs를 다시 비난했고, 메타의 개발자인 조세프 바시크가 Btrfs를 옹호하며 켄트 오버스트리트와 논쟁을 벌였다. 시어도어 초를 비롯한 다수의 개발자가 논쟁에 참여했다. 켄트 오버스트리트에게 정신 질환이 의심된다거나, 심리 치료를 받아야 한다거나, 거짓말쟁이라는 등의 비난이 쏟아졌다.

유력 개발자 간 갈등 때문에 결과적으로 리눅스는 차세대 COW 파일시스템을 도입하지 못하게 될 것으로 예상된다. ZFS는 라이선스 문제로 리눅스커널에 활용되지 못하는 상황이고, Brtfs는 사용자 사이에서 심각한 버그로 데이터 손실 사례가 계속 보고되고 있다.

너무 늦게 제출된 RISC-V 패치에 쓰레기 비난

리누스 토발즈의 분노를 유발한 또 다른 사건은 최근 일이다. 지난 9일 토발즈는 RISC-V 패치를 제출한 팔머 다벨트에게 “이건 쓰레기고 너무 늦게 도착했다”며 “일찍 풀업해달라고 요청했는데, 그 규칙을 따를 수 없다면 최소한 PR을 좋은 것으로 만들어달라”고 비난했다.

커널 6.17 rc1 단계가 한창이던 지난 8일 팔머 다벨트는 뒤늦게 여러 패치를 제출했다. 병합 창 마감 하루 전이었다. 토발즈는 “이건 RISC-V 특유의 일반 헤더 파일용이 아닌 다양한 가비지를 추가한다”며 “이건 아무도 내게 보내선 안 될 자료인데, 병합 창 후반부에는 더더욱 그렇다”고 적었다.

토발즈는 다벨트의 뒤늦은 제출 외에 코드 자체의 품질에도 불만을 표출했다.

구체적으로 토발즈는 “이 말도 안되고 무의미한 make_u32-from-two-u16() ‘헬퍼’는 쓸모없는 쓰레기라서 세상을 살기 더 나쁜 곳으로 만듦고, 모든 사용자를 이해할 수 없게 만든다”며 “멍청한 헬퍼를 사용하지 않는 것보다 더 나쁜 쓰레기”라고 적었다.

제기된 코드의 문제는 2개의 부호없는 16비트 정수를 32비트로 변환하는 도우미 함수다. 이는 너무 복잡해서 호출하는 사람으로 하여금 내용을 파악할 수 없게 한다. 함수가 RISC-V 코드베이스 외부에 존재한다는 것도 문제다.

팔머 다벨트가 제출한 패치는 결국 병합에 포함되지 않았다. 다벨트는 “최근에 일을 소홀히 해서 늦게 처리되는 일이 많았는데, 그러다 보니 실수가 생겼다”며 “더 이상 늦지 않게 하겠고, 품질 문제가 해결되길 바란다”고 사과했다.

글. 바이라인네트워크
<김우용 기자>yong2@byline.network

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


The reCAPTCHA verification period has expired. Please reload the page.