Sinds 2013 plaatsen wij pro-actief al onze projecten onder een versiebeheersysteem, met name Git. Dit geeft ons sindsdien de mogelijkheid om de geschiedenis van een project vast te leggen in een tijdlijn en de code van meerdere ontwikkelaars één en hetzelfde project makkelijk samen te brengen.
Wij maken dagelijks gebruik van open-source software. Om te implementeren in onze projecten of om patronen en werkwijzen te onderzoeken en er uit te leren. Als web-ontwikkelaar hoef je heus niet elke dag het warm water her uit te vinden. Veel ontwikkelaars die vaak projecten van éénzelfde patroon uitwerken, zetten dat patroon vaak online ter beschikking.
Op vrijdag 3 februari organiseerde de grootste online Git service, Github, hun jaarlijkse Git Merge conferentie, dit keer in hartje Brussel. Een dag gevuld met sprekers en presentaties over het gebruik van versiebeheersysteem bij kleine tot gigantische software ondernemingen zoals Microsoft & Facebook.
De presentaties die mij bij zijn gebleven.
Scaling Git at Microsoft
Met Microsoft die er nu resoluut voor kiest om zoveel mogelijk nieuwe software te open-sourcen (denk maar aan .NET Core, Xamarin, ... ), komt er bij hen intern ook een shift in het beheren van hun software. Om een zo groot mogelijke open-source community aan te spreken, maken ze gebruik van Git en Github. Deze strategie leidde ertoe dat Microsoft in september 2016 de meeste bijdragers aan zijn projecten op Github had, net na Facebook.
Saeed Noursalehi, program manager bij het Visual Studio Online team van Microsoft kwam vertellen welke bevindingen de Reus van Redmond heeft bij het in Git krijgen van één van hun oudste producten, Windows.
Een van de eigenschappen van de Windows broncode is dat het een extreem grote codebase is waar meer dan 4000 mensen aan werken. Zou je de broncode van Windows willen binnenhalen zoals je eender andere open-source broncode wilt binnenhalen, dan zit je uiteindelijk met een map van ongeveer 270GB op je computer, waarvan maar enkel 86GB de effectieve broncode is en de overige 184GB de +30 jaar geschiedenis van het besturingssysteem is. Het probleem dat dit soort schaal van project geeft is dat Git steeds op zoek gaat naar welke bestanden aangepast zijn en daarvoor steeds het gehele bestandssysteem van het project doorkruist, wat resulteert in een serieuze prestatieklap.
Daarom zijn is Microsoft intern een uitbreiding op Git aan het ontwikkelen, GVFS (Git Virtual File System). GVFS virtualiseert het bestandssysteem onder je project zodat Git en alle gereedschappen zogezegd beschikken over alle bestanden , maar GVFS download alleen fysiek de bestanden als ze nodig zijn. GVFS zorgt er ook voor dat Git operaties zoals status, checkout, enz., zo snel mogelijk blijven werken.
Ook Facebook heeft, zoals Microsoft, een gigantische codebase waar dagdagelijks aan gewerkt wordt. Veel problemen die Saeed Noursalehi over het beheren van de Windows codebase aangaf, kwamen terug bij Facebook. Dat is ook de reden waarom Facebook momenteel ook gekozen heeft om zijn software te beheren via Mercurial, een alternatief op Git. De oplossingen die Mercurial biedt zijn meer op maat van de noden van Facebook en bovendien hadden ze bij Facebook sneller uitbreidingen bovenop Mercurial ontwikkeld. Durham Goode, tech lead bij Facebook kwam hun conclusies en uitbreidingen voorleggen, vaak met de boodschap dat deze uitbreidingen op een relatief snelle manier geïmplementeerd kunnen worden in Git.
Één van die uitbreidingen is het virtueel beheren van de codebase, een directe gelijkenis van de uitbreiding van Microsoft voor Git. Ik gok dat er in de backstage een interessante collaboratie tot stand zou kunnen gekomen zijn tussen de 2 mammoeten.
Git: The Tool Loved and (sometimes) Feared
Caren Garcia, Implementation Engineer bij BazaarVoice en letterlijk vertaald, studie-assistent bij de Universiteit van Texas, kwam ons uitleggen wat haar ervaringen waren bij het aanleren van Git bij haar studenten en waarom Git niet enkel geschikt is voor programmeurs maar iedereen die aan tekstverwerking doet zoals overheden, advocaten, schrijvers, onderwijsinstellingen, ...
Pro: Versie-controle
Je verkrijgt snapshots, duidelijk gedefinieerde momenten in de geschiedenis van je document(en) en de inhoud op die bepaalde momenten. Werkt op een bepaald moments iets niet meer? Je kan steeds makkelijk terug gaan naar een vorige versie van je app en de verschillen in code analyseren.
Pro: Samenwerking
Git is oorspronkelijk ontwikkeld om samen aan documenten te kunnen werken, om duidelijk aan te geven wie wat heeft aangepast en wat de verschillen zijn tussen jouw versie en de versie van je collega's.
Con: Cryptische errors
Omdat Git oorspronkelijk gemaakt is met programmeurs als doelpubliek, krijg je als het fout loopt vaak vrij onduidelijke foutboodschappen. Om deze te kunnen ontcijferen moet je deze al gauw Googlen of opzoeken op StackOverflow, met vaak nog eens een cryptische oplossing ook.
Con: Commando's
Git bevat ontzettend veel commando's, vooral als je via de Command Line werkt. De meest essentiële zoals status, commit, push, pull & clone zitten snel in je achterhoofd. Maar eens er complexere problemen opduiken door bv. collaboratie, dan moet al wat opzoekwerk gaan leveren.
Veel van deze problemen herkende ik van toen we bij Pixeo onze websites en applicaties begonnen te beheren in Git. Gelukkig waren deze vrij snel van de baan. Zoals Caren aangaf in haar presentatie: als je dagdagelijks met Git bezig bent, krijg je het zeker wel onder de knie.
Conclusie:
Hoewel het een super interessant event was, vooral gefocust op het gebruik van Git op grote schaal en grote bedrijven, had ik meer gehoopt op inzicht te verkrijgen van hoe kleinere teams op dagdagelijkse manier omgaan met het onderhouden van open-source projecten. Hoe we zelf een contributie kunnen doen in ruil voor de gratis tools die onze workflow en onze producten dagdagelijks helpen te verbeteren.
Voetnoten:
- Versiebeheersysteem: Courante systemen: SVN, Git & Mercurial. Git, origineel ontwikkeld voor Linux, een open-source alternatief op Windows & macOS, is momenteel het populairst.
- Open source software: Software waarvan de broncode vrij te beschikking staat. Afhankelijk van welke soort open-source licentie mag je deze code hergebruiken, aanpassen en implementeren in jouw projecten.
- Github: Één van de mogelijkheden van Git is dat je je tijdlijn 1-op-1 kan kopiëren naar een computer op afstand. Github is een Amerikaanse dienst, die zijn servers ter beschikking om open-source software Daarnaast hebben zij een uitgebreide website waar je gigantisch veel open-source projecten kan terugvinden.