Zurück zu den Updates
New releaseSep 17, 2026

fil-c v0.685

Fil-C: vollständig kompatible Speichersicherheit für C und C++

Teilen

Fil-C 0.684

Fil-C ist eine fanatisch kompatible speichersichere Implementierung von C und C++. Viele Softwarepakete lassen sich mit Fil-C ohne oder mit nur minimalen Änderungen kompilieren und ausführen. Alle Speichersicherheitsfehler werden als Fil-C-Panics abgefangen. Fil-C erreicht dies durch eine Kombination aus nebenläufiger Garbage Collection und unsichtbaren Capabilities (jeder Zeiger im Speicher hat eine entsprechende Capability, die für den C-Adressraum nicht sichtbar ist). Jede grundlegende C-Operation (wie in LLVM IR zu sehen) wird gegen die Capability geprüft. Fil-C hat keine unsafe-Anweisung und nur eingeschränkte FFI zu unsicherem Code.

Fil-C ist besonders, weil:

  • Fil-C erreicht vollständige Sicherheit ohne Notausgänge. Es gibt kein unsafe-Schlüsselwort in Fil-C, mit dem Schutzmechanismen deaktiviert werden könnten. Das Verlinken mit unsicherem Code ist stark eingeschränkt.

  • Der capability-basierte Ansatz von Fil-C erreicht ein ähnliches Sicherheitsniveau wie Hardware-Capabilities wie CHERI, mit dem Unterschied, dass er auf Standardhardware (X86_64 oder ARM64) läuft.

  • Fil-C ist darauf ausgelegt, zu verhindern, dass Speichersicherheitsfehler zur Ausnutzung verwendet werden, anstatt sie nur häufig genug zu melden, um Fehler zu finden. Dadurch unterscheidet sich Fil-C von AddressSanitizer, HWAsan oder MTE, die alle von Angreifern umgangen werden können. Der entscheidende Unterschied, der dies möglich macht, ist, dass Fil-C capability-basiert ist (jeder Zeiger weiß also, auf welchen Speicherbereich er zugreifen darf und wie er darauf zugreifen darf) und nicht tag-basiert (wobei Zeigerzugriffe erlaubt sind, wenn sie auf gültigen Speicher treffen).

  • Aus Sicht der Sprachbenutzer ist Fil-C einfach C und C++ mit GCC/clang-Erweiterungen. Es ist wahrscheinlicher als nicht, dass Ihr bevorzugtes C- oder C++-Programm oder Ihre Bibliothek in Fil-C ohne Änderungen kompiliert. Der Fil-C-Compiler basiert auf clang 20.1.8 und unterstützt daher C17 und C++20.

Lizenz

Der Compiler (clang + LLVM) ist durch LLVM-LICENSE.txt abgedeckt. Die Laufzeitumgebung ist durch PAS-LICENSE.txt abgedeckt (siehe libpas/LICENSE.txt in der Quellcode-Distribution). Im Fall der klassischen musl-basierten Fil-C-Distribution ist die musl libc durch MUSL-LICENSE.txt abgedeckt (siehe projects/yolomusl/COPYRIGHT und projects/usermusl/COPYRIGHT in der Quellcode-Distribution). Im Fall der /opt/fil-Distribution ist glibc durch glibc-LICENSE.txt abgedeckt, und alle anderen enthaltenen Programme sind durch die jeweiligen -LICENSE.txt-Dateien abgedeckt. Die C++-Bibliotheken (libc++/libc++abi) sind durch LLVM-LICENSE.txt abgedeckt.

Sie können den Quellcode für den Compiler, die Laufzeitumgebung, libc++/libc++abi, libc (musl und glibc) und alle enthaltenen Programme von github beziehen. Die Quellcode-Distribution enthält außerdem viele zusätzliche Programme, die auf Fil-C portiert wurden, in den Verzeichnissen projects/ und pizlix/, und diese haben verschiedene Lizenzen. Die /opt/fil-Distribution enthält Builds einer Vielzahl zusätzlicher Programme, und deren Lizenzen befinden sich in additional-licenses/ in dieser Distribution.

Anforderungen

Fil-C funktioniert nur auf Linux/X86_64 oder Linux/ARM64.

Frühere Versionen funktionierten auf Darwin/ARM64 und FreeBSD, aber jetzt konzentriere ich mich nur auf Linux, weil es mir ermöglicht, libc getreuer zu implementieren. Es gibt nichts grundsätzlich daran, was Fil-C daran hindert, auf anderen Architekturen oder Betriebssystemen als Linux zu funktionieren.

Erste Schritte

Wenn Sie Fil-C-Binärdateien heruntergeladen haben, führen Sie aus:

./setup.sh

Dies hat je nach gewählter Binär-Distribution unterschiedliche Auswirkungen:

  • Im Fall der klassischen musl-basierten Distribution (filc-0.684-linux-x86_64.tar.xz oder filc-0.684-linux-aarch64.tar.xz) richtet dies Fil-C so ein, dass es im aktuellen Verzeichnis ausgeführt wird.

  • Im Fall der /opt/fil glibc-basierten Distribution (optfil-0.684-linux-x86_64.tar.xz) richtet dies Fil-C in /opt/fil ein.

Wenn Sie den Fil-C-Quellcode heruntergeladen haben, führen Sie aus:

./build_all_fast.sh

Danach können Sie Fil-C aus diesem Verzeichnis heraus verwenden.

Die Binär-Distribution von Fil-C enthält musl als libc. Die Verwendung von ./build_all_fast.sh in der Quellcode-Distribution baut Fil-C ebenfalls mit musl. Wenn Sie den Quellcode verwenden, können Sie außerdem:

  • ./build_all_fast_glibc.sh - baut ein ähnliches Setup, aber mit glibc 2.40 als libc.

  • ./build_all.sh - vollständiger musl-basierter Build (baut auch viele Softwarepakete, die auf Fil-C portiert wurden).

  • ./build_all_glibc.sh - vollständiger glibc-basierter Build (baut noch mehr Software, die auf Fil-C portiert wurde).

  • cd pizlix && sudo ./build.sh - baut die Pizlix Linux-Distribution.

  • cd optfil && sudo ./build.sh - baut die /opt/fil-Distribution.

Dinge, die funktionieren

Viele Softwarepakete funktionieren in Fil-C ohne oder mit nur minimalen Änderungen, darunter große wie openssl, CPython, SQLite und viele andere. Fil-C ist leistungsfähig genug, um ein vollständig speichersicheres Linux-Userland zu unterstützen.

Fil-C bietet vollständige Unterstützung für C und C++ sowie fast alle Erweiterungen, die clang 20 unterstützt. Fil-C hat beispielsweise hervorragende Unterstützung für Atomics und SIMD-Intrinsics.

Fil-C fängt all die Dinge ab, die Speichersicherheit in C schwierig machen, wie:

  • Out-of-Bounds auf dem Heap oder Stack.

  • Use-after-free (ebenfalls Heap oder Stack).

  • Typverwechslung zwischen Zeigern und Nicht-Zeigern.

  • Typfehler, die beim Linken entstehen.

  • Typfehler, die durch Missbrauch von va_lists entstehen.

  • Pointer-Races.

  • Systemaufrufe. Alle an Systemaufrufe übergebenen Puffer werden auf Grenzen und Typ geprüft.

  • Viele andere Dinge.

Fil-C wird mit einer einigermaßen vollständigen POSIX-libc geliefert und unterstützt sogar knifflige Funktionen wie Threads, Signalbehandlung, mmap/munmap, longjmp/setjmp und C++-Exceptions.

Mehr erfahren

Sie können mehr über Fil-C erfahren, indem Sie die Website besuchen.

Sie können mir auch eine E-Mail schreiben: [email protected]

Folgen Sie mir auf Twitter.

Melden Sie Probleme bei GH.

Kategorien