Hlavní navigace

Nové formáty balíčků Snap a Flatpak: co je spojuje a čím se liší?

27. 6. 2016
Doba čtení: 5 minut

Sdílet

Je to tu znovu. Nové formáty balíčků a opět Canonical vs Red Hat, Ubuntu vs Fedora. Tentokrát ale souboj nebude tak ostrý. Formáty se částečně liší a mohou vedle sebe koexistovat.

Klasické balíčky jako DEB nebo RPM s námi ještě nějaký čas pobudou, ale už brzy je značnou doplňovat, a do určité míry asi i nahrazovat, modernější formáty. Teď se hovoří hlavně o formátech Snap a Flatpak, mezi jejichž příznivci už to začíná vřít. A proč vůbec nové formáty potřebujeme? V následujících odstavcích popíšeme jejich výhody, odlišnosti a podíváme se na jejich budoucnost.

Snap je o něco starší projekt vyvíjený Canonicalem pro Ubuntu. První verze vyšla už koncem roku 2014 a ještě než se podpora objevila ve standardní verzi distribuce Ubuntu 16.04 LTS, používaly se Snapy ve variantě Snappy Ubuntu Core (IoT, cloud, atd.) a také v mobilní verzi systému Ubuntu Touch. Nedávno Canonical oznámil, že pracuje s vývojáři několika dalších distribucí na podpoře Snapů. Už se víceméně jen čeká, než software projde testováním.

Flatpak byl dlouho vyvíjen pod názvem xdg-app, současný název dostal až letos v květnu. Hlavním vývojářem je zaměstnanec Red Hatu Alexander Larsson, ale společnost vývoj nijak zvlášť nediriguje. Projekt už delší dobu podporuje GNOME. Nedávno vyšla finální verze, ale zatím je Flatpak dostupný jen ve Fedoře nebo ve velmi raných/experimentálních verzích distribucí.

Společné výhody

Nezávislost na závislostech. Linuxové distribuce se typicky potýkají s problémy provázanosti balíčků a jejich závislostmi na sobě. Pokud program potřebuje jinou verzi knihovny, než vaše distribuce obsahuje, je to problém. U Snapů i Flatpaku tento problém odpadá, protože lze do balíčku přibalit vše, co daný program potřebuje k běhu. V systému můžete mít mnoho variant/verzí toho samého programu. To by mohlo přilákat víc proprietárního softwaru, který má se závislostmi často problémy. Bude stačit připravit jeden balíček, ne deset pro různé distribuce jako nyní.

Bezpečnost díky sandboxingu. Nové formáty by měly zajistit větší bezpečnost, protože aplikace sandboxují. To znamená, že poměrně ostře omezují, kam mohou přistupovat, s čím interagovat atp. Snappy k tomu mj. používá AppArmor, v případě Ubuntu poměrně dost modifikovaný, což dělá trochu problém s integrací do dalších distribucí. Flatpak bude používat SELinux, ale zatím nebyl implementován.

Inkrementální aktualizace. Oba formáty podporují inkrementální neboli delta aktualizace. To znamená, že pokud chcete software aktualizovat, nemusíte stahovat celý balík znova, stačí stáhnout rozdílový soubor obsahující změny. Pozor, v novější verzi Snappy dostupné v Ubuntu 16.04 toto aktuálně nefunguje. Ale podporu inkrementálních aktualizací je v plánu brzy vrátit.

A nevýhody? Těch příliš není. Protože si s sebou software nosí závislosti, obvykle zabere víc místa, než při použití klasických balíčků jako DEB nebo RPM. Ale to v dnešní době nepředstavuje velký problém. Další nevýhodou je potenciální bezpečnostní riziko spočívající v tom, že autor balíku neopatchuje přibalenou knihovnu. Ideálním příkladem je chyba Heartbleed v OpenSSL, pro kterou správci distribucí během dne vydali opravu a ochránili tak celý systém i všechny aplikace používající OpenSSL. U obrazů s vlastními knihovnami se to musí řešit jednotlivě.

Hlavní rozdíly

Rozdíly mezi formáty bychom mohli shrnout asi takto: zatímco Snap sází hlavně na jednoduchost a obecnou použitelnost, Flatpak je specializovanější a zároveň komplexnější. Snap je vlastně statický obraz, který nemá problém běžet kdekoliv – dekstop, servery, cloud, IoT, routery (podporu chystá i OpenWrt), atd. Flatpak je navržen pro aplikace na desktopu. Už z toho vyplývá, že ani jeden formát není třeba zavrhovat.

Flatpak je někde na půl cesty mezi klasickými formáty balíčků a Snapy. Jednotlivé balíčky Flatpaku od sebe nejsou striktně odděleny. Ano, stejně jako v případě Snapů si s sebou program může vzít knihovny a konec. Stejně tak ale může využít sdílené knihovny distribuované také ve Flatpaku a tedy klidně v mnoha různých verzích. Obrazně řečeno: Uživatelská aplikace přijde a řekne: Tohle mám s sebou a ještě bych prosila to a to, co je v systému dostupné jako samostatný Flatpak. Při každém spuštění se to celé zabalí v sandboxu a jede se.

To s sebou samozřejmě nese částečnou závislost, není to tak přímočaré jako u Snapů. Ale výhody jsou zřejmé. Aplikace celkově zaberou méně místa a důležitá aktualizace jedné knihovny může ochránit víc aplikací. Pokud stále tápete, fungování Flatpaku velmi dobře ilustruje následující obrázek.

Další rozdíl je v tom, jak se řeší repozitáře. Flatpak standardně umožňuje přidání repozitářů třetích stran, prostřednictvím kterých lze aplikace snadno instalovat a aktualizovat. Snap je v tomto případě mnohem uzavřenější. Snappy (správce balíčků) v Ubuntu umožňuje používat pouze centrální repozitář od Canonicalu. Jiné balíčky je třeba instalovat ručně. S kritikou se setkal také fakt, že serverová část není open-source. Mark Shuttleworth k tomu v podstatě prohlásil, že na serverové části není nic světoborného – jen předává balíčky – a že tuto záležitost může každý řešit sám.

Je nutné upřesnit, že tady nejde o nějaké omezení formátu Snap. Kdokoliv může vyvinout software, který s externími repozitáři bude pracovat. Ale přijde mi škoda, že to (alespoň zatím) neudělal přímo Canonical. Času na to bylo dost. Nelze se pak moc divit kritice, že Canonical hraje jen na sebe. Vývoj Flatpaku se jeví jako podstatně otevřenější a transparentnější.

Snap a Flatpak jsou podobné, ale nestejné formáty

Vypadá to, že ani tentokrát se neshodneme na jednotném formátu a opět bude koexistovat několik formátů. Konkurence nakonec není špatná. Navíc i když Flatpak a Snap na první pohled vypadají velmi podobně, při hlubším zkoumání narazíte na několik rozdílů, které mění možnosti použití. Hlavní je, že se distribuce nemusí přiklánět na jednu stranu a celkem pohodlně mohou podporovat oba formáty. Jiný problém, než že to zabere trochu víc místa na disku, tu není. Osobně si myslím, že v současnosti je pro desktopové aplikace vhodnější Flatpak.

UX DAy - tip 2

Je možné, že řada aplikací, alespoň těch populárních, bude vycházet v obou formátech. Ubalit program do Snapu nebo Flatpaku není technicky ani časově náročné. Jak už jsme zmínili odpadá nutnost řešit závislosti v X verzích Y distribucí. Mimochodem, už delší dobu existuje podobný formát AppImage, ale příliš se nerozšířil a v budoucnu už se zřejmě nerozšíří. Oproti Snapu a Flatpaku má totiž tu nevýhodu, že neřeší sandboxování.

Také je důležité zmínit, že přestože se už Snap a Flatpak tváří jako hotový software, stále v nich probíhá a probíhat bude řada úprav. Ty se ale samozřejmě týkají spíš správců balíčků a implementace, než samotného formátu. V následujících měsících a letech přijdou další nástroje, ať už oficiální nebo neoficiální, které dál rozšíří možnosti správy a použití. Podobné je to s dokumentací, která je zatím velmi omezená a často, ať už jako uživatel nebo vývojář, narazíte na nesrovnalosti.

Který formát balíčků má větší budoucnost?

Byl pro vás článek přínosný?

Autor článku

Bývalý redaktor serveru Root.cz, dnes produktový manažer a konzultant se zaměřením na Bitcoin a kryptoměny.