Поддержка целевых платформ в Qt Framework на примере ОС Аврора (Алексей Андреев, OSSDEVCONF-2024)

Материал из 0x1.tv

(перенаправлено с «20241006A»)
Докладчик
Алексей Андреев.jpg
Алексей Андреев

Кросс-платформенный фреймворк Qt позволяет создавать приложения для различных окружений: операционных систем для персональных компьютеров и мобильных устройств, WebAssembly.

Это достигается благодаря слою адаптации, который обеспечивает взаимодействие публичных классов Qt с программными интерфейсами, предоставляемыми целевой платформой.

В докладе рассматривается опыт портирования Qt на публичный API операционной системы Аврора, описываются необходимые для изменения в компонентах слоя адаптации и их взаимодействие с системным~API.

Доклад будет интересен как разработчикам операционных систем и устройств, так и прикладным разработчикам, которые хотят ознакомиться с устройством системных API.

Видео

Презентация

Thesis

Приложения на Qt используются в различных окружениях: персональные компьютеры, мобильные устройства, медицинское оборудование, автомобильные системы, браузеры. Примеры ПО, написанного на Qt: KDE, VLC, Telegram, Virtual Box, Cura и др. Многие дистрибутивы Linux используют Qt как основной фреймворк, в том числе Ubuntu, Fedora, Red Hat и отечественные Astra Linux, ROSA, ALT Linux.

Не исключением является и мобильная операционная система Аврора, разрабатываемая компанией «Открытая мобильная платформа».

Для разработки прикладного ПО фреймворк Qt предоставляет платформонезависимый API. Это позволяет иметь общую кодовую базу для версий приложения под различные целевые платформы: Windows, Android, macOS, iOS, дистрибутивы Linux, ОС Аврора. Однако для взаимодействия с каждой платформой сами библиотеки Qt используют системные API, которые могут различаться для разных платформ. Набор связующего ПО, который позволяет запустить Qt на конкретной платформе называют слоем адаптации или, для краткости, адаптацией Qt под эту платформу.

Qt состоит из большого количества отдельных библиотек, которые сгруппированы по модулям: базовые модули, мультимедиа, работа с датчиками, работа с сетью, работа с базами данных и др. Адаптация может выполняться для модулей независимо.

Поддержка платформы может быть реализована на стороне самого фреймворка Qt.

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

Среди открытых проектов можно обнаружить адаптации Qt для Tizen, Haiku, managarm, SerenityOS[1], OpenHarmony[2].

Мы выполнили открытую адаптацию Qt для ОС Аврора[3]. Могут возникнуть два вопроса:

  • В составе ОС Аврора уже есть библиотеки Qt. Зачем потребовалось делать новую адаптацию?

По ряду причин в составе ОС Аврора сейчас используются библиотеки Qt версиии 5.6. Несмотря на то, что они вполне применимы для разработки прикладного ПО, версия уже изрядно устарела. Это приводит к тому, что разработчикам становится сложнее поддерживать общую кодовую базу, если их приложение на другой платформе использует более новую версию Qt.


  • ОС Аврора близка к дистрибутивам Linux для ПК. В чём особенность портирования Qt для неё?

В составе ОС Аврора можно найти многие распространённые библиотеки, такие как GStreamer, systemd, и др. Адаптация Qt в составе ОС Аврора их и использует. Не смотря на это, непосредственное использование системных библиотек в прикладном ПО ограничено механизмами безопасности. Для сторонних приложений ОС Аврора предоставляет собственный API[4]. И получается, что адаптация Qt для ОС Аврора — это новая задача, заключающая в использовании публичного API ОС Аврора для реализации функций, необходимых интерфейсам Qt.

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

Для этого требуется подготовить связку между абстрактными классами, предлагаемыми как универсальные со стороны Qt, и API, предоставляемым платформой. Чтобы это реализовать, понадобится сверить наборы доступных и требуемых функций и проработать конвертацию форматов данных. Сложность может заключаться в том, что эти характеристики могут изменяться как между различными версиями Qt, так и между различными выпусками целевой платформы. При этом, придётся изучать исходный код Qt, поскольку документация не покрывает по его приватные классы.

В ходе проведения адаптации мы выяснили, какие функции должна предоставлять платформа для реализации отдельных модулей Qt. Кроме того, разработали инструмент auroradeployqt. Который по аналогии с другими утилитами *deployqt позволяет скопировать в поставку приложения необходимые зависимости: библиотеки модулей Qt и QML-компоненты. А также проверяет доступность для линковки и запуска с учётом механизмов валидации пакетов ОС Аврора.

Актуальный статус разработки и руководство по использованию доступны на странице[5].


Примечания и ссылки

  1. GitHub: Port Qt to SerenityOS, URL: [1]
  2. Gitee: building project with Qt for OpenHarmony DevEco, URL: [2]
  3. GitLab: Open Mobile Platform, Qt related repositories, URL: [3]
  4. Документация ОС Аврора: Публичные API [4]
  5. GitLab: AuroraDeployQt, руководство по быстрому началу работы [5]