Versiebeheer: het geheugen achter software
Stel je voor dat je samen met tweehonderd collega's aan hetzelfde Word-document werkt, elke dag, jarenlang. Zonder afspraken zou dat chaos worden: iemand overschrijft het werk van een ander, een fout van vorige week is niet meer terug te vinden, en niemand weet meer welke versie nu eigenlijk de juiste is. Versiebeheer is het systeem dat deze chaos voorkomt bij het bouwen van software. Het onthoudt elke wijziging die ooit aan een stuk code is gemaakt, door wie, wanneer en waarom, en maakt het mogelijk dat duizenden mensen tegelijk aan hetzelfde programma werken zonder elkaar in de weg te zitten.
De beste vergelijking is de 'versiegeschiedenis' die je kent van Google Docs of de 'wijzigingen bijhouden'-functie in Word, maar dan met superkrachten. Je kunt niet alleen teruggaan naar een oudere versie, je kunt ook een eigen zijspoor beginnen om iets uit te proberen, dat zijspoor later weer samenvoegen met het hoofdwerk, en precies zien wie welke regel wanneer heeft toegevoegd. Vrijwel alle software die we dagelijks gebruiken, van bankapps tot besturingssystemen, wordt op deze manier gebouwd. Het populairste gereedschap hiervoor heet Git, en dat is inmiddels zo dominant dat de term 'versiebeheer' in de praktijk bijna synoniem is geworden met Git.
Wat is het precies?
De basis van versiebeheer is de repository (vaak 'repo' genoemd): een map met alle bestanden van een project, plus de volledige geschiedenis daarvan. Elke keer dat een programmeur een stukje werk klaar heeft, maakt die een commit: een momentopname van de wijzigingen, met een korte beschrijving zoals 'inlogscherm foutmelding gerepareerd'. Elke commit krijgt een unieke code, een zogeheten hash, waarmee die ene versie voor altijd traceerbaar blijft, zelfs tussen duizenden andere commits.
Omdat meerdere mensen tegelijk aan hetzelfde project werken, gebruikt men branches (letterlijk 'takken'). Een branch is een parallelle kopie van de code waarin iemand veilig kan experimenteren of een nieuwe functie kan bouwen, zonder de hoofdversie (vaak 'main' genoemd) te verstoren. Is het werk klaar en getest, dan wordt de branch samengevoegd met de hoofdversie via een merge. Het systeem toont daarbij een diff: een overzicht van precies welke regels zijn toegevoegd, verwijderd of aangepast, zodat een collega dat kan controleren voordat het wordt goedgekeurd.
Git is bovendien een gedistribueerd systeem: iedere programmeur heeft een volledige kopie van de hele geschiedenis op de eigen computer, in plaats van afhankelijk te zijn van één centrale server zoals bij oudere systemen. Dat maakt het werken sneller en robuuster, want je kunt ook offline commits maken en pas later synchroniseren met een centrale plek, meestal een platform als GitHub of GitLab.
Wat wil men ermee bereiken?
Het belangrijkste doel is traceerbaarheid: bij elke regel code is te achterhalen wie die heeft geschreven, wanneer, en in welke context. Dat is onmisbaar bij het opsporen van bugs of beveiligingsproblemen, en bij het verantwoorden van beslissingen achteraf, bijvoorbeeld bij overheidssoftware die aan controle onderhevig is.
Een tweede doel is veilig samenwerken. Zonder versiebeheer zou iedereen letterlijk over elkaars werk heen typen. Met branches kan iedereen apart werken en pas op een gecontroleerd moment de resultaten samenvoegen. Dat maakt ook experimenteren mogelijk: een risicovolle aanpassing kan eerst in een aparte branch worden uitgeprobeerd, zonder dat de rest van het team daar last van heeft. Werkt het niet, dan wordt die branch gewoon weggegooid.
Versiebeheer is ook een vangnet: gaat er iets mis, dan kan de code op elk moment worden teruggedraaid naar een eerder werkende versie. En het maakt het hedendaagse open source-model mogelijk, waarbij vrijwilligers over de hele wereld via zogeheten 'pull requests' voorstellen indienen om code te wijzigen, die vervolgens door de eigenaren van een project worden beoordeeld en al dan niet geaccepteerd. Tot slot vormt versiebeheer de basis van moderne CI/CD-pipelines (continuous integration/continuous deployment): geautomatiseerde systemen die bij elke commit automatisch tests draaien en, als alles goed is, de nieuwe versie live zetten.
Voorbeelden uit de praktijk
Git zelf ontstond in 2005 uit noodzaak. De ontwikkelaars van de Linux-kernel, waaronder bedenker Linus Torvalds, gebruikten tot dan toe het commerciële systeem BitKeeper. Toen de gratis licentie daarvan werd ingetrokken na een geschil, bouwde Torvalds in een paar dagen een eigen systeem: Git. Twintig jaar later draait de Linux-kernel, met bijdragen van duizenden ontwikkelaars wereldwijd, nog altijd op datzelfde Git.
Wikipedia gebruikt een vergelijkbaar principe, zij het niet met Git zelf: elke pagina heeft een volledige, openbare bewerkingsgeschiedenis. Iedereen kan zien wie welke zin heeft toegevoegd of verwijderd, en vandalisme kan met één klik worden teruggedraaid. Dat is versiebeheer toegepast op tekst in plaats van programmacode.
Kubernetes, het door Google gestarte open source systeem uit 2014 voor het beheren van software in de cloud, groeide via GitHub uit tot een van de grootste samenwerkingsprojecten ter wereld, met bijdragen van honderden bedrijven die via pull requests wijzigingen voorstellen en laten reviewen.
Ook de Nederlandse overheid maakt er gebruik van: onder het beleid 'open source, tenzij' publiceren instanties als de Belastingdienst en VNG Realisatie delen van hun broncode openbaar op platforms als GitHub, zodat burgers en andere overheden kunnen meekijken en meedenken.
Niet elke sector kiest voor Git. De game-industrie werkt vaak met grote, niet-tekstuele bestanden zoals 3D-modellen en geluid, waar Git minder geschikt voor is. Studio's als Epic Games (bekend van Fortnite) gebruiken daarom vaak het oudere systeem Perforce, dat beter is toegerust op zulke grote binaire bestanden.
Hoe ver is de techniek?
Versiebeheer met Git is inmiddels een volwassen, stabiele technologie. Uit enquêtes onder softwareontwikkelaars, zoals de jaarlijkse Developer Survey van Stack Overflow, blijkt telkens dat een ruime meerderheid van de professionele ontwikkelaars Git gebruikt; exacte percentages verschillen per jaar en meting, maar het beeld van vrijwel universeel gebruik is consistent.
Toch is de ontwikkeling niet stilgevallen. Een opvallend nieuw project is Jujutsu (afgekort 'jj'), mede ontwikkeld door een ingenieur bij Google en sinds ongeveer 2022 open source beschikbaar. Jujutsu gebruikt Git-repositories als opslag onder de motorkap, maar probeert een aantal notoir lastige onderdelen van Git, zoals het samenvoegen van conflicterende wijzigingen, eenvoudiger te maken. Het is nog een relatief kleine, experimentele tool en geen vervanger van Git op korte termijn.
Een ander obstakel is schaal: techreuzen als Google werken intern met codebases van miljarden regels, verspreid over talloze projecten in één grote gedeelde map (een 'monorepo'). Standaard Git is daar niet goed op berekend, waardoor Google een eigen intern systeem, Piper genaamd, gebruikt naast en soms in plaats van Git. Dit laat zien dat Git, ondanks zijn dominantie, geen oplossing is voor elk denkbaar schaalprobleem.
Voor beginners blijft Git bovendien berucht om zijn steile leercurve: de terminologie en commando's zijn niet intuïtief, en het oplossen van zogeheten merge conflicts, waarbij twee wijzigingen elkaar tegenspreken, vraagt oefening. Grote toolmakers proberen dit te verzachten met grafische interfaces en, recenter, met AI-assistenten die uitleggen wat een foutmelding betekent of een commit-boodschap voorstellen.
Wie werken eraan?
Het Git-project zelf wordt onderhouden door een relatief kleine groep kernontwikkelaars als open source software, en valt onder de vleugels van de Software Freedom Conservancy, een organisatie die administratieve en juridische ondersteuning biedt aan open source projecten.
Daaromheen is een industrie van platforms ontstaan die Git-repositories hosten en er samenwerkingstools omheen bouwen. GitHub, opgericht in 2008, is veruit het grootste platform en werd in 2018 voor ongeveer 7,5 miljard dollar overgenomen door Microsoft. GitLab, met wortels die deels in Nederland en Oekraïne liggen, is een belangrijke concurrent en staat sinds 2021 genoteerd aan de Amerikaanse Nasdaq-beurs. Atlassian, bekend van Jira en Trello, biedt met Bitbucket een derde groot platform.
Daarnaast investeren grote technologiebedrijven als Google, Meta en Microsoft in eigen interne tools en onderzoek naar versiebeheer op zeer grote schaal, en speelt de Linux Foundation een rol als koepelorganisatie voor tal van open source projecten die op Git leunen.