Fil-C: C 프로그램의 메모리 안전성 달성

Fil-C: C 프로그램의 메모리 안전성 달성

Fil-C는 일반적인 메모리 관련 취약점을 제거하도록 설계된 C 프로그래밍 언어의 메모리 안전한 구현입니다. 컴파일 타임에 정적 분석을 통해 안전성을 강제하는 언어와 달리, Fil-C는 실행 중에 메모리 접근이 검증되도록 하여 충돌과 보안 익스플로잇을 방지하는 데 중점을 둡니다.

Runtime Memory Safety Enforcement

Fil-C는 컴파일 타임이 아닌 실행 시간에 동적으로 메모리 안전을 강제합니다. 이는 메모리 버그가 있는 프로그램이 여전히 성공적으로 컴파일될 수 있지만, 시스템은 잘못된 메모리 접근이 시도되는 순간 이를 감지하고 오류를 발생시킨다는 의미입니다.

이 architectural choice는 컴파일 단계에서 대량의 메모리 안전성 버그를 거부하는 빌림 검사기를 사용하는 Rust와 같은 언어와 Fil-C를 구분합니다. Rust는 일부 런타임 검사(예: 경계 검사 및 RefCell 검증)를 수행하지만, Fil-C의 안전성을 위한 주요 메커니즘은 메모리 작업의 런타임 검증입니다.

System Calls and the Fil-C Standard Library

Fil-C는 시스템 호출을 관리하기 위해 사용자 정의 libc 구현을 사용합니다. 프로젝트는 이 사용자 정의 라이브러리를 통해 중재되므로 시스템 호출이 안전하다고 주장합니다. 그러나 비판자들은 이 사용자 정의 libc가 결국 시스템의 기본 libc를 호출하여 실제 시스템 호출이 실행된다고 지적합니다.

이로 인해 Rust의 시스템 호출 접근 방식과 비교가 이루어졌습니다. Rust에서 원시 시스템 호출을 만드는 것은 unsafe로 간주되지만, Rust 표준 라이브러리를 사용하면 Fil-C 프로그램이 Fil-C 표준 라이브러리를 사용하여 안전 경계를 유지하는 방식과 유사한 안전 추상화 계층을 제공합니다.

Technical Extensions and Ecosystem

Fil-C는 기본 메모리 안전성을 넘어 특수 시스템 수준 기능을 포함하도록 기능을 확장했습니다:

  • 인라인 어셈블리 소독: Fil-C는 인라인 어셈블리를 위한 소독제를 포함하며, 일부 개발자는 독립형 도구로서 유용할 수 있다고 믿습니다.
  • 최적화된 호출 규칙: 프로젝트는 성능을 향상시키기 위해 최적화된 호출 규칙을 도입했습니다.
  • 메모리 안전한 컨텍스트 스위칭: Fil-C는 동시 환경에서 안전한 컨텍스트 스위칭을 위한 메커니즘을 제공합니다.
  • 라이브러리 포팅: freetype, fontconfig, harfbuzz, graphite 등을 포함한 여러 기초 라이브러리가 이미 Fil-C로 포팅되었습니다.

Comparison with Other Safety Models

Fil-C는 C의 맥락에서 메모리 안전성을 위한 도구로 자주 프레이밍되지만, Rust와의 직접적인 경쟁자보다는 보완적인 도구로 볼 수 있습니다. 런타임 안전 레이어를 제공하기 때문에, 정적 안전 보장이 불가능한 기존 C 기반 인프라에서 다른 언어를 컴파일하거나 통합하는 데 잠재적으로 사용될 수 있습니다.

일부 관찰자들은 Fil-C의 접근 방식을 Apple의 메모리 무결성 강화와 같은 하드웨어 기반 솔루션과 비교했으며, Fil-C의 소프트웨어 기반 접근 방식은 특정 하드웨어 요구 사항에 의존하지 않고 안전 보장을 제공한다고 지적했습니다.

Sources