TECH 으로 돌아가기
TECH HACKER NEWS 오늘 8분 읽기 27 READS

Rust 코드를 사람이 읽을 수 있는 C로 바꾼다? Eurydice가 Rust의 안전성을 C 세계로 옮기는 방법

왜 하필 Rust를 C로?

요즘 '메모리 안전성' 이야기에는 Rust가 빠지지 않죠. 리눅스 커널에도 들어갔고, 여러 보안 기관이 C/C++ 대신 메모리 안전한 언어를 쓰라고 권고하고 있어요. 그런데 현실은 그렇게 간단하지 않아요. Rust 툴체인을 들일 수 없는 프로젝트가 아직 많거든요. 오래된 임베디드 보드라서 C 컴파일러밖에 없는 경우도 있고, 빌드 시스템에 Rust를 추가하는 걸 팀이 꺼리는 경우도 있어요. 안전 인증을 받은 C 컴파일러만 써야 하는 산업도 있고요.

Eurydice는 바로 이 틈을 겨냥한 도구예요. Rust 코드를 사람이 읽고 리뷰할 수 있는 C 코드로 바꿔주는 컴파일러예요. 여기서 핵심은 '읽을 수 있다(readable)'는 점이에요. 기계가 대충 뱉어낸 C가 아니라, 원래 Rust 코드의 구조와 이름이 살아 있는 C를 만드는 게 목표예요.

어떻게 동작하나요?

전체 과정은 세 단계로 나눠 보면 이해하기 쉬워요.

1. Charon으로 Rust 코드 꺼내기: rustc 컴파일러는 내부적으로 MIR이라는 중간 표현을 만들어요. MIR이 뭐냐면, Rust 코드에서 문법적인 꾸밈을 걷어내고 '실제로 무슨 일이 일어나는지'만 남긴 단순한 형태예요. Charon이라는 도구가 이걸 꺼내서 분석하기 좋은 형식으로 정리해줘요.
2. Eurydice가 변환하기: Rust에만 있는 개념들을 C로 옮길 수 있는 형태로 하나씩 풀어요.
3. KaRaMeL로 C 출력하기: 마지막 C 코드 생성은 KaRaMeL이라는 기존 도구를 재활용해요. KaRaMeL은 원래 F라는 검증 언어로 작성된 암호 라이브러리 HACL를 C로 뽑아내는 데 쓰였어요. 그렇게 만든 코드가 Firefox와 CPython의 해시 구현 등에 들어가 있죠. 검증된 코드를 읽기 좋은 C로 내보내는 일에서는 이미 실전 경험이 많은 도구예요.

변환하면서 Rust의 개념은 대략 이렇게 바뀌어요.

이들과 비교하면 Eurydice는 모든 Rust 코드를 지원하는 걸 포기했어요. 대신 Rust의 일부 기능만 지원하고, 그만큼 읽기 좋은 출력을 얻는 쪽을 골랐죠. 트레이트 객체(dyn Trait), 복잡한 클로저, 표준 라이브러리를 폭넓게 쓰는 코드는 변환이 어렵거나 손을 봐야 할 수 있어요.

한국 개발자에게 주는 시사점

임베디드, 자동차 전장, 국방처럼 C가 사실상 표준인 분야에서 일하신다면 눈여겨볼 만해요. 핵심 로직은 Rust로 안전하게 짜고 납품은 C로 하는 하이브리드 전략이 가능해지거든요. 국내 금융·공공 분야의 검증필 암호모듈(KCMVP)도 대부분 C 기반이라, 앞으로 PQC로 넘어가는 과정에서 이런 방식이 참고가 될 수 있어요.

주의할 점도 있어요. 생성된 C 코드를 사람이 직접 고치기 시작하면 Rust에서 얻은 안전성 보장은 그 순간 사라져요. 원본은 언제나 Rust로 두고, C는 빌드 결과물로만 다루는 원칙이 꼭 필요해요. 처음부터 실무에 도입하기보다는 해시, 파서, 압축처럼 작고 순수한 계산 모듈로 먼저 실험해보는 걸 추천해요.

마무리

한줄 정리: Eurydice는 Rust를 쓸 수 없는 곳에도 Rust의 안전성을 보내주는 다리예요. 증명은 Rust에서, 배포는 C로.

여러분 팀에서 Rust 도입을 망설이는 이유는 뭔가요? 툴체인이 문제라면 이런 Rust → C 방식이 답이 될 수 있을까요, 아니면 결국 Rust를 직접 도입하는 정공법이 낫다고 보시나요?


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://lwn.net/Articles/1055211/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...