Linux perfのサンプリングハードウェアプロファイルを使い、コンパイル済みバイナリを改善するAutoFDOのプロファイル誘導最適化ワークフロー向けツールチェーン。
pizlonator/fil-c
既存コードをほぼ変更せずにコンパイルでき、メモリエラーをpanicとして検出する、メモリ安全なC/C++実装です。
- スター
- 3,900
- フォーク
- 94
- 未解決の Issue
- 79
- 最終コミット
- 昨日
これは何?
Fil-Cはclang 20.1.8を基盤とし、C17とC++20をサポートする、メモリ安全なC/C++実装です。CまたはC++を対象とするソフトウェアの大半は、変更なし、または最小限の変更でコンパイルできます。範囲外アクセス、解放後使用、型の混同といったメモリ安全性違反は、メモリを気付かないうちに破壊する代わりに、Fil-Cのpanicとして検出されます。
Fil-Cは、並行ガベージコレクションと不可視のcapabilityを組み合わせています。各ポインタにはCのアドレス空間からは見えないcapabilityが対応し、アクセス可能なメモリとその操作方法を記録します。Cの基本操作はすべて、このcapabilityに照らしてチェックされます。AddressSanitizerのようなタグベースのツールとは異なり、バグを検出するだけでなく、悪用を防ぐことを目指した設計です。この言語には`unsafe`による回避手段がなく、安全でないコードとのリンクも制限されています。
Fil-CはLinux x86_64とARM64上でネイティブに動作します。プロジェクトにはmuslベースとglibcベースのビルドに加え、Linux、Darwin、Windows向けのAPEバイナリを生成するPeregrine版と、メモリ安全なLinuxユーザーランドであるPizlixが含まれます。OpenSSL、CPython、SQLiteなどのパッケージが動作すると報告されています。
主な機能
- 01C/C++コードの大半を、変更なしまたは最小限の変更でコンパイルできます。
- 02範囲外アクセス、解放後使用、型の混同をpanicとして検出します。
- 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.sh
使う前に知っておきたいこと
- ネイティブサポートはLinuxのX86_64またはARM64に限られます。その他のプラットフォームでは実験的なPeregrineビルドが必要で、ビルドにはLinux/x86_64ホストが必要です。
- このプロジェクトはパッチ適用済みのclang上に構築され、独自のランタイムを備えているため、ソースからビルドするには大規模なツールチェーンが必要です。
- 単一の標準ライセンスではなく、コンポーネント(LLVM、PAS、musl、cosmo、glibcなど)によって異なるため、使用前に各ライセンス条項を確認してください。
収録されている特集
トピック
よくある質問
- fil-c とは?
- 既存コードをほぼ変更せずにコンパイルでき、メモリエラーをpanicとして検出する、メモリ安全なC/C++実装です。 Fil-Cはclang 20.1.8を基盤とし、C17とC++20をサポートする、メモリ安全なC/C++実装です。CまたはC++を対象とするソフトウェアの大半は、変更なし、または最小限の変更でコンパイルできます。範囲外アクセス、解放後使用、型の混同といったメモリ安全性違反は、メモリを気付かないうちに破壊する代わりに、Fil-Cのpanicとして検出されます。
- fil-c は無料で使えますか?ライセンスは?
- fil-c は Other ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
- fil-c は今もメンテナンスされていますか?
- 活発にメンテナンス中。fil-c の最終コミットは 2026年11月5日 です。
- fil-c は何に使えますか?
- 既存のC/C++プログラムをメモリ安全性の悪用から保護する。 問題のある操作の時点で停止するランタイムを使って、C/C++コードのメモリエラーを見つける。 移植したCソフトウェアから、メモリ安全なLinuxユーザーランドを構築する。
- fil-c のインストール方法は?
- releasesページからバイナリ配布物をダウンロードします(例: filc-0.687-linux-x86_64.tar.xz) 展開した配布物のセットアップスクリプトを実行します: ./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ランタイムで実行できるコンパイラツールチェーン。