Wat is een package manager?

Een package manager is software die het complexe proces van installeren en updaten van een applicatie begeleid. Tevens zal, indien gewenst, de package manager een applicatie op een gestructureerde manier verwijderen van het systeem.
Een packagemanager is software die zorgt dat met één druk op de knop, of één commando, de door jouw gewenste applicatie installeert, up to date houdt en indien gewenst weer van het systeem verwijderd wordt.
Een belangrijke taak van de packagemanager is te zorgen dat de installatie of verwijderen van een applicaite geen invloed heeft op andere reeds geïnstalleerde applicaties. Anders gezegd, hij zorgt er voor dat na installatie/update/verwijdering van een applicatie alle andere applicaties goed blijven werken.
Er bestaan verschillende implementaties van de packagemanager zoals apt, pacman, rpm maar vanuit het gebruikersperspectief zijn ze functioneel aan elkaar gelijk.
Naast voornoemde versies bestaan er ook packagemanagers-gelijkende systemen met namen als flatpak, snap en appimage. Ook die kunnen een applicatie voor je installeren maar hun werking is fundamenteel anders, ieder met hun voor- en nadelen.
In de Linuxwereld is het installeren, onderhouden en verwijderen van software gestandaardiseerd. Het is de taak van een package manager om het proces van installeren van software "te begeleiden", waardoor de gebruiker met één druk op de knop software kan laten instaleren op zijn computer, maar ook op de hoogte gesteld wordt van updates en deze naar wens kan laten installeren.
Ter illustratie, Windows heeft niet zo'n systeem (het Windows besturingssysteem wordt wel geüpdatet maar dit geldt niet voor de applicaties). De manier hoe applicaties onder Windows geïnstalleerd worden is niet echt gestandaardiseerd, in het up-to-date houden van applicaties is al helemaal niet voorzien, je moet zelf bijhouden of er updates zijn en dat moet je zelf die update uitvoeren. Het verwijderen van software gaat (doorgaans) wel op een gestandaardiseerde manier. Daarnaast kan het onder Windows gebeuren dat na de installatie van een nieuwe applicatie een andere applicatie ineens niet meer (goed) werkt.
Het installeren van software lijkt heel simpel (even een paar bestanden in een bepaalde directory plaatsen) maar het is soms een uiterst complex proces en er komt veel meer bij kijken dan het simpelweg kopieren van bestanden in een bepaalde directory.
Die complexiteit komt omdat applicaties meestal gebruik maken van softwarebibliotheken (software libraries). Die libraries bieden bepaalde functionaliteiten waar de programmeur dankbaar gebruik van maakt. Een simpel voorbeeld: als een bepaald grafisch programma (in een game bijvoorbeeld) een schaduw moet bepalen voor een object dan kan de programmeur er voor kiezen om zelf software te schrijven die een schaduw van een object berekent. Maar die software schrijven kost veel tijd.
Vaak kiest men er voor om voor standaard taken gebruik te maken van een ander programma, die men een library noemt (in Windows een DLL, een Dynamic Link Library), waar reeds die functionaliteit (schaduw berekenen in dit geval) in geprogrammeerd zit. Het voordeel is dat je zelf die software niet hoeft te schrijven waardoor de ontwikkeling van een applicatie veel sneller gaat. Daarnaast is die software in een library veel stabieler, de meeste fouten zijn er inmiddels wel uit.
In de praktijk maken de meeste applicaties gebruik van één, meestal meerdere libraries. Het is dan ook heel voor de hand liggend dat op jouw computer één bepaalde library door meerdere applicatie's gebruikt wordt.
Die sofwarelibraries kennen echter ook een ontwikkeling, zo worden nieuwe functionaliteiten toegevoegd, bestaande functionaliteiten geöptimaliseerd en soms uitgebreid of soms zelfs aangepast. Ook worden soms oude functionaliteiten verwijderd omdat er vernieuwde verbeterde functionaliteiten voor teruggekomen zijn en na een overgangsperiode haalt men die oude functionaliteiten weg.
Software die gebruik maakt van libraries stellen daarom eisen aan de versie van die libraries. De programmeur heeft de applicatie getest met een bepaalde versie van de library (of libraries) en vereist daarom bepaalde versies van libraries om de goede werking te garanderen. Maar die libraries worden meestal door meerdere softwarepaketten gebruikt en het ene softwarepaket kan versie X eisen van een library, terwijl het andere softwarepaket juist versie Y vereist. Nou kan het zijn dat de appliactie die versie X vereist ook met versie Y werkt (of andersom) maar dat is niet altijd het geval.
Als een nieuwe applicatie op je computer gëinstalleerd wordt moet dus een controle uitgevoerd worden of de benodigde libraries met een bepaalde versie reeds beschikbaar zijn op je systeem, zoniet, dan moeten die alsnog op je systeem gekopieerd worden. Maar nu komt het, mocht een bepaalde library reeds op je systeem staan (in een iets verouderde versie) dan wordt deze vervangen door de nieuwere versie. Er kan namelijk maar één versie van een bepaalde library op je systeem staan.
Het zou dan kunnen gebeuren dat een applicatie waar je reeds lang gebruik van maakt en tot op dat moment goed werkte, door het instaleren van nieuwe applicatie, die een nieuwere versie van een library vereiste, er voor zorgt dat de bestaande software ineens niet meer goed werkt.
Het is één van de taken van een package manager om al deze afhankelijkheden uit te zoeken en te controleren of een update van een bepaalde library niet lijdt tot disfuctioneren van bestaande software. In eerste instantie zal gezocht worden naar een oplossing maar mocht die er niet zijn, dan stopt het installatieproces en meldt de gebruiker dat vanwege afhankelijkheden het niet mogelijk is om de gewenste software te installeren (dat gebeurd overigens maar zelden).
Daarnaast schreven we al dat de package manager ook zorgt voor het automatisch beschikbaar stellen van updates (je moet wel een voorgestelde update goedkeuren voordat het geïnstalleerd wordt). Dit is alleen maar mogelijk doordat alle applicaties die je wil gebruiken op een centraal punt ergens op het internet staan (noem het een app-store), inclusief de (complexe) installatie software en controle op updates. Die centrale plaats bestaat bij Windows niet. Wel bij Linux en ook bij MacOs en Android (Android is feitelijk een Linux variant).
Ook bij package managers is meerdere malen sprake geweest van een fork of heeft men het totaal anders aangepakt dan de reeds bestaande package manager.
Zo bestaan er nu een aantal verschillende package managers in de Linux wereld. Een specifieke packagemanager is gekoppeld aan een bepaalde Linux distributie. Zo maken Debian en de varianten daarvan zoals Ubuntu en Mint gebruik van "apt", dat staat voor Advanced Packaging Tool. RHEL (Red Hat Enterprise Linux) en varianten daarvan maken gebruik van "rpm" (de oorspronkelijk betekenis van die afkorting is niet meer relevant).
Wanneer je software op je computer onder Linux wil installeren dan start je een stuk software noem het "de app-store" en in die appstore kan je door het klikken op een item zien wat die software doet, vaak ook ervaringen van andere lezen, en besluiten om de software te installeren.
Mocht je de software die je zoekt niet in jouw app-store te vinden zijn, dan bestaat meestal de mogelijkheid om op de website van de maker de software te downloaden en te laten instaleren. Dan zorgt die softewaremaker voor een eigen packagemanger en dat is wat een PPA genoemd wordt.
Overigens, de hierboven beschreven complexiteit van afhankelijkheden is door bepaalde "package managers-gelijkende software" opgelost door applicaties in eigen geïsoleerde containers (zo je wilt: sandbox) te laten draaien met hun eigen libraries waardoor op één systeem toch van een library meerdere versies geïnstalleerd zijn. Helaas heeft iedere medaille ook een keerzijde. Namen van dit soort packagemanagers zijn Flatpak en SNAP.