TECH 으로 돌아가기
TECH HACKER NEWS 오늘 6분 읽기 42 READS

러스트 컴파일러를 통째로 C 코드로 바꿔버렸어요 — crustc가 푸는 '닭과 달걀' 문제

러스트 컴파일러를 통째로 C 코드로 바꿔버렸어요 — crustc가 푸는 '닭과 달걀' 문제

Rust 컴파일러인 rustc 전체를 C 소스코드로 번역해버린 프로젝트, crustc가 공개됐어요. 처음 들으면 '아니 왜 그런 짓을?' 싶은데요, 사실 이건 프로그래밍 언어 세계의 아주 오래된 난제 하나를 정면으로 겨냥한 작업이에요. 바로 부트스트래핑 문제예요.

닭과 달걀 문제가 뭐냐면

Rust 컴파일러는 Rust로 작성되어 있어요. 이런 걸 셀프 호스팅이라고 부르는데요, 언어가 성숙했다는 자랑이기도 하지만 곤란한 문제를 하나 만들어요. Rust 컴파일러를 빌드하려면 이미 빌드된 Rust 컴파일러가 필요하다는 거예요. 닭이 먼저냐 달걀이 먼저냐 하는 상황이죠. 그래서 새로운 플랫폼에서 Rust를 쓰려면 누군가 만들어둔 공식 바이너리를 내려받아 시작하는 수밖에 없어요.

그런데 이게 왜 문제냐면, 그 바이너리를 '믿어야' 하거든요. 켄 톰슨(유닉스를 만든 그분)이 1984년에 'Trusting Trust'라는 유명한 강연에서 지적했듯이, 컴파일러 바이너리에 백도어가 심어져 있으면 소스코드를 아무리 들여다봐도 발견할 수 없어요. 백도어가 자기 자신을 다음 버전 컴파일러에 계속 복제해 넣을 수 있으니까요. 그래서 '검증 가능한 최소한의 도구에서 시작해 전체 도구 체인을 다시 쌓아 올리는' 부트스트래핑이 공급망 보안에서 중요한 주제가 된 거예요.

crustc가 하는 일

crustc를 만든 FractalFir는 원래 rustc_codegen_clr이라는 프로젝트로 알려진 개발자예요. Rust 코드를 .NET 런타임에서 돌아가게 컴파일하는 백엔드를 만들던 분인데, 이 프로젝트에 C 코드를 출력하는 백엔드를 추가했거든요. 여기서 잠깐, 백엔드가 뭐냐면요. rustc는 내부적으로 프론트엔드(문법 분석, 타입 검사)와 백엔드(실제 기계어 생성)가 분리된 구조라서, 기본으로 쓰는 LLVM 대신 다른 백엔드를 갈아 끼울 수 있어요. Cranelift 백엔드, GCC 백엔드 같은 것들이 이미 존재하고요.

crustc는 이 C 백엔드를 이용해서 rustc 자기 자신을 통째로 C 소스코드로 변환한 결과물이에요. 이게 의미하는 바가 커요. 이제 C 컴파일러만 있는 환경이라면, 이 C 코드를 컴파일해서 Rust 컴파일러를 얻을 수 있다는 거거든요. C 컴파일러는 사실상 모든 플랫폼에 존재하니까, LLVM이 지원하지 않는 특수 아키텍처나 오래된 시스템에도 Rust로 가는 길이 열리는 셈이에요. 물론 생성된 C 코드는 사람이 읽으라고 만든 게 아니에요. 기계가 뽑아낸, 오직 '컴파일된다'는 목적에 충실한 코드죠. 그래도 목적이 부트스트래핑이니 그걸로 충분한 거예요.

기존 시도들과 뭐가 다른가요?

이 문제를 풀려는 시도는 전에도 있었어요. 대표적인 게 mrustc인데요, C++로 처음부터 다시 작성한 별도의 Rust 컴파일러예요. 이걸로 특정 버전의 rustc를 빌드하고, 거기서부터 버전을 하나씩 올려가며 최신까지 도달하는 방식이죠. 다만 재구현이다 보니 Rust 언어의 진화를 계속 따라잡아야 하는 부담이 커요. GCC 진영에서는 gccrs라고 GCC 프론트엔드로 Rust를 재구현하는 프로젝트도 진행 중이고요.

crustc의 접근이 영리한 지점은 '재구현'이 아니라 '번역'이라는 거예요. 진짜 rustc를 기계적으로 C로 변환하는 방식이라, 언어 기능을 따로 구현할 필요 없이 항상 최신 rustc를 따라갈 수 있거든요. 재현 가능한 빌드(reproducible builds)나 부트스트랩 가능한 빌드를 추구하는 커뮤니티 입장에서는 반가운 도구가 하나 늘어난 거죠.

한국 개발자에게는요

Rust가 리눅스 커널, 안드로이드, 각종 인프라에 들어가면서 'Rust 도구 체인을 어디까지 신뢰할 수 있나'는 이제 학술적 질문이 아니라 실무적인 공급망 보안 질문이 됐어요. 이런 프로젝트가 그 신뢰의 사슬을 검증 가능하게 만들어주는 거고요. 그리고 조금 다른 관점에서, rustc_codegen_clr 계열 프로젝트는 컴파일러 백엔드가 실제로 어떻게 만들어지는지 배우기에 정말 좋은 자료예요. 컴파일러에 관심 있다면 코드를 따라 읽어보는 것만으로도 얻는 게 많을 거예요.

정리하면

crustc는 Rust 컴파일러 전체를 C로 번역해서, C 컴파일러만 있으면 어디서든 Rust를 부트스트랩할 수 있게 만든 프로젝트예요. 40년 전 켄 톰슨이 던진 '너의 컴파일러를 믿을 수 있는가'라는 질문에 대한 2026년의 답변 중 하나인 셈이죠. 여러분은 빌드 도구 체인의 신뢰 문제, 실무에서 고민해본 적 있으신가요? 공급망 보안 관점에서 어디까지 검증해야 한다고 생각하세요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/FractalFir/crustc
SHARE
처리 중...