среда, 17 февраля 2016 г.

XDG App - будущее пакетных менеджеров от разработчиков GNOME (?)

Уже не первый раз предпринимаются попытки упростить установку и распространение программ в Linux. Связано это конечно же в первую очередь с разнообразием дистрибутивов и пакетных менеджеров. Не все разработчики могут (или просто не хотят) создавать пакеты своих программ под разные дистрибутивы (deb, rpm и так далее). Для кого-то выходом станет распостранение программы в виде самораспаковывающегося run-архива, но тут беда - каждая программа будет таскать с собой необходимые ей зависимости и дублировать их. Как в Windows. Преуспел в этом плане....Android. Там программы распространяются в APK-пакетах, и там также поставляются необходимые программе зависимости. Однако есть одно важное отличие: программа из APK может использовать системные библиотеки, плюс она надёжно изолирована от системы. Именно поэтому при установке программы в Андроид, она запрашивает у пользователя необходимые разрешения. Похожим путём пошли разработчики графического окружеия GNOME, представив проект XDG App. О нём и пойдёт речь.

Итак, в чём суть? Существует такое понятие, называемое контейнерная виртуализация. Принцип её работы в том, что приложение (или ОС) запаковывается в контейнер, в котором находятся только самые необходимые компоненты. Контейнер может использовать ресурсы системы, создаёт своё пространство в памяти, но в отличии от виртуальной машины - потребляет их минимум, так как не происходит эмуляции аппаратного обеспечения, в частности процессора. При этом то, что находится в контейнере, надёжно изолированно от остальной системы, и не может помешать работе других программ или ОС в контейнерах. Такие технологии как LXC (Linux Containers), Docker и многие другие уже вошли в энтерпрайз и потихоньку начинают завоёвывать высокие позиции во многих сферах IT.

Технология XDG App - тот же контейнер. Приложение, находящееся в нём, не привязано к какому-то конкретному дистрибутиву Linux, и может одинаково работать везде, начиная от Ubuntu и заканчивая Slackware. Основное назначение - распространение программ, которые отсутствуют в штатных репозиториях дистрибутивов. При чём это могут быть как свободные, так и проприетарные программы, или просто их более свежие версии. Одно изолированное окружение на все дистрибутивы.

Изолированное окружение формируется из двух компонентов: типового системного окружения (runtime), устанавливаемого через специальный репозиторий, и дополнительных зависимостей (bundle), связанных с приложением. В сумме runtime и bundle образуют начинку контейнера, при том, что runtime устанавливается отдельно и привязывается сразу к нескольким контейнерам, что позволяет обойтись без дублирования общих для контейнеров системных файлов. В одной системе может быть установлено несколько разных таких runtime (GNOME, KDE) или несколько версий одного runtime (GNOME 3.16, GNOME 3.18), в зависимости от требований используемых программ. Контейнер с приложением в качестве зависимости использует привязку только к определённому runtime, без учета отдельных пакетов, из которых состоит runtime. Все недостающие элементы упаковываются непосредственно вместе с приложением. При формировании контейнера содержимое runtime монтируется как раздел /usr, а bundle монтируется в директорию /self.

В качестве среды разработки (SDK) для создания таких контейнеров, создан GNOME SDK runtime, а также инструментарий xdg-app. GNOME SDK runtime выступает в роли аналога SDK для разработчиков контейнеров и включает помимо файлов, используемых для запуска программы, компоненты, требуемые для сборки приложения. Для формирования контейнера, запуска и управления его выполнением предоставляется специальная утилита xdg-app. Отдельно стоит отметить, что поставляемые в составе библиотеки, соответствуют стандартам FreeDesktop.

Начинка runtime и контейнеров приложений формируется с использованием технологии OSTree, при которой образ атомарно обновляется из Git-подобного хранилища, позволяющего применять методы версионного контроля к компонентам дистрибутива (например, можно быстро откатить систему к прошлому состоянию). Отдельная установка и обновление пакетов внутри рабочего окружения не поддерживается, система обновляется не на уровне отдельных компонентов, а целиком, атомарно меняя своё состояние. Предоставляются средства для инкрементального применения обновлений, избавляющие от необходимости полной замены образа при каждом обновлении. Формируемое изолированное окружение полностью независимо от используемого дистрибутива, не имеет доступа к файлам и процессам пользователя или основной системы, не может напрямую обращаться к оборудованию, за исключением вывода через DRI, и сетевой подсистеме. Вывод графики и организация ввода реализована при помощи протокола Wayland (X11 не поддерживается, ибо небезопасен, то есть на данный момент это действительно технология будущего). Для изоляции используются традиционные для Linux технологии контейнерной виртуализации, основанные на использовании cgroups, пространств имён (namespaces) и SELinux. Для вывода звука применяется PulseAudio. Таким образом, XDG App использует полностью родные Linux-фичи, не изобретая велосипед. Минус очевиден - невозможность портирования на другие платформы. Но оно надо?)

Для установки runtime достаточно выполнить "xdg-app install-runtime --user gnome-sdk org.gnome.Platform 3.16", а для загрузки приложения "xdg-app install-app --user test-apps org.gnome.gedit", предварительно подключив репозитории командой "xdg-app add-remote --user gnome-sdk http://sdk.gnome.org/repo/" и "xdg-app add-remote --user --no-gpg-verify test-apps https://people.gnome.org/~alexl/test-apps/repo/". Для запуска упакованной в контейнер программы можно использовать команду "xdg-app run org.gnome.gedit". Однако установка естественно будет удобнее через графический менеджер приложений, поэтому Гномовцы добавили поддержу XDG App в GNOME Software. И да, я забыл упомянуть главное - для установки не требуется права администратора (sudo)! Поставили - и запустили. Осталось дождаться полной поддержки в других графических окружениях. Но как говорится, лучше один раз увидеть, чем сто раз прочитать:


Update: разработчики объявили о переименовании xdg-app во Flatpack

1 комментарий:

  1. A Snap (snapcraft.io) не из этой же области? Как я понял их задача создать репозиторий не зависящий от конкретного дистрибутива и свой менеджер пакета для работы с ним.
    Какая технология snap или flatpack на Ваш взгляд более перспективная?

    ОтветитьУдалить