Onderzoeker tackelt softwareinstallaties
Bij Microsoft’s besturingssysteem Windows zit het probleem in de registry. "Die wordt vaak verkeerd gebruikt. En daardoor kun je bijvoorbeeld niet twee versies van een programma naast elkaar zetten." Het is juist die mogelijkheid die Nix interessant maakt voor onder meer testers en beheerders. Dolstra laat in zijn werkkamer in Utrecht zien hoe makkelijk het is om wijzigingen aan te brengen in de configuratie van bijvoorbeeld webserver Apache. Hij verandert in een tekstbestand een poort-nummer en past daarnaast voor de te starten website wat tekst aan om de verschillen te illustreren, start de nieuwe versie van Apache en toont in een browser hoe de twee instanties van de webserver draaien. Rollbacks Doe dat maar eens met Windows. De meeste software voor het Windows-platform wordt volgens Dolstra nog steeds opgeslagen in aparte directories zoals C:\Program Files\Toepassing. Een upgrade overschrijft daarbij de oude versie. Wil een gebruiker juist meerdere versies van een applicatie naast elkaar, of atomaire upgrades, of rollbacks, dan moet de programmeur dat vooraf geregeld hebben, vertelt Dolstra. "Bij Nix gaat het automatisch goed." De zogenoemde Global Assembly Cache, een centraal onderdeel van.Net, lost weliswaar een deel van de installatie- en de beheerproblemen van het Windows-platform op, aldus Dolstra. De.Net-cache kijkt echter alleen naar de componenten geschreven in diezelfde taal. Nix gaat veel verder. Het systeem van Dolstra doorstaat proeven met mengsels van meerdere soorten software, waaronder Java, Mono (de Linux-variant van.Net) en scripttalen Perl en Python. Nix houdt het overzicht over alle bouwstenen. "Dat is een groot voordeel voor alle softwaresystemen die zijn geschreven in meerdere talen. En dat zijn de meeste." Dolstra’s aanpak is vooral gericht op Linux-systemen. Praktische reden: er is voor Linux meer basale software beschikbaar waaronder compilers en libraries. Daarmee is snel te experimenteren: "Om al die onderdelen op het Windows-platform geschikt te maken voor Nix, kost veel tijd." De onderzoeker gaat de komende tijd contact opbouwen met de ontwikkelaars van de verschillende Linux-distributies. Mensa Dolstra kreeg twee ingevingen die leidden tot Nix. Het eerste kreeg hij in de mensa van de Universiteit Utrecht, het Educatorium. Hij discussieerde er met zijn promotor Eelco Visser over verificatie-hashes. Ineens was er het idee om de installatie van software te benaderen als een geheugenprobleem. Die aanpak lijkt inderdaad sterk op de manier waarop ‘conservative garbage collection’ geschiedt in C of C++. Een programmeur dient in die talen zelf aan te geven wanneer geheugen vrijgegeven moet worden. Fouten hierin kunnen resulteren in een crash van het programma, of een lek in het geheugen. Die kunnen op hun beurt leiden tot beveiligingsrisico’s. Om die problemen te beperken, voegen sommige compilers tamelijk voorzichtige (conservatieve) ‘garbage collectors’ toe. Lijkt een C- of C++-object in gebruik, dan wordt die geheugenruimte niet vrijgegeven. Dolstra: "Nix maakt een dergelijke conservatieve aanname." Het maakt van iedere component een uniek nummer, een hashcode. Treft Nix de hashcode van een component aan in een ander, dan wordt aangenomen dat de twee van elkaar afhangen. "Zo heb ik hier een versie van webbrowser Firefox op mijn systeem in /nix/store/p9d6ryhwvqcq46sfiapcbl9d3567in4b-firefox-1.5. In de executable zit ergens de string "qwhqdqjd7aanrkakj7cbfaqmdydn4r87". Dat komt uit de GTK library, in /nix/store/qwhqdqjd7aanrkakj7cbfaqmdydn4r87-gtk+-2.8.9. Daardoor weet het systeem dat deze Firefox afhankelijk is van die specifieke versie van GTK." Onderscheiden Het tweede idee voor Nix, kreeg Dolstra twee jaar later. "Ik bedacht dat we die cryptografische hashes ook konden inzetten om versies en gebruikers van elkaar te onderscheiden." Met Nix, mits juist opgezet, kunnen sindsdien meerdere gebruikers op één systeem software installeren, ook als ze elkaar niet vertrouwen. Dolstra is behalve door collega’s bij Philips en Microsoft nog niet benaderd door het bedrijfsleven. "Het zou leuk zijn als mijn kennis ergens wordt toegepast. De kennis is er, en dat is het belangrijkste." Zaandams bedrijf blijft bij eigen aanpak Software-ontwikkelaars van het Nederlandse bedrijf Lindeberg in Zaandam verkiezen hun eigen aanpak voor het Windows-installatieprobleem. Nix trok wel hun aandacht. Lindenberg is gespecialiseerd in het inpakken en migreren van applicaties op het Windows-platform. Het schreef daarvoor de afgelopen jaren MSI Optimiser, een installatiebeheerprogramma waarmee het stelt alle problemen van de Windows Installer (MSI) te vermijden. "Ik geloof dat Nix kijkt naar het fysieke bestand, exclusief de registratie-informatie die erbij hoort in de registry zoals classes, programma id’s en type libraries", reageert Lindeberg-programmeur Ron Schutz. "In ieder geval, onze toepassing houdt hier rekening mee."