Die Veröffentlichung von Fil-C 0.682, einem C- und C++-Compiler, der vollstĂ€ndige Speichersicherheit (memory safety) gewĂ€hrleistet und bessere Garantien bietet als viele andere Sprachen, wie zum Beispiel Rust, erfolgte. Das Projekt wird von Filip Pizlo entwickelt, der keiner EinfĂŒhrung bedarf.
Fil-C basiert auf dem Code von Clang/LLVM 20.x und ermöglicht die Kompilierung traditioneller C/C++-Codes mit der Garantie, alle gÀngigen Schwachstellen (out-of-bounds access, use-after-free, double free, type confusion) zu verhindern. Im Gegensatz zu ASan oder MTE verwendet Fil-C ein streng sicheres Objektmodell und enthÀlt grundsÀtzlich keine Schlupflöcher wie Unsafe-Blöcke.
Im vergangenen Jahr hat das Projekt von einem Konzeptnachweis zu einem vollwertigen Tool mit einem umfangreichen Ăkosystem fortgeschritten.
Hauptmerkmale und technische Details:
- InvisiCaps 2.0 und die Entwicklung des Capability-Modells: Das Berechtigungssystem (capabilities), das die Grenzen und Typen von Zeigern verfolgt, wurde grundlegend ĂŒberarbeitet, ohne ihre 64-Bit-GröĂe im Adressraum von C zu verĂ€ndern. Die Speicherung von capabilities wurde optimiert, die Overhead-Kosten wurden gesenkt, und auĂerdem wurde die korrekte UnterstĂŒtzung von union, memcpy, atomaren Operationen mit Strukturen und die Ăbertragung von Mandaten ĂŒber Inline-Assembler hinzugefĂŒgt.
- Parallel Garbage Collector (FUGC): Im Laufzeit-Garbage Collector Filâs Unglaublicher Garbage Collector wurden paralleles Sammeln, die UnterstĂŒtzung komplexer Objekte wie Closures und GNU Indirect Function hinzugefĂŒgt.
- UnterstĂŒtzung fĂŒr ARM64: Ein Backend, Laufzeit, Loader und ABI fĂŒr die ARM64-Architektur (Linux/aarch64) wurden praktisch von Grund auf neu implementiert, und das Projekt hat die Phase der Beta-Tests auf dieser Plattform erreicht.
- Sicherer Inline-Assembler und SIMD: Eine einzigartige FĂ€higkeit zur AusfĂŒhrung von sicheren Assembler-EinfĂŒgungen (einschlieĂlich Assembler-Blöcken von OpenSSL) mit der Aufrechterhaltung der BerechtigungsprĂŒfungen wurde hinzugefĂŒgt. VollstĂ€ndige UnterstĂŒtzung fĂŒr Vektor-Instruktionen SSE, AVX, AVX2 und AVX512 (einschlieĂlich masked load/store, expand/compress, sfence und prefetch) wurde implementiert.
- Escape-Analyse: Seit Version 0.671 wird eine statische Analyse von Speicherlecks aus Stackbereichen durchgefĂŒhrt. Dies war die gröĂte OptimierungsĂ€nderung des Jahres: Die AusfĂŒhrungsgeschwindigkeit von QuickJS stieg um mehr als das Sechsfache, und die meisten anderen Programme um mehr als 10%.
- KompatibilitĂ€t mit C++ und modernen Standards: Die UnterstĂŒtzung fĂŒr C++-Ausnahmen, erzwungene Stapel-Entfaltung, ucontext, berechnete SprĂŒnge, std::optional und Zeiger auf Klassenmitglieder wurde implementiert.
- Schutz vor gefĂ€hrlichen UB-Optimierungen in LLVM: Fil-C hat aggressive Optimierungen in LLVM, die auf undefined behavior (UB) basieren, tatsĂ€chlich deaktiviert. Insbesondere wurde strict aliasing deaktiviert und analog -fwrapv aktiviert, was das fehlerhafte Entfernen von SicherheitsprĂŒfungen durch den Compiler verhindert.
- Umstieg auf LLVM/Clang 20: Der Compiler wurde auf den Codebasistandard von Clang 20 (ab der Version Fil-C 0.670) umgestellt, was eine bessere KompatibilitÀt und PortabilitÀt der Codegenerierung gewÀhrleistet.
- Erweiterung des Linux ABI und FFI der nĂ€chsten Generation: Es wurde eine Emulation und sichere Wrapper fĂŒr Dutzende von Systemaufrufen in Linux (statx, openat2, pidfd, epoll, splice, futex, timer API usw.) implementiert, sowie UnterstĂŒtzung fĂŒr dlopen, dlvsym, libffi und eine FFI-Schicht zur Interaktion mit externem Code.
- Neue Aufrufkonvention und Runtime-API: Der interne ABI zum Funktionsaufruf wurde optimiert, um den Overhead zu reduzieren. Neue APIs wurden hinzugefĂŒgt, einschlieĂlich zlock_runtime_threads() (Festlegung von Threads fĂŒr den Aufbau strenger SandkĂ€sten), sowie ein integrierter Sampling-Profilierer und Werkzeuge fĂŒr Speicher-Dumps.
- Vollwertige Userspace-Distribution /opt/fil: eine sichere Systemumgebung auf Basis von glibc 2.40, die OpenSSH, OpenSSL, sudo, git, curl, wget, rsync, tmux, make, grep sowie Systembibliotheken (PAM, Kerberos, SELinux, ICU) umfasst.
Fertige BinĂ€rversionen werden in zwei Varianten verbreitet: als eigenstĂ€ndige Version auf Basis von musl (filc) und als vollstĂ€ndige Systemumgebung /opt/fil fĂŒr die Architekturen x86_64 und ARM64.
AuĂerdem sei erwĂ€hnt, dass es auch eine speichersichere Linux-Distribution gibt â Pizlix
Quelle: linux.org.ru
