Flatpak
Flatpak mag dan een universeel pakketbeheersysteem zijn, de mate waarin het door de vele verschillende distributies wordt ondersteund verschilt nogal. In Linux Mint vanaf versie 18.3 is Flatpak-ondersteuning volledig ingebouwd en kunnen de Flatpak-applicaties, net als de regulier verpakte applicaties, via Programmabeheer worden geïnstalleerd, bijgewerkt en verwijderd. Dat geldt ook voor Zorin, zij het dat daarin met het Gnome Software-beheerprogramma wordt gewerkt. Als voorbeelden geef ik verder Fedora, waarin alleen de Flathub-repository nog moet worden geïnstalleerd, MX Linux vanaf versie 18 waarin Flathub nog moet worden geactiveerd, en Manjaro waarin de ondersteuning nog moet worden geactiveerd. En zo zijn er nog verscheidene andere distributies waarin ondersteuning, al dan niet volledig geactiveerd, is ingebouwd. In Ubuntu en zijn officiële varianten, zoals Kubuntu, is standaard alleen Snap geïnstalleerd en wordt door Programmabeheer ondersteund. De webbrowser Firefox is daarin sinds kort zelfs opgenomen als snap en niet meer als gewoon distributiepakket. Wat in een 36-tal Linux-distributies, waaronder ook Ubuntu en Kubuntu, voor ondersteuning en activering van Flatpak moet worden gedaan, blijkt uit de instructies op de Flathub-website (flathub.org/nl/setup).
Flatpaks hebben een aantal belangrijke voordelen ten opzichte van de normale distributiespecifieke pakketten:
- Voor ontwikkelaars hebben flatpaks het grote voordeel dat ze hun applicatie maar één keer hoeven in te pakken en het pakket maar één keer hoeven te uploaden, naar Flathub. Flatpaks draaien immers op elke distributie waarin de Flatpak-hulpsoftware is geïnstalleerd. Dit was in feite het belangrijkste doel van de opzet van Flatpak.
- Flatpaks zijn om twee redenen veiliger dan de reguliere pakketten. Ten eerste behoeven ze niet door root te worden geïnstalleerd, maar kan dat door gewone gebruikers worden gedaan. De applicatie krijgt bij installatie dus geen beheerderspermissies.
- Ten tweede draaien de applicaties geïsoleerd van het reguliere systeem in een sandbox (zie verderop), waardoor ze alleen toegang hebben tot datgene wat ze nodig hebben en wat verder nog toegestaan wordt.
- Gebruikers kunnen applicaties installeren die niet door hun Linux-distributie worden geleverd, of nieuwere versies van applicaties waarvan hun Linux-distributie alleen een oudere versie levert.
- Geen problemen met afhankelijkheden. Als je een oude applicatie wilt installeren die een oude bibliotheek nodig heeft, kan dat in principe zonder andere applicaties of je systeem te hinderen.
Flatpaks hebben echter ook enkele nadelen, zij het dat deze m.i. van minder belang zijn:
- Het Flatpak-systeem is gescheiden van het reguliere systeem van de distributie, en dat betekent dat de basis- en hulpsoftware die de applicaties nodig hebben en kunnen delen (de zgn. runtimes, zie verderop) ook binnen het Flatpak-systeem moeten worden geïnstalleerd. Dat heeft tot gevolg dat gebruik van flatpaks tot extra ruimtegebruik leidt, hoewel dat per applicatie wel meevalt als voor meerdere applicaties steeds dezelfde runtimes worden gebruikt. Als er meerdere runtimes en daarvan meerdere versies nodig zijn kan het extra ruimtegebruik vrij hoog zijn. Zo blijkt mijn openSUSE-systeem, waarin de meeste applicaties door flatpaks zijn vervangen, 7 à 8 GB meer ruimte in te nemen dan het reguliere openSUSE-systeem. En die extra ruimte komt goed overeen met die van de runtimes.
- Flatpaks zijn er vrijwel alleen voor grafische programma's, niet voor tekstgeörienteerde programma's voor de opdrachtregel, zoals tools voor een server. Voor de meeste gewone gebruikers zal dit echter geen probleem zijn.
- Flatpaks volgen mogelijk niet je eigen thema voor het uiterlijk van het bureaublad. Of veel gebruikers dit een belangrijk nadeel vinden staat te bezien. Wel is het mogelijk om thema's vanuit Flathub te installeren en applicaties te dwingen zo'n thema te volgen.
Eerst komt nu een aantal basisbegrippen aan de orde, waardoor duidelijker zal worden hoe Flatpak werkt. Het gaat om runtimes met basis- en hulpsoftware, sandboxes voor een van het host-systeem geïsoleerde omgeving, poorten voor uitwisseling van data, enz., met het host-systeem, en remotes als opslagplaatsen van software (repositories). Het host (gastheer) systeem is het (Linux-) besturingssysteem waarin Flatpak draait.
Daarna gaan we in op het beheer en gebruik van Flatpak.
Runtimes
Vrijwel elke applicatie is afhankelijk van basis- en hulpsoftware, in het bijzonder bibliotheken. Bij Flatpak is deze software ondergebracht in zgn. ‘runtimes’. Elke applicatie is
Werking van Flatpak |
gebouwd op basis van een runtime, die in zijn afhankelijkheden voorziet en geïnstalleerd moet zijn om de applicatie te kunnen draaien. In dit verband zijn afhankelijkheden pakketten met bibliotheken en andere hulpsoftware, waarvan de applicatie in kwestie afhankelijk is. Er kunnen meerdere runtimes, en zelfs meerdere versies van een runtime, op een hostsysteem worden geïnstalleerd. Runtimes worden gedeeld tussen applicaties. Bij installatie van een applicatie zal Flatpak van de benodigde runtimes alleen de nog ontbrekende mee-installeren. Dat betekent dat de eerste installatie van een Flatpak-applicatie weliswaar meer ruimte zal vergen dan wanneer de applicatie op de standaard distributiespecifieke wijze zou worden geïnstalleerd, maar Flatpak-applicaties die daarna worden geïnstalleerd en dezelfde runtimes gebruiken hebben daardoor geen extra ruimte nodig.
De belangrijkste runtimes zijn die van Freedesktop, Gnome en KDE. De Freedesktop runtime levert essentiële bibliotheken en diensten zoals X11 en Wayland (het grafische systeem), GLib en Gtk (grafische bibliotheken), PulseAudio (geluidsserver) en D-Bus (voor communicatie tussen processen). Daarnaast zijn er uitbreidingen van deze runtimes, zoals vertalingen en codecs.
Het is mogelijk dat een applicatie basis- en hulpsoftware gebruikt die niet in zijn runtime is opgenomen. In dat geval kan deze software samen met de applicatie worden gebundeld. Dat geeft ontwikkelaars van applicaties flexibiliteit met betrekking tot de basis- en hulpsoftware die zij gebruiken. Zo kunnen bijvoorbeeld ook versies van deze software worden gebundeld die van de runtime afwijken.
Sandboxes
Elke applicatie wordt gedraaid in een van het systeem geïsoleerde omgeving, die de ‘sandbox’ wordt genoemd. Elke sandbox bevat een applicatie en zijn runtime. Standaard heeft een applicatie alleen toegang tot zijn sandbox. De maker van een applicatie zorgt er voor dat hij de nodige permissies heeft voor toegang tot hulpbronnen als geluid, netwerk en bestanden. De gebruiker kan permissies uitbreiden of inkrimpen. Met de applicatie Flatseal is dat heel gemakkelijk. Flatseal wordt aangeboden op Flathub en kan worden geïnstalleerd met de opdracht
flatpak install flathub com.github.tchx84.Flatseal
maar ook vanuit Programmabeheer mits Flatpak-ondersteuning is ingebouwd.
Sommige elementen binnen een sandbox dienen toegankelijk te zijn voor het hostsysteem. Deze worden ‘exports’ genoemd omdat ze als het ware vanuit de sandbox worden geëxporteerd. Voorbeelden zijn het .desktop bestand en het pictogram van de applicatie. Een bestand met de extensie .desktop bevat alle gegevens die nodig zijn om de applicatie in het juiste menu te plaatsen, en uit te voeren. Zie bijvoorbeeld de .desktop-bestanden in de map /usr/share/applications
.
Poorten
Via zgn. poorten (portals) kunnen applicaties vanuit de sandbox een wisselwerking aangaan met het host-systeem. Zo krijgt de applicatie veilig toegang tot benodigde bestanden, gegevens en diensten zonder dat het nodig is de sandbox-permissies uit te breiden. Dat maakt het bijvoorbeeld mogelijk om bestanden te openen via een bestandskeuzedialoog, of te printen.
Naamgeving
Namen van flatpaks, zowel applicaties als runtimes, hebben dezelfde structuur als de domeinnaam van de ontwikkelaar op het internet, maar dan omgekeerd. Ze heten ‘Application ID’s. Zo’n ID begint dus met het hoogste domeinniveau (zoals ‘nl’, ‘com’ of ‘org’), daarna op niveau twee het eigenlijke domein (zoals ‘hcc’), en vervolgens op niveau drie de eigenlijke naam van de applicatie of runtime, eventueel gevolgd door nadere aanduidingen. Al deze niveaus worden van elkaar gescheiden door een punt. De naam van de applicatie of runtime begint meestal met een hoofdletter, maar verwarrend genoeg niet altijd.
Zo heet de browser Firefox org.mozilla.firefox, de browser Edge com.microsoft.Edge, de browser Chrome com.google.Chrome, en het fotobeheerprogramma Digikam org.kde.digikam.
De runtime voor KDE-applicaties heet org.kde.Platform, en die van GNOME org.gnome.Platform. Een derde belangrijke runtime is org.freedesktop.Platform voor opensource grafische applicaties in het algemeen. Runtimes kunnen extensies hebben, die op de vierde en hogere niveaus van de naam worden aangegeven, ook vaak beginnend met een hoofdletter. Zo is er in de meeste gevallen een extensie genaamd Locale met vertalingen van de runtime. Een voorbeeld is org.kde.Platform.Locale.
Remotes
Flatpak-applicaties en runtimes worden verspreid via magazijnen (repositories) op het internet. Flatpak noemt ze ‘remote repositories’ of kortweg ‘remotes’, met de betekenis van ‘opslagplaatsen op afstand’. De standaard algemene remote is Flathub, maar het is mogelijk toegang tot meerdere remotes te configureren. Zo hebben de desktopomgevingen GNOME en KDE voor hun applicaties eigen remotes. Eenmaal geconfigureerd kan de inhoud van een remote worden geïnspecteerd en doorzocht, en kunnen er applicaties en runtimes uit worden geïnstalleerd.
In Flathub, maar mogelijk ook in andere remotes, zijn in veel gevallen ook oudere versies van applicaties beschikbaar, maar installatie daarvan is minder eenvoudig en gaat via enkele bijzondere opdrachten in de terminal. Zie hiervoor dit artikel op de website www.pragmaticlinux.com.
Wanneer een applicatie of runtime wordt bijgewerkt worden van de nieuwe versie alleen de verschillen met de geïnstalleerde versie gedownload en vervolgens toegepast. Dat maakt het proces van bijwerken heel efficiënt.
Flathub
Flathub is de centrale algemene opslagplaats van Flatpak-software. Ontwikkelaars kunnen hun softwarepakketten hier uploaden, en gebruikers kunnen ze downloaden en installeren. Na installatie van het flatpak-beheerprogramma moet toegang tot Flathub worden geactiveerd door het toe te voegen aan de lijst van toegankelijke remotes. Dat gaat met de volgende opdracht:
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
Het bestand flathub.flatpakrepo
bevat een aantal relevante gegevens over de remote flathub, zoals de naam, de URL, de homepage en de GPG-sleutel.
Op de website van Flathub (flathub.org) heeft een deel van de aangeboden applicaties (ca 30%) een vinkje achter zijn naam staan. Dat houdt in dat de applicatie door de oorspronkelijke ontwikkelaar op Flathub is geplaatst, of door een derde die door die ontwikkelaar is goedgekeurd. De identiteit van de ontwikkelaar is door Flathub geverifieerd. Dat geeft meer zekerheid met betrekking tot de herkomst van de applicatie.
Andere remotes
De desktopomgevingen GNOME en KDE hebben eigen remotes voor de allernieuwste ontwikkelversies van hun applicaties. Ze kunnen worden toegevoegd met resp. de opdrachten:
flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo
flatpak remote-add --if-not-exists kdeapps https://distribute.kde.org/kdeapps.flatpakrepo
Deze remotes hebben niet zo'n fraaie grafische interface als Flathub. Een lijst van de door hen aangeboden applicaties wordt verkregen met de opdracht
flatpak remote-ls --app {naam van remote}
en natuurlijk ook in het programmabeheer als Flatpak-ondersteuning is ingebouwd.
Let wel dat het kan gaan om ontwikkelversies die mogelijk nog niet stabiel zijn. De reguliere stabiele versies zijn te vinden op Flathub. De reguliere- en ontwikkelversie van een applicatie kunnen zonder probleem naast elkaar worden geïnstalleerd. Daarnaast kan ook de door de Linux-distributie geleverde versie van de applicatie nog zijn geïnstalleerd.
Beheer en gebruik van flatpaks
Flatpak-ondersteuning in programmabeheer
In Linux Mint is ondersteuning voor Flatpak ingebouwd. Dat houdt onder meer in dat het beheerprogramma flatpak is geïnstalleerd en dat Programmabeheer Flatpak ondersteunt. In Programmabeheer (de eigenlijke naam is mintinstall) kun je kiezen voor de categorie Flatpak, waarmee je heel gemakkelijk een grafisch overzicht van alle Flatpak-applicaties krijgt. En de Flatpak-applicaties maken natuurlijk ook deel uit van de overige functionele categorieën. Flathub is de enige remote die in Linux Mint is geactiveerd.
In de programmabeheer-applicaties Ontdekken van de desktopomgeving KDE en Gnome Software van dito Gnome kan Flatpak-ondersteuning worden verkregen door de installatie van een plug-in, nl. plasma-discover-backend-flatpak of discover-backend-flatpak (afhankelijk van de versie) in KDE en gnome-software-plugin-flatpak in Gnome. Het is overigens niet gezegd dat dit in elke Linux-distributie met KDE of Gnome werkt, omdat hun programmabeheerapplicatie soms vervangen wordt door de eigen applicatie van de distributie.
Installatie van een applicatie
Als programmabeheer Flatpak ondersteunt kan een Flatpak-applicatie vanuit programmabeheer worden geïnstalleerd, net zoals een door de distributie geleverde applicatie. Anders kan een applicatie ook vanaf de opdrachtregel in een terminal worden geïnstalleerd, en wel zo:
flatpak install [naam van de remote] {naam van de applicatie}
Het is niet nodig om ook de naam van de remote op te geven. Zonder die naam zoekt flatpak zelf wel uit waar de gewenste applicatie kan worden gevonden. Daarbij moet wel de volledige naam van de applicatie (ofwel de ‘Application-ID’) worden gegeven, dus met inbegrip van het domein van de ontwikkelaar. Om erachter te komen wat de Application-ID van een gewenste applicatie is kun je naar tekst zoeken die relevant is voor de applicatie, bijvoorbeeld zijn zuivere naam, zonder het domein:
flatpak search {tekst}
Flatpak toont dan alle gevonden applicaties met de Application-ID, en verder onder meer beschrijving, versie en remote. Een andere manier om er achter te komen is om een lijst van alle beschikbare applicaties op te vragen, en daarin de relevante eruit te lichten:
flatpak remote-ls | grep {tekst}
Dat geeft in principe dezelfde resultaten als het search-commando, zij het zonder beschrijving.
Je kunt de applicatie ook opzoeken op de website van Flathub (mits hij daar beschikbaar is). Eenmaal gevonden zie je op de pagina van de applicatie een blauwe knop ‘Installeren’. Rechts naast die knop zie je een pijltje naar beneden. Als je daarop klikt toont Flathub je welke flatpak-opdracht je moet geven om de applicatie te installeren en welke opdracht om de applicatie na installatie te draaien. Zie bijgaande afbeelding. [AFBEELDING: Handmatige_installatie_Flathub.png].
Installatie vanuit Flathub
Je zou ook de blauwe knop ‘Installeren’ kunnen gebruiken om de applicatie te installeren, maar dat heeft wat voeten in de aarde. Onder die knop zit het bestand [application id].flatpakref, bijvoorbeeld org.gimp.GIMP.flatpakref. Zo’n flatpakref-bestand is een tekstbestand dat de nodige informatie bevat om de applicatie te kunnen downloaden en vervolgens te installeren. Internetbrowsers geven altijd de mogelijkheid het bestand te downloaden en ergens op te slaan. Daarna kan de installatie in de downloadmap vanaf de opdrachtregel worden uitgevoerd, bijvoorbeeld:
flatpak install org.gimp.GIMP.flatpakref
Uit veiligheidsoverwegingen geven internetbrowsers veelal niet de keuze tussen het openen en het opslaan van een bestand, maar bieden ze alleen opslaan als mogelijkheid. In Firefox is dat standaard ook zo, maar Firefox biedt de mogelijkheid om dat te veranderen. Om ook voor ‘Openen’ te kunnen kiezen moet je in ‘Instellingen’ onder ‘Toepassingen’ kiezen voor ‘Vragen of bestanden geopend of opgeslagen moeten worden’. In Linux Mint kun je een flatpakref-bestand dan Openen met ‘Software Manager’ en in een Gnome-omgeving met ’software-installatie’. Wat er dan gebeurt is dat programmabeheer wordt geopend op de pagina van de te installeren Flatpak-applicatie, van waaruit de applicatie uiteindelijk kan worden geïnstalleerd. Installatie via een omweg dus. In een KDE-omgeving zou hetzelfde moeten kunnen, maar dat is me niet gelukt.
Samenvatting installatie
De gemakkelijkste manier om een Flatpak-applicatie te installeren is door dat te doen in programmabeheer, net als alle andere software. Via de browser direct uit Flathub installeren is eigenlijk een omweg via programmabeheer of via de opdrachtregel in een terminal. Niet aan te raden dus. Installatie via de opdrachtregel is snel en efficiënt, maar dat is voor de liefhebber.
Bijwerken en verwijderen
Als programmabeheer Flatpak ondersteunt, loopt de update van flatpaks gewoon mee met de update van distributiepakketten. Anders kan het ook heel eenvoudig via de opdrachtregel:
flatpak update [namen applicaties of runtimes]
Als geen namen van applicaties of runtimes worden genoemd worden alle applicaties en runtimes bijgewerkt.
Hetzelfde geldt voor verwijderen: dat kan via programmabeheer als dat Flatpak ondersteunt, en via de opdrachtregel:
flatpak uninstall {naam van applicatie}
Uitvoeren van een applicatie
Bij installatie van een applicatie wordt hij in het menu opgenomen. Van daaruit kan hij worden gestart en uitgevoerd. Het kan echter ook vanaf de opdrachtregel:
flatpak run {naam van applicatie} &
waarin de & er staat om de draaiende applicatie los te maken van de terminal, zodat de terminal niet wacht op het afsluiten van de applicatie.
Bijvoorbeeld:
flatpak run org.gimp.GIMP &
Het beheerprogramma 'flatpak'
In het voorgaande hebben we al gezien hoe je remotes toevoegt met het beheerprogramma 'flatpak', maar er kan nog veel meer mee. Geef maar eens de opdracht
flatpak --help
Flatpak heeft heel wat opdrachten met betrekking tot applicaties, bestandstoegang, permissies en remotes. Als je voor --help
de naam van een opdracht geeft, krijg je meer help-informatie over die opdracht, bijvoorbeeld
flatpak install --help
Heel nuttige opdrachten die hierboven nog niet zijn genoemd zijn:
flatpak list |
: | Lijst van geïnstalleerde applicaties en/of runtimes |
flatpak info |
: | Informatie over een geïnstalleerde applicatie of runtime |
flatpak remotes |
: | Lijst van alle geconfigureerde remotes |
flatpak remote-ls |
: | Lijst van de inhoud (applicaties en runtimes) van een geconfigureerde remote |
flatpak remote-info |
: | Informatie over een remote applicatie of runtime |
Tot besluit
Lange tijd was het voor aanbieders van software lastig en tijdrovend om ook voor Linux software te leveren. Debet daaraan waren de specifieke pakketbeheersystemen, die - hoe efficiënt ze verder ook zijn - ertoe leidden dat voor heel wat verschillende Linux-distributies en zelfs van de opeenvolgende versies daarvan een pakket van de software zou moeten worden gemaakt. Een gevolg daarvan is ook dat nieuwere versies van software vaak alleen beschikbaar komen in nieuwere versies van de Linux-distributie.
Daarnaast zijn er mogelijk oudere versies van software die trager of zelfs niet verder wordt ontwikkeld, maar nog wel van nut zijn. Zulke software zal vaak oudere bibliotheken nodig hebben, die de Linux-distributie niet meer levert en er ook niet gemakkelijk in zijn te installeren.
Universele pakketbeheersystemen beogen die problemen op te lossen. En daarvan lijkt Flatpak de geprefereerde wijze van verspreiding van Linux-software te worden. Steeds meer Linux-distributies ondersteunen Flatpak al, en hetzelfde geldt voor de desktopomgevingen KDE en Gnome.
Probeer Flatpak maar eens. Het kan geen enkel kwaad om flatpaks naast de gewone door de distrbutie geleverde applicaties te gebruiken.