러스트 오픈소스 모델 체커, Kani
러스트(Rust) 코드의 안전성과 기능적 정합성을 검증하기 위한 오픈소스 모델 체커 'Kani'가 공개되었습니다. Kani는 유한 범위 모델 검사(Bounded Model Checking)를 넘어 사용자가 직접 명세를 작성하지 않아도 잠재적인 런타임 패닉이나 unsafe 구문의 오류를 자동으로 찾아내고 검증합니다. 이 도구는 산업계 실제 프로젝트와 CI 환경에 적용되어 수많은 코드 변경 사항을 검증하며 그 유용성과 확장성을 입증했습니다.
제목: Kani: 러스트를 위한 모델 체커 저자: 레미 델마스 (Rémi Delmas), 지아드 하산 (Zyad Hassan), 후 친핑 (Qinheping Hu), 라훌 쿠마르 (Rahul Kumar), 펠리피 R. 몬테이로 (Felipe R. Monteiro), 탄 응우옌 (Thanh Nguyen), 아드리안 팔라시오스 (Adrián Palacios), 셀리나 발 (Celina Val), 마이클 타우트스니히 (Michael Tautschnig), 유스투스 아담 (Justus Adam), 다니엘 슈워츠-나르본느 (Daniel Schwartz-Narbonne), 캐롤린 제크 (Carolyn Zech)
요약: 러스트(Rust)의 소유권(ownership) 타입 시스템은 안전한 코드 내에서의 메모리 오류를 방지하지만, 여전히 컴파일과 무관하게 다루어야 하는 바람직한 속성들이 남아있습니다. 이는 unsafe 연산(예: 원시 포인터 역참조)의 건전성, 기능적 정합성(functional correctness), 그리고 런타임 패닉의 부재입니다.
우리는 단순히 버그를 찾는 것을 넘어 이러한 속성들에 대한 정합성을 보장하기 위해 유한 범위 모델 검사(bounded model checking)를 확장한 러스트 오픈소스 모델 체커인 'Kani'를 제안합니다. Kani는 러스트의 중간 수준 중간 표현(MIR)으로부터 증명 하네스(proof harnesses)를 컴파일하여 CBMC의 비트 정확도 검증 엔진으로 변환합니다. 이를 통해 사용자의 별도 주석(annotation) 없이도 포괄적인 안전 속성들을 자동으로 검사합니다.
또한, 제한된 범위(bounded)에서 무제한(unbounded)으로 검증을 확장하기 위해 Kani는 함수 계약(function contracts), 루프 계약(loop contracts), 정량자(quantifiers), 함수 스텁bing(function stubbing)으로 구성된 명세 언어를 제공합니다. 우리는 산업계 러스트 프로젝트에 대한 사례 연구를 통해 그 실행 가능성을 입증했습니다. 여기서 계약을 통해 패닉 자유 검증을 기능적 정합성 검증으로 업그레이드했으며, 이전에 알려지지 않았던 6개의 버그를 발견했습니다. Kani는 상용 CI 환경에서 대규모로 작동하며, 러스트 표준 라이브러리 검증 캠페인에서는 단일 코드 변경 시마다 16,000개 이상의 하네스를 검증합니다.
참고: 제39회 IEEE/ACM 국제 자동 소프트웨어 엔지니어링 컨퍼런스(ASE 2026), 산업 쇼케이스 트랙(Industry Showcase Track) 채택 주제: 소프트웨어 엔지니어링 (cs.SE); 컴퓨터 공학의 논리 (cs.LO); 프로그래밍 언어 (cs.PL) 인용: arXiv:2607.01504 [cs.SE]