GN⁺: 모든 C 코드를 Rust로 변환하는 기술 (TRACTOR)
(darpa.mil)-
C를 Rust로 번역하기 (TRACTOR)
- Dr. Dan Wallach
- 20년 넘게 C와 C++의 메모리 안전성 문제를 해결하려는 노력 끝에, 소프트웨어 엔지니어링 커뮤니티는 결론에 도달함
- 버그 찾기 도구에 의존하는 것만으로는 충분하지 않음
- 컴파일 시점에서 안전하지 않은 프로그램을 거부할 수 있는 "안전한" 프로그래밍 언어를 사용하는 것이 선호됨
- TRACTOR 프로그램은 기존 C 코드를 Rust로 자동 번역하는 것을 목표로 함
- 숙련된 Rust 개발자가 작성한 것과 동일한 품질과 스타일을 달성하여 C 프로그램에서 발생하는 메모리 안전성 보안 취약점을 제거하는 것이 목표임
- 이 프로그램은 정적 분석, 동적 분석, 대형 언어 모델과 같은 기계 학습 기술의 새로운 조합을 포함할 수 있음
- 추가 정보는 SAM.Gov의 TRACTOR Special Notice에서 확인 가능함
-
DARPA의 주요 성과
-
스텔스 혁명
- DARPA의 스텔스 기술 연구 초기, F-117A의 프로토타입인 Have Blue가 1977년에 처음으로 성공적으로 비행함
- F-117A 프로그램의 성공은 스텔스 혁명의 시작을 알렸으며, 이는 국가 안보에 엄청난 이익을 가져옴
-
손바닥 안의 내비게이션
- 초기 GPS 수신기는 크고 무거운 장치였음
- 1983년, DARPA는 이를 소형화하기 위해 노력하여 GPS 기능의 훨씬 더 넓은 채택을 이끌어냄
-
현대 인터넷의 길을 닦다
- ARPA 연구는 정보 혁명을 시작하는 데 중요한 역할을 함
- ARPANET의 개념적 기초를 개발하고, 디지털 프로토콜을 발명하여 인터넷의 탄생을 이끌었음
-
-
GN⁺의 정리
- TRACTOR 프로그램은 기존 C 코드를 Rust로 자동 번역하여 메모리 안전성 문제를 해결하려는 중요한 시도임
- DARPA의 연구는 스텔스 기술, GPS 소형화, 인터넷의 탄생 등 현대 기술 발전에 큰 기여를 함
- 이 기사는 소프트웨어 엔지니어와 기술 역사에 관심 있는 사람들에게 유익할 수 있음
- 유사한 기능을 가진 프로젝트로는 Microsoft의 Checked C와 Google's Carbon 언어가 있음
Hacker News 의견
-
숙련된 프로그래머가 작성한 Rust는 C와 매우 다르며, 대부분의 흥미로운 코드는 C++로 작성됨
- C 프로그램의 모든 할당 수명을 정적으로 결정하는 것은 매우 어려운 문제임
- C/C++ 프로그램은 사용자 클릭과 같은 이벤트에 할당 수명을 연결할 수 있음
- 분석하려는 프로그램이 버그가 있는 경우 수명이 의미가 없을 수 있음
- 기존 연구는 분석 대상 코드가 올바르다고 가정함
-
이 제안이 공개된 것이 흥미로움
- 자동 번역의 실현 가능성에 대해 기대를 조절하려고 노력함
- C 소스 코드에는 Rust 소스 코드보다 정보가 적음
- 누락된 정보를 생성하는 것은 불가능함
- 올바르게 추론하려면 판단이 필요하며, 이는 오류가 발생할 수 있음
- 프로젝트가 어느 정도 성공할 수 있지만 신중하게 접근해야 함
- 정부의 프로젝트가 C에 대한 전면적인 비난이나 Rust에 대한 전면적인 찬양으로 해석되지 않기를 바람
-
"Rust로 세계를 다시 작성하자"는 사고방식을 좋아하지 않음
- 프로젝트를 새로운 언어나 플랫폼으로 포팅하려면 기계적 번역은 좋지 않음
- 더 나은 아키텍처를 계획하고 소프트웨어 시스템을 설계하는 데 시간을 투자해야 함
- Rust를 사용하기로 결정했다면 Rust로 작성해야 함
- C를 현대적인 C로 업데이트하고 모델 체커를 사용하여 메모리, 리소스, 정수 수학 안전성을 검증하는 것이 더 나음
-
많은 사람들이 이 프로젝트를 C와 C++ 코드를 Rust로 번역하라는 요구로 읽고 있음
- C와 C++는 기본적으로 안전하지 않음
- 가능한 한 많은 코드를 안전한 언어로 번역하거나 작성해야 함
- 기존 C 코드를 Rust로 번역하는 소프트웨어를 지원하고 있음
- Rust로 세계를 다시 작성하자는 합의가 아니라 안전한 언어로의 마이그레이션을 목표로 함
-
번역된 코드베이스를 유지하는 데 문제가 있음
- C로 작성된 코드베이스와 이를 유지할 수 있는 C 엔지니어 팀이 필요함
- 자동 번역된 Rust 코드베이스는 원본보다 읽기 어렵고 이해하기 어려울 수 있음
- Rust 엔지니어 팀이 필요함
- Rust 엔지니어가 이미 있다면 수동으로 코드를 다시 작성하는 것이 더 나음
-
자동으로 포팅하는 프로그램이 C 코드를 안전하게 만들 수 있는 모든 기능을 포함해야 함
- Rust에는 메모리 버그가 없고 C를 자동으로 번역할 수 있다면 모든 메모리 버그를 자동으로 수정할 수 있음
- 이는 일반적으로 불가능함
-
Mozilla에서 해고된 유능한 엔지니어를 먼저 고용하여 언어 자체를 계속 작업하게 하는 것이 좋음
- 비동기 처리가 아직 완전히 완료되지 않음
- 여러 가지 문제점이 있음
-
DARPA가 이 문제를 추진하는 것이 좋음
- 안전한 Rust로 번역하는 것은 매우 어려움
- 현재 C에서 Rust로 번역하는 도구가 있지만 결과는 유지 관리가 어려움
- 올바르게 수행하려면 배열 크기와 비선형 포인터 사용 문제를 해결해야 함