Rust 언어의 인기가 급증하고 있지만, 많은 중요한 코드베이스는 여전히 C로 작성되어 있으며, 이를 수작업으로 다시 작성하는 것은 현실적이지 않음. 따라서 C를 Rust로 자동 번역하는 것이 매력적인 대안으로 떠오름. 기존의 여러 연구들은 Rust의 다양한 기능(예: unsafe)을 사용하여 C의 점점 더 많은 부분을 처리하는 방향으로 나아가고 있음. 그러나 자동화의 전망이 매력적이지만, unsafe에 의존하는 코드를 생성하면 Rust가 제공하는 메모리 안전성 보장이 무효화되며, 따라서 기존 코드베이스를 메모리 안전한 언어로 포팅하는 주요 이점이 사라짐. 우리는 다른 경로를 탐색하여 C를 안전한 Rust로 번역하는 방법을 연구함. 즉, Rust의 타입 시스템을 준수하여 메모리 안전성을 쉽게 보장하는 코드를 생성하는 것임. 우리의 연구는 여러 독창적인 기여를 포함함: 우리는 이 방법론을 기존의 형식적으로 검증된 C 코드베이스에 적용함: HACL* 암호화 라이브러리, EverParse의 이진 파서 및 직렬화기. 지원하는 C의 부분 집합이 두 응용 프로그램을 안전한 Rust로 번역하기에 충분함을 보여줌. 평가 결과, Rust의 별칭 규율을 위반하는 몇몇 부분에 대해서는 자동화된 외과적 재작성으로 충분하며, 삽입된 몇몇 전략적 복사본이 성능에 미치는 영향은 미미함을 확인함. 특히, HACL*에 대한 접근 방식의 적용 결과, 모든 현대 알고리즘을 구현한 80,000 라인의 검증된 암호화 라이브러리가 순수 Rust로 작성됨. 이는 최초의 사례임.
C를 안전한 Rust로 컴파일하기