Fil-C 0.682 — memory safety без переписывания

Состоялся выпуск Fil-C 0.682 — компилятора C и C++, обеспечивающего полную безопасность работы с памятью (memory safety) и дающего гарантии бОльшие, чем многие другие языки, такие как, например, Rust. Проект разрабатывается Филипом Пизло (Filip Pizlo), который в представлениях не нуждается.
Fil-C базируется на кодовой базе Clang/LLVM 20.x и позволяет компилировать традиционный код на C/C++ с гарантией предотвращения всех основных уязвимостей (out-of-bounds access, use-after-free, double free, type confusion). В отличие от ASan или MTE, Fil-C использует строго безопасную объектную модель и принципиально не содержит лазеек вроде блоков unsafe.
За прошедший год проект прошёл путь от концептуального доказательства возможностей до полноценного инструментария с масштабной экосистемой.
Основные особенности и технические детали:
- InvisiCaps 2.0 и развитие модели Capability: Существенно переработана система полномочий (capabilities), отслеживающих границы и типы указателей без изменения их 64-битного размера в адресном пространстве C. Оптимизировано хранение capability, снижены накладные расходы, а также добавлена корректная поддержка
union,memcpy, атомарных операций со структурами и передачи мандатов через инлайн-ассемблер. - Параллельный сборщик мусора (FUGC): В рантайм-сборщик мусора Fil«s Unbelievable Garbage Collector добавлены параллельная сборка, поддержка сложных объектов вроде замыканий и GNU Indirect Function.
- Поддержка ARM64: Практически с нуля реализован бэкенд, рантайм, загрузчик и ABI для архитектуры ARM64 (Linux/aarch64), проект перешел в фазу бета-тестирования на этой платформе.
- Безопасный инлайн-ассемблер и SIMD: Добавлена уникальная возможность выполнения безопасных ассемблерных вставок (включая ассемблерные блоки OpenSSL) с сохранением проверки полномочий. Реализована полная поддержка векторных инструкций SSE, AVX, AVX2 и AVX512 (включая
masked load/store,expand/compress,sfenceиprefetch). - Escape Analysis: Начиная с версии 0.671 внедрен статический анализ утечек памяти из областей стека. Это стало самым крупным оптимизационным изменением за год: скорость выполнения QuickJS выросла более чем в 6 раз, а большинства остальных программ — более чем на 10%.
- Совместимость с C++ и современными стандартами: Реализована поддержка исключений C++, принудительного развертывания стека,
ucontext, вычисляемых переходов,std::optionalи указателей на члены классов. - Защита от опасных UB-оптимизаций LLVM: Fil-C фактически отключил агрессивные оптимизации LLVM, полагающиеся на Undefined Behavior (UB). В частности, принудительно отключен
strict aliasingи включен аналог-fwrapv, что предотвращает некорректное удаление проверок безопасности компилятором. - Переход на LLVM/Clang 20: Компилятор переведен на кодовую базу Clang 20 (c версии Fil-C 0.670), что обеспечило лучшую совместимость и переносимость кодогенерации.
- Расширение Linux ABI и FFI нового поколения: Реализована эмуляция и безопасные обертки для десятков системных вызовов Linux (
statx,openat2,pidfd,epoll,splice,futex,timer APIи др.), а также поддержкаdlopen,dlvsym,libffiи FFI-слоя для взаимодействия с внешним кодом. - Новая конвенция вызовов и API рантайма: Оптимизирован внутренний ABI вызова функций для снижения оверхеда. Добавлены новые API, включая
zlock_runtime_threads()(фиксация потоков для построения строгих песочниц), а также встроенный sampling profiler и инструменты дампов памяти. - Полноценный userspace-дистрибутив
/opt/fil: безопасное системное окружение на базе glibc 2.40, включающее OpenSSH, OpenSSL, sudo, git, curl, wget, rsync, tmux, make, grep, а также системные библиотеки (PAM, Kerberos, SELinux, ICU).
Готовые бинарные сборки распространяются в двух вариантах: автономном на базе musl (filc) и полном системном окружении /opt/fil для архитектур x86_64 и ARM64.
GitHub проекта
Также отметим, что имеется и безопасный по памяти дистрибутив Linux — Pizlix
>>> Сайт проекта
