Чтобы приложение выглядело одинаково при любом способе установки, мы решили поставлять GTK вместе с ним
Обычно одно и то же приложение выглядит немного по-разному в разных дистрибутивах не из-за самого приложения, а из-за версии установленного в системе инструментария. Начиная с beta.2 все четыре формата установки поставляются с одинаковыми библиотеками.

Даже одна и та же сборка приложения для Linux может выглядеть по-разному в разных дистрибутивах. Меняется вид переключателей, нарушаются отступы в диалоговых окнах, а иногда окно и вовсе не открывается. Причина в том, что в каждой системе установлен свой инструментарий.
До сих пор мы поддерживали и две сборки mote. .deb использовал системный GTK, а AppImage, tarball и Flatpak содержали необходимые библиотеки внутри.
Начиная с beta.2 мы объединили их в одну сборку.
Способы установки разные, но приложение одно и то же
Теперь .deb также содержит GTK 4.22 и libadwaita 1.9 в /opt/mote. Его можно установить с помощью apt install в Ubuntu 22.04 и Debian 12 независимо от установленных в системе библиотек. Внешний вид и поведение приложения также совпадают с AppImage, tarball и Flatpak.
Версии включённых библиотек согласованы со средой выполнения GNOME во Flatpak. Это GLib 2.88, Pango 1.56, HarfBuzz 11, cairo 1.18 и fontconfig 2.16. Чтобы приложение могло работать и в старых дистрибутивах, мы самостоятельно собираем его в контейнере с glibc 2.35.
Цель — сократить количество вариантов, которые нужно проверять. При использовании системного GTK версия инструментария различается в каждой версии Ubuntu. В 24.04 это 4.14, в 24.10 — 4.16, а в 25.04 — 4.18. При каждом изменении одной строки стилей приходится проверять все эти сочетания. Теперь достаточно проверить только способы установки.
Мы также рассматривали возможность отказаться от .deb. Но на настольной Ubuntu apt — самый привычный способ установки. AppImage запускается примерно на 140 мс медленнее и требует FUSE. В tarball нет автоматических обновлений, а Flatpak требует исключений для песочницы и среды выполнения объёмом около 1 ГБ.
Поэтому вместо того, чтобы отказаться от .deb, мы изменили его содержимое.
Мы купили единообразие за 14 МБ
У этого есть своя цена. Размер .deb вырос с 4 до 34 МБ. При открытии одного и того же документа объём памяти PSS также увеличился со 115 до 129 МБ. Причина в том, что библиотеки, включённые в приложение, нельзя совместно использовать с другими приложениями GTK.
Производительность сохранилась. Время p95 от нажатия клавиши до отображения на экране сократилось с 4,82 до 4,07 мс. Медианное время появления первого экрана тоже немного уменьшилось — с 306 до 303 мс. Если просто оставить приложение открытым, оно, как и прежде, не отрисовывает кадры.
В обмен на дополнительные 14 МБ памяти мы получили одинаковое приложение во всех дистрибутивах.
Обновление включённого инструментария — плановая работа, которую нужно выполнять примерно раз в год. Когда обновляется среда выполнения GNOME во Flatpak, мы вместе с ней обновляем и включённые версии. В этот момент восемь строк лабораторной матрицы становятся контрольным рубежом для обновления.
Вкусы определяет mote, а доступность — пользователь
Мы также упорядочили настройки фирменного оформления. По умолчанию используются цвет акцента и шрифт интерфейса mote, и они одинаково применяются к виджетам libadwaita. Если вы хотите следовать настройкам среды рабочего стола, выключите два переключателя в разделе «Настройки → Внешний вид».
При этом настройки доступности всегда определяются выбором пользователя. Приложение не переопределяет масштаб текста и настройки HiDPI. Пользователь, включивший крупный текст, увидит крупный текст и в mote. Тёмный режим также можно выбрать самостоятельно из трёх вариантов: системный, светлый или тёмный.
Ввод корейского текста проверен в восьми средах
При смене инструментария в первую очередь нужно проверить методы ввода. Мы проверили ввод корейского текста в восьми средах, составленных из сочетаний способов установки, ibus и fcitx5, X11 и Wayland, Ubuntu 22.04 и 24.04. Все проверки пройдены.
Мы также исправили тесты, чтобы они не зависели от функций проверки, предназначенных для разработки. Теперь мы устанавливаем файлы, которые действительно распространяются, а затем проверяем корректность составного ввода корейских символов.

Самый надёжный способ сделать приложение одинаковым везде — прежде всего сократить число условий, которые могут различаться.