
Состоялся официальный релиз версии 0.9.0 библиотеки и кроссплатформенной консольной утилиты ZXC. Проект представляет собой инструмент для высокопроизводительного многопоточного асимметричного сжатия данных без потерь. Технология оптимизирована для работы с игровыми ресурсами, прошивками и пакетами приложений, использующих подход «один раз записать, многократно читать» (WORM).
Главная особенность ZXC заключается в приоритете скорости распаковки над скоростью сжатия, что выгодно отличает его от популярных решений вроде LZ4. По данным разработчиков, производительность распаковки на архитектуре Apple Silicon выше на 40%, на Google Axion (ARM64) — на 25%, а на x86_64 — на 5%. При этом коэффициент сжатия остается более высоким по сравнению с аналогами.
В актуальном обновлении 0.9.0 внедрена поддержка многократно используемого контекста, гибкая настройка размеров блоков, а также полная техническая документация. Помимо этого, разработчики устранили ряд уязвимостей, включая проблему переполнения буфера в куче, выявленную с помощью фаззинг-тестирования. Важно отметить, что версия SOVERSION была увеличена до 2, так как релиз содержит изменения, нарушающие ABI.
Ключевые изменения и новые возможности
Проект написан на языке C и распространяется по свободной лицензии BSD 3. Основные новшества включают:
- Нарушение обратной совместимости: Бинарные файлы, собранные под версию SOVERSION 1, требуют перекомпиляции. Функции
zxc_compress()иzxc_decompress()теперь используют структуры опций вместо набора позиционных параметров. - Оптимизация API: Внедрены непрозрачные контексты сжатия и распаковки (
cctxиdctx), размещаемые в куче. Это позволяет избежать затрат на повторное выделение памяти при частых вызовах, что особенно полезно для интеграции в файловые системы вродеsquashfsилиdwarfs. - Настройка размеров блоков: Параметр
block_sizeтеперь можно варьировать в диапазоне от 4 КБ до 2 МБ (степень двойки), при этом значение по умолчанию составляет 256 КБ. В консольной утилите появилась поддержка флага--block-sizeс удобными суффиксами единиц измерения. - Улучшение производительности: Реализована быстрая прямая декомпрессия, при которой исключается промежуточное копирование в рабочий буфер, если буфер назначения располагает достаточным объемом пространства.
Безопасность и документация
Разработчики уделили особое внимание стабильности кода и доступности документации:
- Исправление ошибок: Устранено потенциальное переполнение буфера кучи в
zxc_bitpack_stream_32и добавлена проверка корректности размера потока при декомпрессии для предотвращения чтения за пределами допустимых границ. - Совместимость: Публичные заголовочные файлы получили защитные конструкции
extern "C"для корректной работы в C++ проектах. - Новые справочники: В файле
docs/API.mdпредставлен полный разбор 21 экспортируемого символа, а вdocs/FORMAT.mdобновлено описание кодирования размера блока. - Экосистема: Обновлены официальные врапперы для языков программирования Python, Rust и среды Node.js.





