러스트(Rust)는 뛰어난 메모리 안전성으로 주목받지만, 기존 C/C++ 코드와의 상호 운용(FFI) 시에는 'unsafe' 경계를 넘어서면 C 코드의 안전성을 전적으로 신뢰해야 하는 한계가 있었습니다. 이러한 문제를 해결하기 위해, 러스트에서 C 코드를 런타임 메모리 안전성 아래에서 호출할 수 있는 새로운 FFI인 'extern "fil-c"'가 제안되었습니다. 이는 C/C++ 코드를 재컴파일하여 메모리 안전성 위반 시 패닉을 발생시키는 필-C(Fil-C) 컴파일러와 러스트를 안전하게 연결하려는 시도입니다.
제안된 'extern "fil-c"'의 초기 버전은 스칼라 값, 복사된 문자열 및 슬라이스, 불투명 핸들(opaque handles) 등 제한된 데이터 타입만 지원합니다. 이 방식은 전체 C 의존성 그래프를 필-C로 컴파일하여 일반 C로 돌아가는 경로를 차단함으로써, 러스트와 필-C 간의 안전한 데이터 교환을 보장합니다. 필-C는 C와 소스 호환되지만 ABI(Application Binary Interface)는 호환되지 않기 때문에, 단순히 기존 바인드젠(bindgen) 옵션으로는 구현할 수 없으며, 러스트와 필-C 양쪽에서 새로운 브리지(stub)를 생성하여 값 교환 시 안전성을 유지해야 합니다. 필닉스(filnix) 프로젝트는 이미 100개 이상의 닉스패키지(nixpkgs)를 필-C 플랫폼으로 이식하며 생태계 기반을 다지고 있으며, 지그(Zig) 언어에서도 필-C에서 영감을 받은 선택적 필 ABI를 제안하는 등 관련 논의가 활발합니다.
이러한 접근 방식은 러스트의 컴파일 시간 안전성과 필-C의 런타임 안전성을 결합하여, 기존 C 코드의 방대한 생태계를 안전하게 활용할 수 있는 길을 열어줍니다. 기존 C 코드는 런타임 검사와 가비지 컬렉션(GC) 비용을 감수하는 안전한 호환 경로가 되며, 성능 병목 구간을 러스트로 재작성할수록 런타임 검사 비용이 사라져 점진적인 마이그레이션(이전)을 유도합니다. 궁극적으로는 C 코드가 영구적인 고속 경로가 아닌 안전한 호환 경로로 남게 되며, 러스트는 컴파일 시간 안전성과 고성능을 담당하는 시스템 프로그래밍 언어로서의 입지를 더욱 강화할 수 있을 것으로 기대됩니다. 이는 단순히 메모리 안전성을 넘어, 수십 년간 축적된 소프트웨어 자산을 현대적인 안전성 표준에 맞춰 활용하려는 중요한 생태계적 협력 시도입니다.