TL;DR

  • Rust는 MC/DC 도구와 인증된 컴파일러·런타임 라이브러리를 갖추면 DO-178C DAL A 및 ISO 26262 ASIL D 프로젝트에 적용 가능한 안전성 솔루션이 됨.
  • AdaCore는 Rust Foundation과 함께 오픈소스 rustc에 유지보수 가능한 MC/DC 지원을 구현하고 있으며, 올해 말 공개를 목표로 함.
  • DO-178C는 DAL C에서 명령문 커버리지, DAL B에서 결정 커버리지, DAL A에서 MC/DC를 요구하며, ISO 26262는 이를 ASIL D에서 강력히 권고함.
  • Rust의 패턴 매칭과 가드에 MC/DC를 적용하는 해석은 검토된 연구를 바탕으로 정립되고 있으며, rustc 기반 커버리지 워크플로의 도구 자격 인증은 TQL-5 수준이면 됨.
  • GNAT Pro for Rust와 GNAT DAS는 오픈소스 도구를 넘어 자격 인증 증거, 장기 지원, 인증된 런타임 라이브러리 및 종합 분석 도구를 제공함.

MC/DC가 중요한 이유

  • 코드 커버리지는 테스트에서 실행한 소스 코드와 실행하지 않은 소스 코드를 기록하는 기능 안전 인증의 핵심 산출물임.
  • 코드 커버리지 수준은 다음과 같음.
  • 명령문 커버리지(statement coverage): 실행된 소스 코드 행을 측정함.
  • 결정 커버리지(decision coverage): 제어 구조의 모든 분기, 예를 들어 if 문의 참과 거짓 경로가 실행됐는지 측정함.
  • 조건 커버리지(condition coverage): 결정 내 모든 하위 조건이 참과 거짓으로 각각 평가됐는지 요구함.
  • 수정 조건/결정 커버리지(Modified Condition/Decision Coverage, MC/DC): 각 조건이 전체 결정 결과에 독립적으로 영향을 미친다는 점을 입증해야 하는 가장 엄격한 수준임.
  • DO-178C는 DAL C에 명령문 커버리지, DAL B에 결정 커버리지, 실패가 재앙적 결과를 초래할 수 있는 소프트웨어에 적용되는 DAL A에 MC/DC를 요구함.
  • 자동차 분야의 ISO 26262는 MC/DC를 의무화하지 않지만 ASIL D에서 강력히 권고함.
  • MC/DC 도구가 없으면 해당 언어는 항공 및 자동차 분야의 가장 핵심적인 소프트웨어에서 사실상 배제됨.

Rust의 MC/DC

  • 2024년 rustc에 실험적이고 부분적인 MC/DC 구현이 불안정 플래그 뒤에 추가됐지만, Rust 프로젝트는 유지보수성에 관한 타당한 우려로 2025년에 이를 제거함.
  • 제거 이후 생긴 MC/DC 적용 경로의 공백을 메우기 위해 AdaCore는 GNAT Pro for Rust 26.0에 제품 지원 버전을 제공함.
  • AdaCore는 Rust Foundation과 함께 기능을 제대로 재구현해 오픈소스 rustc의 표준적이고 유지보수 가능한 구성 요소로 포함하는 작업을 진행 중임.
  • 목표는 올해 말까지 오픈소스 Rust 프로젝트에서 MC/DC를 사용할 수 있게 하는 것이며, GNAT Pro for Rust와 GNAT DAS에는 인증 프로젝트가 요구하는 장기 지원과 자격 인증 증거를 갖춘 개선 기능이 포함될 예정임.

MC/DC와 Rust 패턴 매칭: 새로운 과제

  • DO-178C 규정에서 참조하는 기존 MC/DC 해석은 C와 Ada 같은 언어를 전제로 작성됐으며, Rust의 결정 지점 패턴 매칭에는 새로운 해석이 필요함.
  • 대안 패턴과 가드를 포함한 Rust match 표현식은 전통적인 조건 및 결정 개념에 명확하게 대응하지 않음.
  • 예를 들어 if let (A | B, C(X | Y)) = value 형태에서 어떤 대안이 독립 조건에 해당하며 그 효과를 어떻게 입증해야 하는지가 쟁점임.
  • AdaCore의 선행 작업과 동료 심사를 거친 논문 *Toward Modified Condition/Decision Coverage of Rust*는 이러한 구성에 대한 일관된 MC/DC 해석을 제시하며, 인증 기관과 검증 분석가가 Rust 코드의 커버리지 주장을 뒷받침할 근거를 제공함.
  • 같은 연구는 rustc 기반 커버리지 워크플로가 DO-330에 따른 가장 낮은 도구 자격 인증 수준인 TQL-5만 충족하면 됨을 보이며, 이에 따라 자격 인증 부담이 합리적인 범위에 머묾.
  • 따라서 DAL A에서 Rust를 사용하는 것이 가능함.

도구 신뢰와 자격 인증

  • 커버리지 결과의 신뢰도는 이를 산출한 도구의 신뢰도에 달려 있으며, DO-178C에 따라 커버리지 분석기 같은 검증 도구는 DO-330 기준으로 자격 인증을 받아야 함.
  • AdaCore는 GNAT Dynamic Analysis Suite (DAS)의 일부로 코드 커버리지를 제공하고 관련 도구 자격 인증 자료를 공급함.
  • 오픈소스 rustc에 MC/DC가 들어가더라도 AdaCore는 인증 증거, 고정된 도구 체계 기준선에 대한 장기적이고 지속적인 지원, 오픈소스 컴파일러를 기반으로 한 자격 인증 종합 분석 제품군, 기술을 구축하는 엔지니어의 고객 지원을 제공함.

전체 스택: 커버리지만이 아닌 컴파일러와 런타임

  • 인증 가능한 Rust 스택에는 커버리지 도구뿐 아니라 자격 인증된 컴파일러와 인증된 런타임 라이브러리도 필요함.
  • AdaCore의 GNAT Pro for Rust는 ISO 26262의 최고 수준인 ASIL D까지의 프로젝트에 사용하도록 자격 인증을 받았으며, 런타임 라이브러리인 libcore와 liballoc도 인증 범위에 포함됨.
  • DO-178C 자격 인증 및 인증은 진행 중이며 곧 제공될 예정이고, 일정은 AdaCore 담당자를 통해 확인할 수 있음.
  • 관용적인 Rust 코드는 libcore와 liballoc의 일부를 최소한 사용하므로 해당 구성 요소도 요구 수준에 맞게 인증돼야 함.
  • 모든 공급업체가 최고 수준의 인증을 제공하는 것은 아니며, 동적 메모리 할당이나 최고 보증 수준의 전체 코어 라이브러리가 필요한 프로젝트에서는 이 차이가 중요한 구별점임.
  • AdaCore는 규제 산업에서 Rust를 활용할 수 있도록 노력하는 Safety-Critical Rust Consortium에도 참여함.

AdaCore의 역량

  • AdaCore는 자동차, 항공기 및 기타 시스템을 구동하는 프로젝트에 도구 체계를 제공해 온 수십 년의 경험을 보유하며, 해당 프로젝트에는 DO-178C, ISO 26262 또는 유사 표준에 따른 기능 안전이 필수임.
  • 고신뢰성 소프트웨어에 집중하며 C, C++, Ada, SPARK, Rust 컴파일러를 지원하고, CodeSonar 정적 분석 도구로 C와 C++의 메모리 안전성 개선을 지원하며, 필요할 경우 인증된 언어 런타임을 포함한 자격 인증·인증 증거와 다양한 도구를 제공함.
  • Rust는 일부 메모리 안전성을 정적으로 강제하고 나머지는 런타임 검사로 보장하는 특성을 제공하며, AdaCore는 Rust, Ada, SPARK의 언어 설계를 자세히 비교한 자료도 공개함.
  • Rust는 안전 필수 소프트웨어 논의에서 자리를 확보했으며, AdaCore는 이를 뒷받침할 도구를 구축하고 지원 중임.

참여 방법

  • GNAT Pro for Rust와 GNAT DAS는 DO-178C, ISO 26262 및 기타 기능 안전 표준을 목표로 하는 항공우주·방위 프로젝트를 지원할 준비를 갖추는 중임.
  • 실제 프로젝트가 예정돼 있으며, Rust를 고신뢰성 기능 안전 프로젝트에 도입하는 일을 지원할 계획임.

자주 묻는 질문

  • 오픈소스 공개 전 기술을 미리 살펴보려는 경우 AdaCore 담당자에게 문의하거나 전문가 상담을 예약하고 메일링 리스트에 가입해 Rust 코드 커버리지 진행 상황을 확인할 수 있음.