Компания Canonical приступила к решению проблем с производительностью snap-пакета с Firefox, который был предложен по умолчанию в Ubuntu 22.04 вместо обычного deb-пакета. Основное недовольство пользователей связано с очень медленным запуском Firefox. Например, на ноутбуке Dell XPS 13 первый запуск Firefox после установки занимает 7.6 секунд, на ноутбуке Thinkpad X240 – 15 секунд, а на плате Raspberry Pi 400 – 38 секунд. Повторные запуски выполняются уже за 0.86, 1.39 и 8.11 секунд соответственно.
В ходе анализа проблемы были выявлены 4 основные причины медленного запуска, решению которых будет уделено основное внимание:
- Высокие накладные расходы при поиске файлов внутри сжатого образа squashfs, которые особенно заметны на маломощных системах. Проблему планируется решить через группировку содержимого для минимизации операций перемещения по образу во время запуска.
- На Raspberry Pi и системах с GPU AMD большие задержки оказались связаны со сбоем при определении графического драйвера и откатом на применение программной отрисовки c очень медленной компиляцией шейдеров. Патч для решения проблемы уже добавлен в snapd.
- Много времени тратилось на копирование встроенных в пакет дополнений в каталог пользователя. В snap-пакет было встроено 98 языковых пакетов, которые все копировались, независимо от выбранного языка.
- Задержки также возникали из-за определения всех доступных шрифтов, тем пиктограмм и конфигураций шрифтов.
При запуске Firefox из snap также наблюдались отдельные проблемы с производительностью в процессе работы, но разработчиками Ubuntu уже подготовлены исправления, улучшающие производительность. Например, начиная с Firefox 100.0 при сборке включены оптимизации на этапе связывания (LTO) и на основе результатов профилирования кода (PGO). Для решения проблем с обменом сообщениями между Firefox и внешними подсистемами подготовлен новый XDG Desktop Portal, поддержка которого находится на стадии рецензирования для включения в Firefox.
В качестве причин продвижения формата snap для браузеров отмечается желание упростить сопровождение и унифицировать разработку для разных версий Ubuntu – пакет deb требует отдельного сопровождения для всех поддерживаемых веток Ubuntu и, соответственно, сборки и тестирования с учётом разных версий системных компонентов, а пакет snap может формироваться сразу для всех веток Ubuntu. Более того, предлагаемый в Ubuntu snap-пакет с Firefox сопровождают сотрудники Mozilla, т.е. он формируется из первых рук без посредников. Поставка в формате snap также позволила ускорить доведение новых версий браузера до пользователей Ubuntu и дала возможность запускать Firefox в изолированном окружении, созданном при помощи механизма AppArmor, для дополнительной защиты остальной системы от эксплуатации уязвимостей в браузере.