Архитектура

Sailfish OS представляет собой мобильную операционную систему Linux на основе Mer.

Архитектура Sailfish OS представлена ниже.

Архитектура ОС

Mer предоставляет системные компоненты для построения служб над аппаратным уровнем и уровнем ядра. Для обеспечения доступа библиотек ОС Linux, основанных на GNU C, к библиотекам, основанных на Bionic, используется libhybris.

Фреймворк для написания C++ приложений Qt предоставляет основные библиотеки для разработки. Помимо основных модулей Qt в Sailfish OS используются такие дополнительные модули, как Qt Maps, Qt Sensors и Qt Contacts. Также все приложения Sailfish OS разрабатываются с использованием QML, технологии Qt для простого создания пользовательского интерфейса в приложениях на языке C++.

Sailfish OS также включает в себя большое количество связующих библиотек (middleware) и фреймворков, многие из которых размещены на Mer GitLab и используются прикладными приложениями. Такие библиотеки и фреймворки написаны на языках C и C++. Библиотеки, которые используются непосредственно в UI, включают в себя модули QML. Это позволяет приложениям на QML использовать их без дополнительных QML/C++ биндингов. Некоторые из них строятся на известных проектах Linux с открытым исходным кодом для системных служб (например, адаптация oFono, ConnMan и BlueZ).

Системные библиотеки

Системные библиотеки включают в себя функции управления системой и устройством, в том числе:

  • управление мобильным устройством;
  • обновление системы;
  • контроль устройств и обработка событий (например, событий, связанных с USB, MMC, зарядным устройством, разъемом для подключения наушников);
  • управление режимом электропитания;
  • обеспечение интерфейса для доступа к устройствам.

В Sailfish OS используется менеджер системы и сервисов systemd. Данный подход сильно отличается от типичных скриптов инициализации SysV, но также является более подходящим для мобильных систем в связи с запуском демонов по запросу.

В Sailfish OS используется дополнительный демон sensord, позволяющий записывать данные с датчиков в циклические базы данных (rrd) для последующей визуализации.

Взаимодействие системных библиотек с другими компонентами Sailfish OS представлено на рисунке ниже.

Системные библиотеки

Стандартные компоненты

Стандартные компоненты включают в себя системные библиотеки GNU/Linux, отвечающие за поддержку базы данных, интернационализацию и анализ XML.

Их взаимодействие с другими компонентами Sailfish OS представлено на рисунке ниже.

Стандартные компоненты

glibc

В Sailfish OS используется glibc в качестве базовой библиотеки C и набор инструментальных средств Linaro GCC.

D-Bus

Для связи между процессами используется системная шина обмена сообщениями D-Bus.

dconf

Для хранения настроек приложений в Sailfish OS используется низкоуровневая система конфигурации dconf, основанная на ключах. Ключи находятся в неструктурированной базе данных (ключи, логически связанные между собой, объединены в категории).

Утилиты GNU

Sailfish OS является GNU/Linux системой, поэтому использует стандартные приложения GNU (инструменты оболочки):

Подключение

Сетевые возможности, в том числе телефония, в основном реализуются через:

  • ConnMan для управления соединением общей сети;
  • oFono для обеспечения сети мобильной сотовой связи;
  • BlueZ для подключения по Bluetooth;
  • StateFS и MCE для управления состоянием системы.

ConnMan

ConnMan управляет функциями всех интернет-соединений на Sailfish OS, в том числе:

  • сканирование данных Wi-Fi и сотовой связи;
  • создание общего доступа с помощью точки доступа WLAN;
  • обращение к режиму полета для отключения/восстановления подключения.

Адаптация ConnMan в Sailfish OS доступна по адресу git.merproject.org/mer-core/connman. При разработке приложений для Sailfish OS доступ к функциям ConnMan можно упростить, воспользовавшись libconnman-qt, предоставляющей модуль QML и API Qt.

oFono

oFono — основная библиотека, используемая для функций, связанных с сотовой связью. Например:

  • регистрация в сотовой сети и запросы к оператору;
  • базовое управление модемом;
  • телефонные звонки, SMS и MMS;
  • Bluetooth-соединения для выполнения звонков через профиль Hands-Free (HFP);
  • действия с SIM, включающие использование PIN- и PUK-кодов и SIM ToolKit (STK);
  • обработка дополнительных сервисных кодов USSD/GSM.

Адаптация oFono в Sailfish OS доступна по адресу git.merproject.org/mer-core/ofono. При разработке приложений для Sailfish OS доступ к функциям oFono можно упростить, воспользовавшись libqofono и libqofonoext, которые предоставляют модули QML и API Qt.

BlueZ

BlueZ — базовая библиотека, используемая для всех функций, связанных с Bluetooth.

StateFS и MCE

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

MCE обеспечивает режим контроля для ОС, который включает в себя управление режимами экрана (включенный, затемненный, выключенный, заблокированный), режимами включения питания (включая, в том числе, режим глубокого сна и другие режимы с низким энергопотреблением) и состоянием радио, которые могут повлиять на подключение к сети или задержке.

ALSA

ALSA — набор звуковых драйверов и библиотека с собственными расширениями API. ALSA предоставляет эффективную поддержку для множества приложений, также полностью построена из модулей, поддерживает SMP и thread-safe.

PulseAudio

PulseAudio является кроссплатформенным звуковым сервером, позволяющим смешивать аудиопотоки. PulseAudio принимает звук от одного или нескольких источников (процессов или устройств) и направляет одному или нескольким приемникам (звуковым платам, серверам PulseAudio или процессам).

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

Также PulseAudio предоставляет собственный интерфейс для приложений, через который можно работать напрямую с сервером.

GStreamer

Для воспроизведения видеофайла и записи используется мультимедийный фреймворк GStreamer. GStreamer является «ядром» мультимедийных приложений, таких как видеоредакторы, потоковые серверы и медиаплееры.

Кодеки

В Sailfish OS используются кодек FLAC, предназначенный для сжатия аудиоданных без потерь, и кодек Ogg Vorbis/Theora/Speex, предназначенный для сжатия аудиоданных с потерями.

Управление ПО

В Sailfish OS используется менеджер пакетов RPM в качестве серверной части (backend) для менеджера пакетов Zypper.

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

Для обеспечения высокоуровневого интерфейса для пакетных менеджеров используется набор приложений PackageKit. В качестве командной строки в PackageKit используется утилита pkcon.

Также для управления репозиториями используется приложение SSU, которое предоставляет аутентификацию устройств/пользователей и авторизацию доступа к службам. Приложение на устройстве регистрируется в облачной службе и управляет репозиториями через Zypper/Packagekit, используя предоставленные метки доступа.

Управление ПО

Qt

Qt — кроссплатформенная библиотека разработки графического интерфейса ОС. В Sailfish OS она используется в качестве основной среды разработки приложений и предоставляет единообразные API для частого использования в других функциях устройства.

Следующие модули используются в Sailfish OS:

  • QtCore;
  • QtWebkit;
  • QtDBus;
  • QtGui;
  • QtLocation;
  • QtPositioning;
  • QtMultimedia;
  • QtNetwork;
  • QtQuick;
  • QtQml;
  • QtSensors;
  • QtSql;
  • QtSvg;
  • QtXml;
  • QtXmlPatterns.

Существуют модули Qt, которые не используются в Sailfish OS, но их стоит отметить:

  • QtScript;
  • QtOpengl;
  • QtQuickWidgets;
  • QtWidgets.

Графика

Графика представляет собой систему графического интерфейса, которая включает в себя систему управления окнами с помощью Wayland, методы ввода и 3D-графику, за которую отвечают API OpenGL ES и EGL.

В качестве композитора в Sailfish OS используется Lipstick.

В качестве виртуальной клавиатуры в Sailfish OS используется фреймворк Maliit.

В Sailfish OS используются такие свободно распространяемые шрифты, как CJKUni, Droid, Liberation.

Графика взаимодействует с другими компонентами Sailfish OS в соответствии с представленным рисунком ниже.

Графика

Безопасность

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

Также важна конфиденциальность данных. Конфиденциальность связана со способом обработки данных пользователя на устройстве, будь то конфиденциальные данные пользователя или использование этих данных для других целей, таких как рекламная аналитика или продажа третьим лицам. Sailfish OS уважает конфиденциальность своих пользователей и не использует данные для каких-либо подобных целей (полная политика конфиденциальности доступна по ссылке). В некоторых случаях Sailfish OS использует сторонние плагины для расширения своей функциональности, и в таких случаях сторонний плагин может потребовать, чтобы пользователь согласился на некоторую отдельную политику конфиденциальности (например, плагины определения местоположения, которые могут использовать данные об окружающих вышках сотовой связи для определения местоположения пользователя). В таких случаях пользователя явно информируют и требуют официальное разрешение перед добавлением этой функциональности.

Срочные исправления безопасности

Устройства Sailfish OS могут быть обновлены по так называемым срочным исправлениям (hotfixes), в случае специфичных проблем безопасности помимо стандартного обновления версии. Это позволяет вендорам предоставлять обновления системы безопасности с минимальной задержкой. Данные исправления предоставляются в качестве обновлений пакета через стандартные системы управления пакетом, полностью версируются и безопасно выпускаются с шифрованием end-to-end (end-to-end encryption) во избежание атаки «человек по середине» (man-in-the-middle) или других вредоносных атак.