Trifecta Tech Foundation выпустила первую версию libzstd-rs-sys — чистую реализацию zstd на Rust. Это третий их проект по сжатию после портов zlib и bzip2.
Zstd — формат сжатия, заточенный под современные CPU. Он сильно быстрее gzip и упаковывает данные плотнее. Постепенно заменяет gzip в веб-трафике.
Зачем новый код, если есть крейт zstd? Главная причина — портативность. Существующий крейт компилирует C-код, а значит, требует C-тулчейна под целевую платформу. На Windows или WebAssembly с этим бывают проблемы. Чистый Rust всё решает. Вторая — возможность скомпилировать библиотеку как замену эталонной C-реализации. Третья — независимость от Meta: эталонный zstd требует подписания контракта с компанией для внесения изменений. Trifecta считает, что независимая совместимая реализация укрепляет open-source экосистему.
Исходный код перевели инструментом c2rust, затем вручную вычистили декомпрессию и сборщик словарей. Код проверяют тестами эталонной реализации, фаззингом и Miri. В процессе нашли несколько ограничений Miri, которые уже исправили, и сделали вклад в Clippy.
По умолчанию их декомпрессия на пару процентов медленнее C-версии. Но есть флаг unsafe-performance-experimental, который отключает четыре проверки границ массивов. С ним производительность сравнивается с C. Разработчики считают потерю в ~3% приемлемой ценой за безопасность памяти. Кто готов рискнуть — может включить флаг и получить максимальную скорость.
Сжатие пока не допилили — ищут финансирование. С остальными задачами поможет Milestone 4: Encoder implementation. Уже есть форк крейта zstd, использующий libzstd-rs-sys вместо C-библиотеки. Его планируют залить в апстрим, но с экспериментальными API есть нюансы из-за различий в enum и struct.
Работу над декомпрессией профинансировали Chainguard, Astral и NLnet Foundation. Словарь построила Sovereign Tech Agency. Сама Trifecta Tech Foundation — некоммерческая организация, делает open-source «строительные блоки» для критической инфраструктуры.