2min

Google heeft voor ontwikkelaars van grote software programma’s een nieuwe tool ontwikkeld om de compilatie oftewel build tijd drastisch te verkorten. Bij elke wijziging in de software code moet deze opnieuw worden gecompileerd voordat deze ook daadwerkelijk getest kan worden.

Veel ontwikkelaars van grote software projecten irriteren zich dan ook vaak aan dit proces. Vele van hen hebben inmiddels geaccepteerd dat het builden van software nou eenmaal een complexe taak is en dat daar weinig aan te doen is. Een ontwikkelaar van Google Chrome kon zich hier toch niet bij neerleggen en dook in het programma GNU met zijn make files om te kijken of het sneller kan.

Het systeem moet voor elke build onderzoeken wat er met welke bronbestanden moet gaan gebeuren, vervolgens moet de linker nog aan de slag om de objectbestanden aan elkaar te knopen en uiteindelijk met een uitvoerbaar programma op de proppen te komen. Google had eerder al een groot deel van deze stappen al laten optimaliseren. Hierdoor hadden zij het al voor elkaar gekregen om elke incrementele build van Google Chrome terug te brengen tot 10 a 20 seconden.

Evan Martin, een van de ontwikkelaars van Google Chrome was echter nog niet tevreden, hij irriteerde zich eraan dat hij steeds weer moest wachten, hij vroeg zich af waarom hij na het uitvoeren van het make commando steeds een seconde of 10 moest wachten voordat die daadwerkelijk aan de gang gaat. Na een onderzoek wat er precies gebeurt in die eerste 10 seconde realiseerde hij zich dat daar nog veel viel te winnen. Er worden door Make namelijk enorm veel overbodige zaken gecontroleerd. Martin besloot daarop dan maar een zijn eigen build-systeem te bouwen genaamd Ninja, dat zeer efficiënt is en al na 1 seconde van start gaat. Het doen van een incrementele build van Google Chrome duurt nu dankzij Ninja nog maar zes seconde.

Ninja is ook meteen beschikbaar gesteld aan de open source community, zodat alle ontwikkelaars die werken aan grote software projecten gebruik kunnen maken van de nieuwe buildtechniek. Ook is er documentatie beschikbaar gesteld en biedt Ninja de mogelijkheid om in een webbrowser een overzicht te tonen van dependencies, dit zijn bestanden en libraries die nodig zijn om de build te voltooien.

Hoewel deze nieuwe tool natuurlijk een goede uitvinding is en zeker van grote waarde kan zijn voor veel software ontwikkelaars, heeft het voor ontwikkelaars van kleinere software projecten weinig toegevoegde waarde. Google Chrome is een software project van meer dan 30.000 bestanden en daardoor kunnen er tientallen seconde worden gewonnen. Als je een software project hebt van honderden bestanden dan is de snelheidswinst hooguit enkele milliseconden. Voor zo’n kleine snelheidswinst kan net zo goed gebruik worden gemaakt van het oude vertrouwde GNU Make.