Dit artikel somt de belangrijkste verschillen op tussen deze drie verpakkingsformaten vanuit het perspectief van de eindgebruiker. Verschillen in verpakkingsarchitectuur en verpakkingsgemak vanuit het oogpunt van ontwikkelaars worden hier niet behandeld.
De onderstaande tabel geeft een overzicht van de belangrijkste verschillen tussen de bestandsindelingen Snap, Flatpak en AppImage. De meeste spreken voor zich, andere punten zijn uitgelegd onder de vergelijkingstabel.
Snap | Flatpak | AppImage | |
Android Like Permission Controls schakelt (GUI en CLI) | Ja | Ja | Nee |
Ondersteuning voor sandboxen | Ja | Ja | Ja |
Sandboxen Verplicht | Ja | Ja | Nee |
Ondersteuning voor native thema's | Ja (met kanttekeningen) | Ja (met kanttekeningen) | Ja (met kanttekeningen) |
Ondersteuning voor gebundelde bibliotheken | Ja | Ja | Ja |
App-draagbaarheid | Ja (met kanttekeningen) | Ja (met kanttekeningen) | Ja |
Volledig opgenomen ondersteuning voor één uitvoerbaar bestand (vergelijkbaar met .exe-bestanden in Windows) | Nee | Nee | Ja |
Online App Store | Ja | Ja | Ja |
Plug-ins voor Desktop App Store-software | Ja | Ja | Nee |
Ondersteuning voor parallelle apps met meerdere versies | Ja | Ja | Ja |
Automatische updates | Ja | Ja | Ja (met kanttekeningen) |
Chrome OS-ondersteuning (via Crostini-containers) | Ja | Ja | Ja |
App-grootte | Varieert maar hoger dan AppImage | Varieert maar hoger dan AppImage | Laagste |
Aantal apps beschikbaar in de App Store | hoogste | laagste | Ergens tussenin |
Machtigingscontroles voor gebruikers
Snap biedt zowel grafische als opdrachtregelinterfaces voor door de gebruiker gecontroleerde machtigingen. U kunt de vooraf geïnstalleerde app "Ubuntu Software" gebruiken om de machtigingen van een app in een handomdraai te beheren.
Voer de onderstaande opdracht uit om machtigingen van een snap-app te zien met behulp van de opdrachtregelinterface:
$ klikverbindingen chroomVervang "chromium" door de naam van uw snap-app.
Voer de onderstaande opdracht uit om een lijst met alle geïnstalleerde snap-apps te zien:
$ snap lijstGebruik de onderstaande opdracht om cameratoestemming te verlenen voor chromium snap:
$ snap verbinding chroom:cameraVoer de onderstaande opdracht uit om de cameratoestemming in te trekken:
$ snap loskoppelen chroom:cameraPassende opdrachten voor toestemmingsbeheer zijn te vinden in de kolom "Plug" (getoond in de bovenstaande schermafbeelding).
Flatpak biedt ook een interface voor het verlenen en intrekken van machtigingen. U kunt de GNOME Software-app gebruiken (vereist GNOME 3.32.x) om machtigingen te beheren met behulp van een grafische methode. Voer de onderstaande opdracht uit om de machtigingen van een flatpak-app te zien:
$ flatpak info --show-permissions org.kde.Platform
Vervang "org".kde.Platform" met de naam van uw Flatpak-app.
Voer de onderstaande opdracht uit om een lijst te bekijken van alle flatpak-apps die op uw systeem zijn geïnstalleerd:
$ flatpak lijstOm de machtigingen van een flatpak-app te wijzigen, moet u de waarden van variabelen wijzigen die in de bovenstaande schermafbeelding worden getoond. De onderstaande opdracht maakt bijvoorbeeld het volledige bestandssysteem beschikbaar voor een flappak-app:
$ sudo flatpak overschrijven org.kde.Platform --bestandssysteem=hostAppImage ondersteunt op dit moment geen gedetailleerde machtigingsregelingen, maar ontwikkelaars hebben gesuggereerd dat machtigingsregelingen in Android-stijl in de toekomst kunnen worden geïmplementeerd.
Sandboxen
Snap, Flatpak en AppImage ondersteunen kant-en-klare sandbox-app-omgevingen. Een sandbox is een omgeving (of container/bestandssysteem/archief) die volledig geïsoleerd en afzijdig is van het hostsysteem. Elke interactie met het hostsysteem wordt gedaan met behulp van beperkte API- en toestemmingscontroles. Sommige van deze machtigingen vereisen expliciet opt-in door gebruikers of kunnen volledig worden uitgeschakeld door eindgebruikers. Een sandbox-app is veiliger dan elke andere app die volledige toegang heeft tot het hostsysteem. Alle Android-apps draaien in een sandbox en deze drie verpakkingsformaten werken op hetzelfde idee.
Ondersteuning voor native thema's
Alle drie de verpakkingsindelingen ondersteunen de native look en feel voor GTK- en Qt-apps, zij het met enkele beperkingen. Snap en Flatpak vereisen bijvoorbeeld dat systeemthema's in hun respectievelijke formaten worden verpakt. Als u thema's en pictogrammenpakketten van derden gebruikt, krijgt u mogelijk niet de juiste thema-, cursor- en app-pictogrammen. De integratie is in de loop van de tijd verbeterd, maar ze schieten enigszins tekort in vergelijking met apps die zijn geïnstalleerd vanuit de officiële pakketbeheerder van een distributie.
App-draagbaarheid
Een AppImage-app is een enkel uitvoerbaar bestand (vergelijkbaar met Windows' .exe-bestanden). U kunt het eenvoudig delen tussen systemen of uploaden naar de cloud. Snap- en Flatpak-apps kunnen draagbaar worden gemaakt door de app zelf op te nemen, evenals onderliggende opslagplaatsen waarvan de app afhankelijk is. Het proces is echter niet zo eenvoudig als AppImage en vereist het gebruik van meerdere opdrachten om dezelfde resultaten te bereiken.
Automatische updates
Snap- en Flatpak-apps worden geïnstalleerd vanuit gecentraliseerde applicatierepository's en apps kunnen automatisch worden bijgewerkt zonder tussenkomst van de gebruiker. AppImage mist een robuust automatisch updatemechanisme. Gebruikers moeten handmatig het nieuwe AppImage-binaire bestand downloaden en het bestaande vervangen om updates te installeren. AppImage-app-beheerders hebben soms hun eigen updatemechanisme dat periodiek de beschikbaarheid van updates op hun servers controleert of tussenkomst van de gebruiker vereist. Onlangs hebben AppImage-ontwikkelaars een tool geleverd om bestaande binaire bestanden bij te werken door middel van delta-updates. Het vereist echter nog steeds het downloaden van de updatetool en handmatig gebruiken met een bestaand AppImage-binair bestand. Er is nog geen handsfree updatemechanisme beschikbaar voor AppImage.
App-grootte
AppImage heeft de laagste voetafdruk van de app-grootte, waarschijnlijk omdat het binaire bestanden in gecomprimeerd formaat aanbiedt. De grootte van Snap- en Flatpak-apps varieert sterk van app tot app en het is moeilijk vast te stellen welke een kleinere installatiegrootte biedt. Ter referentie, Inkscape AppImage was op het moment van schrijven van dit artikel ongeveer 98 MB, Snap was ongeveer 183 MB en Flatpak was ongeveer 109 MB.
Conclusie
Universele app-pakketten zijn een win-winsituatie voor zowel ontwikkelaars als eindgebruikers. Deze verpakkingsformaten zorgen voor een veel snellere levering van veilige apps. Ze openen ook deuren voor ontwikkelaars die Linux uit de weg gaan vanwege verschillende verpakkingsstandaarden die in verschillende distributies worden gebruikt. Er zijn enkele problemen die moeten worden opgelost in deze drie verpakkingsformaten. Ze worden echter allemaal actief ontwikkeld en deze problemen zullen in de loop van de tijd worden opgelost. Universele cross-distributiepakketten zijn de toekomst en de acceptatie ervan zal toenemen. Langzaam maar gestaag kunnen distributies in de toekomst naar Snap-, Flatpak- of AppImage-builds worden verplaatst, met uitzondering van kernbibliotheken en essentiële pakketten die nodig zijn om het besturingssysteem te laten werken.