Net als je televisie of auto is software tegenwoordig vaak opgebouwd uit honderden componenten – kant-en-klare stukken computercode geschreven en onderhouden door bedrijven, teams van vrijwilligers en soms zelfs een enkeling. Dit leidt tot een interessante dynamiek die veel weg heeft van die in een natuurlijk ecosysteem. Professor Diomidis Spinellis wil deze analogie verder uitwerken in zijn missie om de alsmaar toenemende complexiteit van software te helpen beteugelen.

Begin jaren ’80 schreef Diomidis Spinellis zijn eerste computerprogramma, op een vel papier, en vroeg een vriend deze te lezen en te corrigeren. Het is een beeld dat zowel passie als kalmte uitstraalt en dat schril afsteekt bij de storm die vijftien jaar eerder al was opgestoken. Computerwetenschappers hadden toen de eerste “softwarecrisis” afgekondigd omdat bestaande methodes voor softwareontwikkeling de snelle toename in rekenkracht van computers, en in de verwachte prestaties van de software, niet konden bijbenen. Nu, als professor in software engineering aan de Athens University of Economics and Business en aan de TU Delft, is het helpen begrijpen en beheersen van de complexiteit van software een essentieel onderdeel van Spinellis’ onderzoek. ‘Het is sinds eind jaren ’60 een continue strijd geweest,’ zegt hij. ‘Telkens als we een nieuwe manier vinden om complexiteit in te dammen – betere programmeertalen, betere software-architectuur of beter hergebruik – dan gebruiken we dit om nog ingewikkeldere systemen te bouwen.’

Na jarenlange succesvolle samenwerking op onderzoeksgebied is Diomidis Spinellis sinds kort aangesteld als deeltijdprofessor in de Software Engineering Research-groep aan de TU Delft. ‘Dit is een omgeving waarin je toponderzoek kan doen,’ zegt hij.

Met tienduizenden softwarecomponenten om uit te kiezen ontstaat een dynamiek die veel weg heeft van een natuurlijk ecosysteem.

Exponentiële groei in complexiteit

Alhoewel het zeker geen volledige verklaring is, geeft de toename in de omvang van software een aardig beeld van de toename in complexiteit ervan. Zo bleef een F4-A straaljager uit de zestiger jaren met slechts duizend regels code in de lucht. Bij de recente Joint Strike Fighter (JSF) is dit toegenomen tot meer dan zes miljoen regels code (met daarin honderden bekende bugs). Geïnspireerd door de snelheid waarmee de software van kopieermachines, straaljagers en ruimtevaartuigen is gegroeid, hebben Spinellis en zijn collega’s dit voor honderden open-source softwaresystemen onderzocht. Ze vonden een jaarlijkse groei van twintig procent wat betekent dat de omvang van software, en daarmee de complexiteit, elke 42 maanden verdubbelt. ‘Software-artefacten zijn het meest complexe dat mensen ooit gemaakt hebben,’ zegt Spinellis. ‘Het is verbazingwekkend dat we zulke software kunnen bouwen, dat het naar behoren werkt en dat zelfs kinderen behoorlijk ingewikkelde codes kunnen schrijven.’ Aanhoudende exponentiële groei is echter een machtige tegenstander.

Aanhoudende exponentiële groei is een machtige tegenstander.

Componenten bieden uitkomst

Dankzij software analytics, een van de specialismes van Spinellis, beschikken (professionele) ontwikkelaars over krachtige tools die hen ondersteunen bij het bouwen van software. ‘We kunnen het tot stand komen van software tracken en analyseren, evenals de software zelf en hoe die gebruikt wordt,’ zegt hij. ‘Wie heeft welk deel van de software gebouwd, is het kwalitatief hoogwaardige code, welke bugs deden zich voor en wie heeft die verwijderd, welke functionaliteit wordt veel gebruikt en welke is overbodig.’ Maar de misschien wel meest fascinerende ontwikkeling op het gebied van software engineering is het gebruik van componenten. Deze kant-en-klare brokken code voegen belangrijke functionaliteit toe en zijn eenvoudig in een softwareproject te importeren. In een webapplicatie kunnen deze componenten bijvoorbeeld dataopslag voor hun rekening nemen, of het versturen van e-mails. Spinellis: ‘Met gebruik van componenten bespaar je veel tijd en geld. Eigenlijk moet op zijn minst tachtig procent van de software die je bouwt hieruit bestaan, anders doe je iets verkeerd.’

We willen de staat van een software-ecosysteem observeren en meten, met als belangrijkste doel de gezondheid ervan te verhogen.

Welkom in de jungle

Veel applicaties zijn op honderden van deze (vaak gratis beschikbare) componenten gebaseerd, te selecteren uit een heel ecosysteem van tienduizenden componenten. Deze componenten evolueren continu, bijvoorbeeld door het ondersteunen van nieuwe dataopslagmethoden of een hippere e-mailopmaak. ‘Ze evolueren zowel onafhankelijk van elkaar als in relatie tot elkaar, ze kunnen decennialang meegaan of in onderlinge competitie ten ondergaan,’ zegt Spinellis. Er doen zich ook afsplitsingen voor, net zoals in natuurlijke evolutie waarbij uit een enkele voorouder verschillende nieuwe organismen ontstaan. Ze dienen elkaar zelfs tot voedsel doordat hun ontwikkelaars ideeën, code en bugs uitwisselen. ‘Ik denk dat het loont om deze analogie met een natuurlijk ecosysteem verder uit te werken in de context van software-evolutie,’ zegt Spinellis. ‘We willen de staat van zo’n ecosysteem observeren en meten zodat we de zwakheden ervan bloot kunnen leggen – om zo tot bruikbare inzichten te komen waarmee we de gezondheid ervan kunnen verhogen. Het publiceren van zulk advies leidt er hopelijk toe dat men minder vaak de verkeerde dingen doet en vaker de goede, waardoor uiteindelijk de kwaliteit van software zal toenemen. Dat is althans de theorie. Iedereen die, net als ik, kinderen heeft opgevoed weet dat goed advies niet altijd klakkeloos wordt opgevolgd.’

Nog steeds toonaangevend

In een eerste stap naar een beter begrip van software-ecosystemen hebben Spinellis en zijn collega’s de evolutie van een specifieke release van het Unix-besturingssysteem geanalyseerd. Unix is begin jaren ’70 ontworpen bij Bell Labs en is sindsdien continu verder ontwikkeld. Dit heeft tot een grote familie aan implementaties geleid, waaronder het besturingssysteem van je MacBook en Netflix. De onderzoekers bestudeerden een periode van vijftig jaar – van het originele Bell Labs-ontwerp tot aan de huidige FreeBSD-variant – waarbij ze met name keken naar hoe de onderliggende architectuur zich over de tijd heeft ontwikkeld. ‘Net als de constructie van bouwwerken is het schrijven van software gebaseerd op specifieke principes en ideeën,’ zegt Spinellis. ‘Wat betreft Unix ontdekten we dat veel van de allereerste architectonische beslissingen nog steeds hun invloed doen gelden. Denk aan hoe de oorspronkelijke keuzes bij het bouwen van Athene – de ligging, ingeklemd tussen bergen en de zee, de Acropolis op een centrale heuvel en de agora aan de voet daarvan – tweeduizend jaar later nog steeds een belangrijke rol spelen bij hoe de stad zich verder ontwikkeld.’ Het viel de onderzoekers ook op dat de evolutie van de onderliggende architectuur meer gebaat was bij het gebruik van conventies dan bij strenge handhaving van strikte regels. ‘Bij overheidsprocedures gelden strikte regels terwijl mensen in winkels zich naar conventies gedragen,’ zegt Spinellis. ‘Een wijziging in de aanbestedingsprocedures van de overheid moet door het parlement bekrachtigd worden terwijl het openen van een nieuw type winkel heel eenvoudig is.’ De groei in de omvang en complexiteit van het Unix-besturingssysteem leidde uiteindelijk tot wat hij een federatieve architectuur noemt. ‘Het is niet langer een enkele ziel die bepaalt hoe het systeem werkt. We hebben nu hele subsystemen – voor dataopslag, netwerkverkeer en cryptografie – met elk een unieke architectuur die nauw aansluit bij hun eigen behoeftes.’

 

Software die technisch briljant is, kan vanwege een gebrekkige gebruikersondersteuning toch het onderspit delven.

Briljant en toch ondermaats

Het idee van een software-ecosysteem dat evolueert roept meteen het paradigma van survival of the fittest op. Maar dat betekent niet automatisch dat de software die overleeft datgene is waar het ecosysteem het meest bij gebaat is. Er zijn namelijk meerdere met elkaar concurrerende krachten die deze evolutie voortdrijven. ‘Sommige componenten zijn vanuit technisch oogpunt briljant, maar als de gebruikersondersteuning flink te wensen overlaat dan kunnen ze snel van het toneel verdwijnen,’ zegt Spinellis. Licenties en politiek spelen ook een rol. Zo kunnen technisch inferieure componenten voordeel halen uit de support van een sterke speler, zoals een groot softwarebedrijf. Juridische beschermingsmechanismen, zoals patenten en auteursrechten, kunnen zelfs een bedreiging zijn voor het voortbestaan van het ecosysteem als geheel. ‘Het is een onwaarschijnlijk scenario, maar als organisaties delen van het ecosysteem gaan afschermen, dan zal dat de evolutie van software ernstig belemmeren.’ Meer dan genoeg redenen om de dynamiek van een software-ecosysteem grondig te bestuderen, om zo de gezondheid ervan te kunnen blijven waarborgen en verhogen.

Belabberde code

Naast zijn onderzoek aan software-ecosystemen probeert Spinellis de alsmaar toenemende complexiteit van software ook op andere manieren te temmen. Een daarvan kwam tot stand door eerst exact het tegenovergestelde te doen van wat hij wil bereiken. Zo heeft hij tot viermaal toe de International Obfuscated C Code Contest gewonnen – een programmeerwedstijd die deelnemers aanspoort om opzettelijk belabberde en onleesbare code te schrijven. ‘Het heeft me geïnspireerd om twee boeken te schrijven,’ zegt hij. ‘Een over het lezen van code en een over de kwaliteit van code. Zowel het lezen van bestaande code als het waarborgen van de kwaliteit daarvan zijn belangrijke vaardigheden. Als softwareontwikkelaar werk je immers meer dan zeventig procent van je tijd aan code die door anderen geschreven is.’ Spinellis heeft ook een MOOC (zie kader) ontwikkeld over het gebruik van de Unix command-line interface voor het verwerken van big data en het effectief werken met softwarecode. ‘Sommige van deze tools zijn al meer dan veertig jaar oud en sindsdien eigenlijk alleen maar krachtiger geworden,’ zegt hij. ‘Ze vormen een eigen ecosysteem en kunnen met elkaar gecombineerd worden op manieren waar de oorspronkelijke ontwikkelaars niet van hadden durven dromen. Veel van mijn eigen onderzoek begint met dataonderzoek aan de hand van korte aaneenschakelingen van deze tools. Dat werkt veel beter dan meteen een groot en star programma schrijven.’ Mocht je nu al moeite hebben om je een weg door de jungle te banen, schrijf je dan snel in voor deze MOOC, want over nog geen vier jaar is software alweer dubbel zo ingewikkeld.

Tekst: Merel Engelsman | Fotografie: Frank Auperlé