Od minulého roku vzniká v Red Hatu kontejnerová technologie zaměřená na desktopové aplikace, která v budoucnu výrazně ovlivní povahu distribuce softwaru nejen ve Fedoře. Pojďme se podívat na to, jak vypadá a co za výhody nabízí oproti tradičnímu způsobu distribuce softwaru v Linuxu – balíčkovacím systémům.

Možná si říkáte: zase nějaká nová kontejnerová technologie, proč nepoužít Docker? Protože stejně jako v případě Dockeru, ani zde se nevynalézá znovu kolo, ale jedná se víceméně jen o spojení technologií a přidání potřebných nástrojů. Rozdíl oproti Dockeru je v tom, že zaměřením jsou desktopové aplikace. Používají se jíž existující technologie: cgroups, namespaces, SELinux, kdbus a Wayland.

Cíl

Hlavním cílem je:

  • umožnit třetím stranám vytvářet a distribuovat aplikace, které fungují na různých linuxových distribucích,
  • spouštět aplikace v prostředí, které je co nejvíce izoluje od zbytku systému.

Dnešní linuxové distribuce jsou z pohledu distribuce softwaru nepřipravené na větší zájem tvůrců softwaru. Stále žijí v 90. letech, kdy se z omezené nabídky aplikací vybraly ty zajímavé a ty se určitých procesem dostaly do oficiálních repozitářů a považovaly se za důvěryhodné. Dnes je ale situace zcela odlišná. Softwaru je řádově více a balíčkování do repozitářů distribuce neškáluje. I distribuce s největší nabídkou softwaru dnes dokáží pokrýt jen malý zlomek softwaru, který je k dispozici.

Dalším problémem je bezpečnost. Unixový bezpečnostní model byl navržený před několika desítkami let. Tenkrát bylo hlavní úlohou ochránit systém před uživatelem. Dnes je ale čím dál palčivější jiná věc: ochrana uživatele před (škodlivým) softwarem. Linuxové distribuce to řeší docela složitým procesem, který musí podstoupit každá aplikace, než se dostane do oficiálních repozitářů. Jak jsem ale psal v předchozím odstavci, tento přístup není škálovatelný. A pokud se distribuce otevřou softwaru třetích stran, je bezpečnost o to důležitější. Situace, kdy aplikace má teoreticky přístup ke všem datům daného uživatele, není udržitelná.

V Red Hatu jsme začali pracovat na technologii, která se snaží tyto problémy řešit. Aplikace běží v kontejnerech, které jsou sandboxované, tedy izolované od zbytku systému. A to hned na několika úrovních: souborový systém (SELinux), procesy (namespaces), zdroje (cgroups), zobrazovací server (Wayland).

Runtime

Znamená to také, že vše, co aplikace potřebuje ke svému běhu, bude muset být v onon sandboxu. Aby nebylo potřeba všechno k aplikaci hloupě bundlovat, využívají se runtimy, což jsou jasně definovaná prostředí pro běh aplikace (např. GNOME 3.14, či KDE 5.3). Ta obsahují všechny obvyklé komponenty využívané aplikacemi. V případě GNOME to je třeba GTK+, glib a další. Při instalaci si aplikace řekne o potřebný runtime a pokud není v systému k dispozici, nainstaluje se z online repozitáře. Když se aplikace spouští, připojí se runtime do /usr v sandboxu v režimu pouze pro čtení.

SDK

S runtimy souvisí tzv. SDK, což jsou runtimy rozšířené o vývojářské části jako buildovací nástroje, hlavičkové soubory, kompilátory,… prostě vše, co potřebujete k sestavení aplikace pro daný runtime. Momentálně je k dispozici FreeDesktop a GNOME SDK, ale dokončujeme také Qt a KDE SDK.

Co chybí, je možné přibundlovat. Aplikace má také možnost exportovat soubory, které jsou potřeba v systému mimo sandbox (.desktop soubor, ikona,…).

xdg-app

Pro správu aplikací, runtimů a jejich repozitářů vznikl nástroj xdg-app. Ten umožňuje instalovat aplikace jak „celosystémově“, což vyžaduje práva superuživatele, tak pouze pro jednotlivého uživatele v rámci domovského adresáře. xdg-app je k dispozici pro F21, F22 a rawhide v repozitáři Copr. Mimochodem xdg-app používá OSTree, který dokáže runtimy ze stejného repozitáře deduplikovat, což opět ušetří nějaké místo.

Práci s xdg-app si můžeme ukázat na GNOME, které už má oficiální repozitář s SDK a runtimem. Repozitář přidáme příkazem (přepínač –user určuje, že se vše instaluje jen pod daným uživatelem):

xdg-app add-remote --user gnome-sdk http://sdk.gnome.org/repo/

Runtime posledního vydání GNOME nainstalujeme příkazem:

xdg-app install-runtime --user gnome-sdk org.gnome.Platform 3.16

GNOME zatím nemá oficiální repozitář aplikací. Pokud ale chcete vyzkoušet instalaci nějaké aplikace, můžete použít testovací repozitář Alexe Larssona, hlavního vývojáře xdg-app:

xdg-app add-remote --user --no-gpg-verify test-apps https://people.gnome.org/~alexl/test-apps/repo/

Můžete zkusit nainstalovat třeba aplikaci gedit:

xdg-app install-app --user test-apps org.gnome.gedit

Spustíte ji příkazem:

xdg-app run org.gnome.gedit

gedit-sandbox

gedit běžící v kontejneru

D-Bus API

Sandbox není momentálně vynucovaný, ale v budoucnu se uzavře a aplikace bude komunikovat se zbytkem systému přes D-Bus API a bude mít přístup jen k tomu, co jí uživatel povolí. Čeká se na kdbus, který se bohužel stále nedostal do hlavní větve kernelu, protože současná implementace D-Busu v userspace není dostatečně výkonná. Počítá se totiž s tím, že aplikace bude přes D-Bus přistupovat třeba ke streamu z webkamery nebo velkým multimediálním souborům.

Ono D-Bus API není zatím definované, ale Alex Larsson už začal pracovat na části pro přenos souborů s tím, že dokud nebude k dispozici kdbus, bude používat vlastní dbus proxy, i když s dopadem na výkonnost.

Budoucnost

Celé řešení je navrženo nezávisle na desktopovém prostředí a grafickém frameworku a mělo by bez problémů fungovat na všech moderních distribucích. Už nyní můžete spouštět aplikace sestavené na Fedoře v Arch Linuxu, který už xdg-app také nabízí. Do budoucna to výrazně usnadní práci třetím stranám, protože budou muset udělat pouze jeden instalační soubor a aplikaci budou sestavovat proti konkrétnímu SDK. Nebudou tedy řešit distribuce a jejich verze.

Nahradí tyto kontejnery balíčkovací systém? Ne tak docela. Počítá se s tím, že tyto systémy budou fungovat vedle sebe. Např. GNOME Software by měl do budoucna zvládat obě technologie a nabízet uživatelům aplikace z obou v jednom katalogu. Nejvhodnější je toto řešení pro aplikace třetích stran a těch, které mají jiný vývojový cyklus než prostředí/distribuce. Ty pak mohou vycházet nezávisle na distribuci a uživatele nebudou muset čekat na další vydání distribuce, ale dostanou novou verzi v momentě, kdy bude hotová. Tím se pomalu začne oddělovat distribuce a aktualizace aplikací od samotného systému, což je do budoucna asi nevyhnutelná věc.

Stránka projektu na wiki GNOME
xdg-app na GitHubu