Linux perf의 샘플링 하드웨어 프로파일을 사용해 컴파일된 바이너리를 개선하는 프로파일 기반 최적화 워크플로인 AutoFDO용 툴체인입니다.
pizlonator/fil-c
기존 코드를 거의 수정하지 않거나 전혀 수정하지 않고 컴파일하며, 메모리 오류를 패닉으로 처리하는 메모리 안전 C 및 C++ 구현입니다.
- 스타
- 3,902
- 포크
- 94
- 열린 이슈
- 79
- 마지막 커밋
- 21시간 전
어떤 프로젝트인가요?
Fil-C는 clang 20.1.8을 기반으로 만든 메모리 안전 C 및 C++ 구현으로, C17과 C++20을 지원합니다. C나 C++을 대상으로 하는 대부분의 소프트웨어는 코드를 전혀 또는 최소한으로 수정하고 컴파일할 수 있으며, 범위 초과 접근, 해제 후 사용, 타입 혼동 같은 메모리 안전성 위반은 메모리를 조용히 손상시키는 대신 Fil-C 패닉으로 처리됩니다.
Fil-C는 동시 가비지 컬렉션과 보이지 않는 capability를 결합해 사용합니다. 각 포인터에는 C 주소 공간에 드러나지 않는 대응 capability가 있으며, 이 capability는 포인터가 어떤 메모리에 어떤 방식으로 접근할 수 있는지 기록합니다. 모든 기본 C 연산은 이 capability에 비춰 검사됩니다. AddressSanitizer 같은 태그 기반 도구와 달리, 이 설계는 버그를 단순히 표시하는 데 그치지 않고 악용을 막는 것을 목표로 합니다. 이 언어에는 `unsafe` 우회 수단이 없으며, 안전하지 않은 코드와의 링크도 제한됩니다.
Fil-C는 Linux x86_64와 ARM64에서 네이티브로 실행됩니다. 프로젝트는 musl 기반 및 glibc 기반 빌드, Linux·Darwin·Windows용 x86_64 APE 바이너리를 생성하는 Peregrine 변형, 그리고 메모리 안전 Linux 사용자 공간인 Pizlix를 제공합니다. OpenSSL, CPython, SQLite 같은 패키지가 작동하는 것으로 보고되어 있습니다.
핵심 기능
- 01대부분의 C 및 C++ 코드를 전혀 또는 최소한으로 수정하고 컴파일합니다.
- 02범위 초과 접근, 해제 후 사용, 타입 혼동 오류를 패닉으로 처리합니다.
- 03태그 기반 감지 대신 capability 기반 검사를 사용합니다.
- 04스레드, 시그널, mmap, setjmp/longjmp, C++ 예외를 지원하는 POSIX 스타일 libc를 제공합니다.
- 05Linux x86_64 및 ARM64에서 실행되며, 여러 플랫폼을 지원하는 Peregrine 변형도 제공합니다.
활용 사례
- 기존 C 또는 C++ 프로그램을 메모리 안전성 악용으로부터 강화하기.
- 잘못된 연산에서 실행을 중단하는 런타임으로 C/C++ 코드의 메모리 오류를 찾기.
- 포팅된 C 소프트웨어를 바탕으로 메모리 안전 Linux 사용자 공간을 구축하기.
빠른 시작
- 1
releases 페이지에서 바이너리 배포판을 다운로드합니다(예: filc-0.687-linux-x86_64.tar.xz).
- 2
압축을 푼 배포판에서 setup 스크립트를 실행합니다.
./setup.sh
사용 전 알아둘 점
- 네이티브 지원은 Linux의 X86_64 또는 ARM64로 제한됩니다. 다른 플랫폼에서는 실험적인 Peregrine 빌드가 필요하며, 빌드하려면 Linux/x86_64 호스트가 필요합니다.
- 이 프로젝트는 패치된 clang을 기반으로 빌드되고 자체 런타임을 사용하므로, 소스에서 빌드하려면 상당한 규모의 툴체인이 필요합니다.
- 단일 표준 라이선스가 아니라 구성 요소(LLVM, PAS, musl, cosmo, glibc 등)에 따라 달라지므로 사용 전에 라이선스 조건을 확인하세요.
포함된 컬렉션
토픽
자주 묻는 질문
- fil-c은(는) 무엇인가요?
- 기존 코드를 거의 수정하지 않거나 전혀 수정하지 않고 컴파일하며, 메모리 오류를 패닉으로 처리하는 메모리 안전 C 및 C++ 구현입니다. Fil-C는 clang 20.1.8을 기반으로 만든 메모리 안전 C 및 C++ 구현으로, C17과 C++20을 지원합니다. C나 C++을 대상으로 하는 대부분의 소프트웨어는 코드를 전혀 또는 최소한으로 수정하고 컴파일할 수 있으며, 범위 초과 접근, 해제 후 사용, 타입 혼동 같은 메모리 안전성 위반은 메모리를 조용히 손상시키는 대신 Fil-C 패닉으로 처리됩니다.
- fil-c은(는) 무료로 사용할 수 있나요? 라이선스는 무엇인가요?
- fil-c은(는) Other 라이선스의 오픈소스입니다. 상업용 제품에 사용하기 전에 라이선스 조건을 확인하세요.
- fil-c은(는) 아직 유지보수되고 있나요?
- 활발히 유지보수 중. fil-c의 마지막 커밋은 2026년 11월 6일입니다.
- fil-c은(는) 어디에 사용할 수 있나요?
- 기존 C 또는 C++ 프로그램을 메모리 안전성 악용으로부터 강화하기. 잘못된 연산에서 실행을 중단하는 런타임으로 C/C++ 코드의 메모리 오류를 찾기. 포팅된 C 소프트웨어를 바탕으로 메모리 안전 Linux 사용자 공간을 구축하기.
- fil-c는 어떻게 설치하나요?
- releases 페이지에서 바이너리 배포판을 다운로드합니다(예: filc-0.687-linux-x86_64.tar.xz). 압축을 푼 배포판에서 setup 스크립트를 실행합니다.: ./setup.sh
- fil-c은(는) 어디서 받을 수 있나요?
- 소스 코드와 설치 방법은 GitHub에 있습니다: https://github.com/pizlonator/fil-c
요약은 프로젝트 README를 바탕으로 AI가 작성했습니다. GitHub 통계는 매일 갱신됩니다.
관련 프로젝트
Rust 프로그래밍 언어의 메인 소스 저장소로, 컴파일러와 표준 라이브러리, 문서를 포함합니다.
Swift 프로그래밍 언어와 컴파일러 툴체인으로, 메모리 안전성과 높은 성능을 제공하며 C 및 Objective-C를 원활하게 사용할 수 있습니다.
힙 할당기나 가비지 컬렉터 없이, 컴파일러가 관리하는 데이터 스택으로 메모리 안전성을 보장하는 실험적인 시스템 프로그래밍 언어입니다.
LLVM 코어, Clang C/C++ 프런트엔드, libc++ 및 LLD 링커를 포함하는 모듈형 컴파일러·툴체인 기술 모음입니다.
C와 C++ 코드를 WebAssembly로 컴파일해 브라우저, Node.js 및 기타 Wasm 런타임에서 실행할 수 있게 하는 컴파일러 툴체인입니다.