Он 16 лет ждёт уязвимость в своём коде, но готов доверить свои серверы новому компилятору.

Один из самых известных криптографов и программистов мира, Дэниел Дж. Бернстайн, протестировал новый типбезопасный компилятор Fil-C, предназначенный для языков C и C++. И хотя сам он описал результаты всего лишь как «заметки по использованию Fil-C», его оценка оказалась удивительно положительной.
Бернстайн отмечает, что компилятор обеспечивает высокий уровень совместимости: большинство библиотек и приложений, с которыми он экспериментировал, работали под Fil-C без изменений. Там, где требовались доработки, их удавалось сделать быстро. Учёный собирает собственные наблюдения на отдельной странице и признаётся, что прежде всего хочет защитить управляемые им серверы, постепенно переводя их на код, собранный с помощью нового компилятора.
Fil-C — проект, о котором впервые заговорили год назад. Он основан на Clang, фронтенде для компилятора LLVM, разработанном Apple и широко применяемом в экосистеме C-языков. Идея в том, чтобы сделать привычный C и C++ безопаснее без кардинального изменения синтаксиса и без внедрения внешних надстроек вроде Rust.
Fil-C — не единственный инструмент, пытающийся решить проблему. Почти одновременно появился другой компилятор, TrapC, созданный Робином Роу. На аппаратном уровне аналогичных целей добиваются проекты CHERI и OMA (Object Memory Architecture). Первый развивается при поддержке Кембриджского университета и внедряет расширения процессорной архитектуры для предотвращения ошибок доступа к памяти. Второй вырос из докторской работы Эда Наттинга, посвящённой аппаратному сборщику мусора, и недавно сравнивался самим автором с CHERI в блоге под заголовком Two Paths to Memory Safety.
Безопасность памяти остаётся одной из самых острых тем в индустрии. Миллиарды строк C-кода, написанные за десятилетия, содержат уязвимости, из-за которых компании вынуждены выпускать бесконечные обновления. Поэтому появление инструментов вроде Fil-C вызывает огромный интерес: они способны ловить целые классы ошибок — от выхода за границы массива до использования уже освобождённой памяти.
Автор Fil-C, инженер Филип Пизло, не раз объяснял, чем его подход отличается от конкурентов. В отличие от CHERI, Fil-C не меняет размер указателя (sizeof(void*)), поэтому обеспечивает лучшую совместимость с существующими программами. Например, под Fil-C удалось без доработок запустить интерпретатор CPython, что пока недостижимо на платформе CHERI. Кроме того, компилятор корректно обрабатывает случаи повторного обращения к уже освобождённой памяти — одна из самых опасных ошибок в C-коде.
Конечно, Fil-C не лишён недостатков. Программы, собранные с его помощью, работают медленнее обычных, а двоичная совместимость с «классическим» C (который сам Пизло шутливо называет Yolo-C) не полная. Невозможно просто перекомпилировать целую операционную систему и запустить её без адаптации, но отдельные компоненты крупных проектов можно сделать безопаснее без переписывания на Rust или Zig. В этом смысле Fil-C возвращает старому C конкурентоспособность в эпоху языков с встроенной защитой памяти.
Что делает отзыв Бернстайна особенно значимым — это его собственная репутация. Автор одних из самых безопасных реализаций сетевых сервисов, он с 2009 года предлагает тысячу долларов каждому, кто найдёт уязвимость в его DNS-сервере djbdns или почтовом агенте qmail. Спустя шестнадцать лет призы всё ещё не востребованы. Ещё в 1990-х он вошёл в историю криптографии своими работами по алгоритмам и защитным библиотекам, а среди коллег получил сокращённое прозвище DJB, став одним из «трёхбуквенных» легенд хакерского мира — наряду с RMS, ESR и JWZ.
Поэтому его мнение о новом компиляторе воспринимается не как частный отзыв, а как знак доверия со стороны человека, всю карьеру посвятившего поиску ошибок и уязвимостей. И если даже DJB готов переводить свои системы на Fil-C, у этого проекта явно есть шанс стать важной вехой в истории C-языков.