Wetenschap is open-source software

Waarom zou je om (open-source) software geven?

Ik besteed een groot deel van mijn tijd aan het werken aan software. Vaker dan ik kan tellen, is me gevraagd waarom software überhaupt belangrijk is. Software is, zo zeggen mensen, geen wetenschap. Het is een tijdvreter, iets waar je snel doorheen moet om te komen in het streven naar wat er echt toe doet: resultaten (en publicaties, als je in de academische wereld werkt). Publish or perish.

Nou, ik denk dat software wél ertoe doet. Sterker nog, ik denk dat open-source software wetenschap is. Of, op zijn minst, computationele wetenschap.

In dit artikel leg ik uit waarom wij als wetenschappers moeten vasthouden aan de wetenschappelijke methode en waarom dat betekent dat we moeten werken met open en reproduceerbare software. Dit is niet makkelijk te schrijven; het daagt veel huidige trends in de academische wereld uit, maar het is een belangrijke stap richting betere wetenschap die ons niet allemaal krankzinnig maakt.

Wat is wetenschap?

Als je op Wikipedia zoekt naar wetenschap, kom je dit tegen:

"Wetenschap is een systematische discipline die kennis opbouwt en organiseert in de vorm van toetsbare hypothesen en voorspellingen over het universum." — Wikipedia

Pak nu eens een willekeurig arXiv-artikel. Het bevat duidelijk een vorm van "kennis". Maar draagt het artikel voorspellingen bij die toetsbaar zijn en systematisch georganiseerd kunnen worden? Kun je het testen? Kun je het systematiseren?

Het antwoord is nooit een resoluut "nee", maar het is wel moeilijk. Je hebt zelden direct toegang tot die kennis.

Het goede model: innerlijke modellen

In zijn uitstekende boek The Nature of Explanation stelt Kenneth James Williams Craik dat we kleine simulaties van de werkelijkheid gebruiken om de buitenwereld te verklaren en te voorspellen:

"Als het organisme een 'kleinschalig model' van de externe realiteit en van zijn eigen mogelijke acties in zijn hoofd draagt, is het in staat om verschillende alternatieven uit te proberen, ... en in elk opzicht op een veel vollediger, veiligere en competentere manier te reageren op de noodsituaties waarmee het wordt geconfronteerd."

Dit punt lijkt vandaag de dag voor de hand te liggen, maar het benadrukt het fundamentele doel van wetenschap: jij, als handelend wezen, verbetert je innerlijke model totdat je betere voorspellingen kunt doen dan voorheen.

Dit innerlijke model is cruciaal: als een arXiv-artikel de lezer niet helpt om de wereld beter te voorspellen, is het geen wetenschap. Dit is waarom computationele reproduceerbaarheid essentieel is: software is de manier waarop we voorspellende modellen coderen en delen.

Wat is reproduceerbaarheid?

Herinner je dat volgens Wikipedia het niet voldoende is om enkel resultaten te demonstreren. Resultaten moeten (1) systematisch zijn en (2) toetsbaar zijn.

Het is geheel mogelijk dat een bepaald artikel te moeilijk is om te begrijpen of om andere redenen ontoegankelijk is voor het publiek. Dat betekent niet dat er geen wetenschappelijke inzichten te vinden zijn — lezers kunnen manieren vinden om deze bij een tweede of derde lezing te systematiseren. Nee, het betekent dat je specifiek het idee niet als het jouwe kunt overnemen, testen en gebruiken om je eigen wereldmodel te verbeteren.

Reproduceerbaarheid is in deze context niet alleen het dupliceren van resultaten. Het is het vermogen om het wetenschappelijke idee te nemen, het in je eigen innerlijke model te integreren, het aan te passen en erop voort te bouwen — of het te verwerpen omdat het de voorspelbaarheid vermindert.

Als een idee niet reproduceerbaar is, kunnen de bevindingen niet worden uitgebreid. Ze zijn dan dus nutteloos. Dit wordt duidelijk als we een kort gedachte-experiment doen waarbij we "softwaremodel" vervangen door "mathematisch model". Net zoals we geen natuurkundig artikel zouden accepteren waarin staat dat vergelijkingen X voorspellen maar de wiskunde niet wordt getoond, zouden we geen (computationele) wetenschap moeten accepteren die haar methoden verbergt.

Waarom is software wetenschap?

"Hoeveel vakgebieden zijn tegengehouden, en hoeveel mensen hebben hun carrière gezien ontsporen, vanwege een foutief programma?" — Greg Wilson

Software is alomtegenwoordig in de moderne wetenschap. Alles, van CoVid-modellen tot zoekalgoritmen en laboratoriumprotocollen, is gebouwd op software die door anderen is gemaakt. Onderzoekers hebben het druk. Ze nemen niet de tijd om alle software-afhankelijkheden te doorzoeken om de correctheid te verifiëren, implementatiedetails te begrijpen of te controleren op potentiële fouten die resultaten ongeldig kunnen maken.

Hieruit volgt dat wetenschappelijke resultaten afhangen van de software. Als de software fout is, is de wetenschap fout. (Softwarebugs veroorzaken al talloze intrekkingen van publicaties).

Dat is begrijpelijk, want op een gegeven moment moeten we vertrouwen op en leunen op het werk van anderen. Om dat te kunnen doen, moet de software betrouwbaar zijn.

Waarom open source?

We hebben vastgesteld dat software aan twee eisen moet voldoen:

  1. Reproduceerbaar: het moet uitvoerbaar én aanpasbaar zijn.
  2. Betrouwbaar: de resultaten moeten consistent vertrouwd kunnen worden.

Aanpasbaarheid is belangrijk voor de wetenschap om dezelfde reden dat vergelijkingen belangrijk zijn voor wetenschappelijke voorspellingen. Betrouwbaarheid is cruciaal omdat we streven naar een systematische verbetering van onze kennis, niet naar onbetrouwbare en gedeeltelijke resultaten die slechts af en toe werken.

Dit is wat open-source software ons biedt. We kunnen code wijzigen en aanpassen aan onze behoeften (denk aan Hugging Face-modellen) en we kunnen het iteratief verbeteren.

Natuurlijk is open-source software geen perfect middel. Er zijn zorgen over intellectueel eigendom en beveiliging, bugs kunnen nog steeds voorkomen en stabiliteit kan een probleem zijn. Maar tenminste staan de imperfecties publiekelijk geregistreerd. Ze kunnen worden gecorrigeerd en verbeterd, net als ons wetenschappelijke begrip.

Vanuit dat perspectief kan men stellen dat open-source software de wetenschappelijke methode is — maar dan in simulatievorm.

Een visie voor de wetenschap van de toekomst

Als we deze premissen accepteren, kunnen we ons afvragen: hoe zou echt open (computationele) wetenschap eruitzien?

  • Directe reproduceerbaarheid: Elk resultaat is onmiddellijk reproduceerbaar. Wanneer je een artikel leest waarin wordt beweerd dat een nieuw medicijn symptomen met 30% vermindert, klik je op een link en zie je de exacte analyse in je browser draaien. De dataverwerking, statistische tests en visualisaties worden in seconden uitgevoerd in dezelfde omgeving als die de auteurs gebruikten, perfect bewaard via reproduceerbare containers.
  • Evoluerende software: Wetenschappelijke software evolueert als Wikipedia. Klimaatmodellen worden niet in isolatie ontwikkeld door enkele labs, maar onderhouden door wereldwijde gemeenschappen. Wanneer een onderzoeker in Kenia een bug ontdekt in berekeningen over atmosferische turbulentie, wordt de correctie onmiddellijk doorgevoerd in klimaatsimulaties wereldwijd. Modellen verbeteren continu in plaats van te stagneren in academische silo's.
  • Versnelde ontdekkingen: Het tempo van ontdekkingen versnelt. In plaats van dat elke onderzoeker vanaf nul begint, staan we op de schouders van reuzen wiens werk niet alleen leesbaar, maar ook uitvoerbaar en aanpasbaar is. Wetenschappelijke vooruitgang stapelt zich op in een ongekend tempo.
  • Versterkt vertrouwen: Het vertrouwen in de wetenschap groeit. Wanneer klimaatmodellen, economische voorspellingen en medische aanbevelingen zijn gebouwd op transparante, controleerbare code, neemt het publieke vertrouwen toe. Wetenschapscommunicatie verbetert omdat de modellen zelf onderdeel worden van het gesprek, en niet alleen de conclusies.

Dit is geen utopische fantasie. Elk onderdeel bestaat al: open-source gemeenschappen, reproduceerbare omgevingen, collaboratieve ontwikkelplatforms. We hoeven ze alleen maar te vormen tot een coherente visie voor hoe wetenschap in het digitale tijdperk zou moeten werken. De vraag is niet of deze toekomst mogelijk is, maar hoe snel we deze kunnen bouwen.

Wat nu?

Ik stel dat open-source software een noodzakelijke voorwaarde is als we wetenschap willen bedrijven in een gecomputeriseerde wereld. Software zijn uitvoerbare mathematische modellen die we veel hoger zouden moeten prioriteren.

Er is nog werk te doen, en dit is hoe je kunt helpen:

  • Deel en documenteer je code: Artikelen zonder code zijn minder wetenschappelijk, omdat het moeilijker is om voort te bouwen op de inzichten. In een ideale wereld zou elke claim ondersteund moeten worden door reproduceerbare code. Gebruik vanaf dag één code en deel dit altijd.
  • Schrijf stabiele code, gebruik NixOS: Code moet betrouwbaar zijn en voor eeuwig blijven werken. Dat betekent dat afhankelijkheden en omgevingen constant worden gehouden. De beste manier om dat te doen is door reproduceerbare omgevingen te gebruiken. NixOS wordt snel het grootste en beste hulpmiddel hiervoor. Het garandeert dat je code exact hetzelfde zal draaien, zelfs over 100 jaar. Docker, Conda en soortgelijke tools zijn beter dan niets, maar NixOS biedt uitgebreidere garanties.
  • Bouw voort op bestaande tools in plaats van eigen tools te creëren: Om de gemeenschappelijke wetenschappelijke kennisbasis te verbeteren, hebben we cross-platform tools nodig. Dit is bijzonder waar voor kleine vakgebieden zoals neuromorfica, waar een recent Nature-artikel wees op het feit dat open-source software de sleutel is tot opschaling. Raadpleeg de Open Neuromorphic software guide om te zien of er bibliotheken zijn die aansluiten bij jouw werk.
  • Promoot academici die aan software werken: Gezien het enorme belang van code, zouden academische promoties softwarebijdragen moeten waarderen.

De wetenschappelijke revolutie slaagde omdat deze vasthield aan transparantie, reproduceerbaarheid en constante kritische toetsing. De open-source beweging belichaamt deze principes voor software, maar er moet nog veel werk worden verzet.

Help jij mee om software wetenschappelijk te maken?