Repolode
pizlonator

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. 1

    releasesページからバイナリ配布物をダウンロードします(例: filc-0.687-linux-x86_64.tar.xz)

  2. 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 の数値は毎日更新されます。

関連プロジェクト

Linux perfのサンプリングハードウェアプロファイルを使い、コンパイル済みバイナリを改善するAutoFDOのプロファイル誘導最適化ワークフロー向けツールチェーン。

開発ツール#compiler#performance#profile-guided-optimization
623128C++Apache-2.0更新 先月