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
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.
11. 5. 2015 at 12:57
A půjde ta věc zakázat? Uživatelské instalace aplikací se děsím…
11. 5. 2015 at 13:50
Uživatelské instalace to nijak natvrdo nevynucuje, takže nevidím důvod, proč by to nešlo v budoucnu zakázat. Myslím, že to bude něco, co má smysl zvláště u velkých nasazení, kde není záhodno, aby si uživatelé instalovali, co je napadne.
V této fázi to ale není věc, kterou bychom se zabývali, teď se buduje fukcionalita té samotné technologie.
11. 5. 2015 at 15:17
Skvělá věc. Na něco takového v Linuxu čekám už hodně douho… držím palce :).
17. 5. 2015 at 19:56
Přesně tak! Konečně se něco užitečného děje a je moc fajne, že se pořád vylepšuje a vymýšlí něco, co Linuxový desktop zas posune k uživateli blíže.