Безопасность в приоритете: переписывание декодера на Rust (jxl-rs)

Декодеры изображений — одна из самых критичных и часто атакуемых поверхностей в любом современном браузере. Они обрабатывают сложные недоверенные бинарные структуры, поступающие из сети, прямо внутри процесса рендера. Исторически декодеры, написанные на небезопасных языках вроде C++, были подвержены уязвимостям: выходы за границы буфера, переполнения кучи, ошибки use-after-free.

Модель безопасности опирается на изоляцию процессов и принцип защиты в глубину, руководствуясь правилом двух. Однако изоляция — это лишь вторичный уровень защиты. Чтобы устранить эти риски в их источнике, в Chrome интегрирована jxl-rs — чистая реализация декодера JPEG XL на Rust.

Проектирование для скорости без компромиссов в безопасности

Безопасность памяти критична, но декодер, работающий с той же скоростью, что и лучшие небезопасные реализации, — это куда более очевидный выбор, чем вариант со значительными потерями производительности.

Фундаментальная часть производительности современных кодеков — это полное использование SIMD-инструкций современных устройств. Для этого пришлось стабилизировать возможность Rust target_feature_11, позволившую использовать SIMD-инструкции без обращения к unsafe-коду.

Следующий шаг — создание слоя абстракции SIMD (jxl_simd), вдохновленного библиотекой C++ Highway (разработанной изначально для libjxl, эталонной реализации JPEG XL на C++). Вместе эти решения позволили написать кроссплатформенную библиотеку, которая не жертвует оптимизациями SIMD, ограничивая небезопасные операции только несколькими тщательно проверенными местами.

Оптимизации производительности в jxl-rs строятся на основе оптимизаций в libjxl. Это включает универсальный конвейер обработки для этапов, пересекающих границы регионов, минимизируя копирование данных для максимизации производительности оборудования. Отслеживание производительности переписанной на Rust реализации на различных аппаратных платформах ведется на панели мониторинга производительности jxl-rs.

Реализация jxl-rs проверена современными методами, включая фаззинг и AI-анализ кода. На всей истории разработки не найдено ни одной ошибки безопасности памяти, что еще раз подтверждает масштабные преимущества Rust для безопасности памяти.

Обратная связь разработчиков и Interop Project

Команда Chrome принимает во внимание отзывы веб-разработчиков из самых разных источников: баг-трекеры, опросы, Developer Signals Project и Interop Project. Решение о поддержке JPEG XL основано на постоянной обратной связи и запросах от веб-разработчиков, особенно видимых в Interop Project, где это было популярным предложением в 2026 году и в предыдущие годы.

Чтобы обеспечить совместимость формата между браузерами, мы участвовали в Interop 2026 JPEG XL Investigation, гарантируя полное покрытие тестами всех возможностей JPEG XL в браузерах и их прохождение в Chrome.

Попробуйте сами

С официальным появлением JPEG XL в Chrome веб становится быстрее, богаче и безопаснее. Мы призываем разработчиков, создателей контента и владельцев платформ начать использовать .jxl-изображения и анимацию в своих pipeline'ах.

Попробуйте, сообщайте об ошибках и помогите нам продолжать создавать более быстрый и безопасный веб для всех.

Благодарности

Спасибо всем, кто внес вклад в jxl-rs или его интеграцию в Chrome, особенно Helmut Januschka за значительный вклад как в интеграцию Chrome, так и в jxl-rs, а также Martin Bruse, Zoltan Szabadka, Sami Boukortt и Wonwoo Choi за их существенный вклад в саму jxl-rs.