Рабочий стол Budgie переходит с GTK+ и библиотек GNOME на Qt


Разработчики дистрибутива Solus приняли решение о переводе рабочего стола Budgie на фреймворк Qt. Изначально Budgie был построен на основе GTK+ и штатных библиотек GNOME, но использовал собственные реализации оболочки GNOME Shell, панели, апплетов и системы вывода уведомлений. Указано, что потребности Budgie переросли возможности стека GNOME, и проект не может должным образом развиваться на основе штатных библиотек GNOME.

По мере увеличения сложности проекта Budgie обеспечение работы поверх стека GNOME становилась всё более сложной задачей, отбирающей у разработчиков значительные ресурсы. Появление своего конфигуратора, возможности размещения нескольких панелей и развитие API для плагинов приводило к всё большему усложнению проекта. В один прекрасный момент разработчики осознали, что тратят львиную долю своего времени на адаптацию проекта под изменения в новых выпусках GNOME.

Отмечается, что GTK+ развивается в паре с GNOME и разрабатывается для решения задач, которые ставят перед собой разработчики GNOME, без оглядки на другие проекты. В итоге, каждый значительный релиз GNOME приводит к возникновению непредвиденных проблем, возникающих при переводе Budgie на обновлённые библиотеки GNOME. Среди таких проблем упоминаются нарушение совместимости API или ABI, слияние компонентов, нарушение работы виджетов и тем оформления, непостоянство GdkScreen API, изменение поведения GSettings. Для того, чтобы поддерживать Budgie на плаву приходится тратить много усилий и притворяться GNOME Shell.

В качестве иллюстрации возникающих проблем приведён пример с предачей уведомлений, для отображения которых GNOME Settings Daemon отправляет сообщение по D-BUS к получателю с именем org.gnome.Shell. Чтобы принять подобные сообщения оконному менеджеру budgie-wm приходится притворяться org.gnome.Shell, чтобы корректно обработать нажатие горячих клавиш и событий переключения раскладки клавиатуры. Так как в процессе Mutter (budgie-wm) не предоставляются нормальные виджеты GTK+, приходится перенаправлять уведомление в процесс budgie-daemon, в котором можно использовать виджеты GTK+. В качестве выхода можно было бы создать собственное ответвление библиотек GNOME, но подобный шаг оценен как излишне трудоёмкий.

Рассмотрев все за и против оптимальным признан путь миграции рабочего стола Budgie на Qt. По мнению разработчиков, переход на Qt положительно отразится на производительности, позволит реализовать новые возможности и расширить графические эффекты. При этом в основной кодовой базе планируется использовать только средства разработки на C++ и отказаться от применения языка Vala. В Budgie также не будет применяться QML и библиотеки KDE. Подобное ограничение не распространяется на сторонние виджеты, авторы которых вольны применять QML. Переход на Qt не означает обеспечение совместимости с KDE Plasma и проект продолжит ориентацию на запуск приложений GNOME, обеспечив их бесшовную интеграцию в окружение на базе Qt.