Afgelopen dinsdag doken we in de zes misverstanden over bitcoin. Een van de mythes is dat ontwikkelaars de baas zijn over bitcoin. Dat klopt niet, maar hoe zit het dan wel? In deze editie duiken we uitgebreid in dit onderwerp.
Vandaag staat centraal hoe het “eigenaarschap” van bitcoin is geregeld. Maar eerst gaan we terug naar de basis: wat is Bitcoin Core?
Bitcoin Core is de broncode waar het allemaal om draait. Hierin staan de bitcoin spelregels en alle randvoorwaarden waar het netwerk aan moet voldoen. Deze software is continu aan verbetering onderhevig.
Focus is een value4value nieuwsbrief. Steun ons met een vrijblijvende donatie!
Ontwikkeling van Core
Begin 2009 was de broncode voor het bitcoinproject gewoon een .rar-bestand gehost op SourceForge. Vroege ontwikkelaars deelden via e-mail codepatches (een set aan wijzigingen) met Satoshi. In oktober 2009 creëerde Sirius (Martti Malmi) een subversie van de repository op SourceForge. In 2011 stapte men over naar GitHub en sinds 2014 heet het project Bitcoin Core.
Al ruim dertien jaar zijn er vanuit de hele wereld ontwikkelaars met deze broncode bezig. Er zijn contributors en maintainers (beheerders). Maintainers zijn mensen zoals Marco Falke en Wladimir van der Laan. Zij hebben het recht en de rol om dingen in de repository goed te keuren (mergen).
Anderen zijn contributors, ze dragen veranderingen van de code aan. Iedereen die een pull request (PR) wil openen, kan dit doen, zelfs anonieme personen. Je kunt de openstaande pull requests bekijken of nieuwe PR’s openen.
In een van de eerste Focus edities kon je lezen wat een pull request is: het is een software-verbetering die iedereen kan indienen op GitHub. Maar dit is pas de allereerste stap.
Maintainers maken echter níet het besluit of iets goed genoeg is om in de bitcoin code opgenomen te worden. Wat zij doen, is puur kijken wat er door de contributors is aangedragen in een PR. Als de contributors het eens zijn over de verbetering, dan doet de maintainer de digitale huishouding. Zo van: ‘Ja, iedereen is het ermee eens, dus we kunnen ermee verder gaan.’
ACKnowledged?
Ontwikkelaars kunnen op verschillende manieren hun mening over een aanpassing delen. Er zijn een paar gangbare opties:
- ACK staat voor ‘acknowledged’. Met deze notitie geeft een ontwikkelaar aan achter de mogelijke upgrade te staan.
- Concept ACK, waarbij de contributor het eens is met de richting van het gesprek of de ontwikkeling, maar niet de code heeft doorgenomen of getest.
- utACK, wat inhoudt dat de code is doorgelezen, maar ook dat de desbetreffende persoon geen test heeft gedraaid. Dit staat voor untested ACK.
- NACK, wat heel simpel inhoudt: not acknowledged, of: niet mee eens.
Klik ook eens door de pulls op GitHub om te zien hoe deze discussies zijn te voeren, of voorbeelden van andere opties zoals re-ACK of Strong ACK.
Grijs gebied
Natuurlijk is er een grijs gebied. Als er bijvoorbeeld duizenden anonieme accounts zijn die de beheerders niet herkennen, dan wordt het voorstel niet geaccepteerd (gemerged). Het is niet een democratische stemming, maar eerder ‘common sense’ en ‘knowledge of the ecosystem’. Het stiekem laten accepteren van PR’s zit er ook niet in, gezien alle code open source is en de reputatie van de maintainer ook op het spel staat.
Toch zijn niet alle ACK’s evenveel ‘waard’. Bijvoorbeeld: je ziet een groot aantal voorstellen van een onbekende contributor, die enorm goed gedocumenteerd en beargumenteerd zijn (en volledig doorgetest in samenwerking met anderen). Dan kan het genoeg zijn voor een maintainer om ermee door te gaan.
Kortom, de maintainers voegen alle reacties en bijdragen samen, maar het is daarbij niet belangrijk of ze het zelf met de conclusie eens of oneens zijn. Als hiermee door ‘common sense’ een eenduidige stap voorwaarts is te zetten, volgt er een zes stappenplan met het zetten van digitale handtekeningen.
Handtekeningen
Bitcoin Core heeft een systeem dat controles uitvoert van vertrouwde PGP-keys. Dit staat voor Pretty Good Privacy (PGP). Dat is een versleutelingssysteem dat is te gebruiken voor het verzenden van bestanden. Sinds de uitvinding in 1991 is PGP de de facto standaard geworden voor e-mailbeveiliging.
In Bitcoin Core moeten digitale sleutels elke merge-commit ondertekenen. Deze keys zijn vervolgens te koppelen aan bekende identiteiten. Mensen die dit doen (of hebben gedaan) zijn Wladimir van der Laan, Marco Falke en Michael Ford. Vroeger waren dit bijvoorbeeld ook Pieter Wuille, Jonas Schnelli, John Newbery en Samuel Dobson.
Grofweg gebeurt alles in de volgende zes stappen:
- Iedereen kan een codewijziging indienen door een pull request (PR) te openen op de master branch bitcoin/bitcoin;
- Ontwikkelaars beoordelen deze PR en geven feedback;
- Als er geen bezwaren zijn, start de maintainer een pre-push hook. Zo voorkomen ze dat er ‘niet-ondertekende commits’ naar de repo is te pushen;
- Het Travis Continuous Integration system checkt en verifieert regelmatig of alles netjes gebeurt (en de vertrouwde builder PGP-sleutels de commit ook daadwerkelijk ondertekend hebben);
- Iedereen kan deze check zelf doen om te zien dat alles klopt. De keys zijn al jaren hetzelfde, waardoor je ervan uit kunt gaan dat deze niet gecomprimeerd (of vervalst) zijn.
De gouden vraag
De hamvraag is of er een specifieke, herhaalde procedure is voor íedere voorgestelde verbetering. Bitcoin heeft een bepaald tempo dat moeilijk is te definiëren. Voor sommige veranderingen is het beter om langer te wachten, als het complex of controversieel is. Hier komt dan ook de expertise van de maintainer bij kijken. Er zijn zelfs minuscule wijzigingen die al jarenlang niet zijn doorgevoerd, omdat het grote onvoorziene risico’s met zich mee kan brengen.
Zijn de maintainers dan uiteindelijk essentieel in Bitcoin Core? Niet per se: een PR is ook weer (unmerged) terug te draaien (door een git reset-commando). En het betekent ook niet dat na de merge de discussie ook is gestopt. Zelfs als het in de master branch komt, is het niet direct onveranderlijk.
Bitcoin Core heeft een zesmaandelijkse releasecyclus, zoals ook terug is te zien op de website. Het geeft iedereen een half jaar om de updates door te nemen. Zelfs daarna kan ieder individu ervoor kiezen om de upgrade niet over te nemen op hun node.
Of kort gezegd: Als iets door een maintainer is goedgekeurd, dan is het nog niet definitief. Zelfs als je géén ontwikkelaar bent, heb je invloed op de bitcoin ontwikkeling door te kiezen welke upgrade je op je node draait. Je kunt zelf stemmen door níet deze ‘upgrade’ te draaien.
Nodes
Nodes zijn computers die software draaien. Bitcoin bestaat uit een netwerk van (tien)duizenden nodes, waarbij ieder individu kan kiezen welke versie van de code ze aanhouden. Het uiteindelijke zeggenschap over het protocol ligt dus bij de eindgebruikers. Ontwikkelaars die controversiële updates willen doorvoeren, moeten uiteindelijk ook de steun krijgen van de node eigenaren. Je kunt zelf ook een node draaien! Kijk daarvoor eens naar Bitcoin Core, MyNode of Umbrel.
Vanuit het perspectief van de ontwikkelaar is er ook een interessante dynamiek gaande. Voor ontwikkelaars is dat ook niet altijd makkelijk, zoals de Amerikaanse developer Josie eerder al aanhaalde toen hij over zijn huidige droombaan vertelde:
“Je moet altijd in je achterhoofd houden dat als niemand anders het wil, het amper of geen aandacht gaat krijgen. Ongeacht hoe belangrijk jij een software upgrade vindt en hoeveel tijd jij erin hebt gestopt.”
Volgens de ontwikkelaar is het belangrijkste dat het beste wordt gedaan, in plaats van de verbetering met het meeste momentum. Daarom is het volgens de Amerikaan belangrijker om meer tijd te besteden om over het probleem te denken, dan om de oplossing uit te werken.
“In een enorm complex systeem zoals bitcoin is de beste verandering om niets te willen veranderen. Elke keer als je iets verandert, breng je daarmee enorm veel risico’s in het project.”
Steun Focus!
Vind je deze open en gratis Focus-editie waardevol? Steun ons met een volledig vrijblijvende donatie, compleet value4value!
Klik op de QR-code met je lightning wallet (lnurl-compatible) of check onze donatiepagina voor standaardopties.
Steun Focus!
Vind je deze open en gratis Focus-editie waardevol? Steun ons met een volledig vrijblijvende donatie, compleet value4value!
Scan de QR-code met je lightning wallet (lnurl-compatible) of check onze donatiepagina met enkele standaardknoppen.
Binaire gelijkenissen
Toch worden er continu verbeteringen voorgesteld. Als het bovenstaande zes-staps-proces is doorlopen, volgt er een ‘release security’. Met softwaretool Gitian is na te gaan of de binaire code overeenkomt als verschillende ontwikkelaars dezelfde stappen doorlopen. De code die op Github staat, is immers niet binair (en er kan een niet deterministische fout in de code zitten).
Als dit níet het geval is, ontfermt een beheerder zich weer over de code en ondertekent de software weer met zijn GPG-key. Nu zijn alle integriteitschecks doorlopen, volgt er een officiële release. Nu kan de node eigenaar er voor kiezen om de software te updaten (of niet). De uiteindelijke keuze ligt dus bij mensen die nodes draaien. Momenteel zijn dat zo’n 16.200 (publieke) nodes, maar er zijn ook erg veel private nodes. Volgens andere schattingen zijn dit er zelfs meer dan 52.000.
Naast Bitcoin Core zijn er nog een aantal andere clients, alleen zijn die niet erg gangbaar of populair.
Uiteindelijk zijn er belangrijke (maar niet essentiële) taken weggelegd voor maintainers, en in het bijzonder voor de lead maintainer. Wladimir van der Laan schreef in 2021 een goede blogpost over zijn rol in dit geheel.
Wladimir van der Laan
De Nederlander Wladimir van der Laan is sinds 2014 de lead maintainer van Bitcoin Core. Hij is de opvolger van Gavin Andresen, die op zijn beurt het stokje overnam van Satoshi Nakamoto. Wladimir is de laatste persoon in de piramide die software samenvoegt (en ondertekent) voordat nodes het (kunnen) draaien.
De ontwikkelaar stelde begin 2021 een aantal veranderingen door. Het kwam neer op ‘minder Wladimir, meer decentralisatie’.
Decentraliseer de distributie
- Verplaats eigenaarschap van bijvoorbeeld bitcoincore.org naar een organisatie in plaats van een individu. Momenteel is de anonieme Cobra de maintainer van de website waarop je makkelijk Bitcoin Core kunt downloaden.
- Zorg voor mirrors via andere organisaties, waardoor er minder prikkels zijn om één specifieke website (zoals bitcoincore.org) neer te halen.
- Er is een gedecentraliseerd web nodig, waardoor de website niet met één klik op de knop offline (en van het clearnet) is te halen. De oplossing ligt mogelijkerwijs bij een combinatie van IFPS en torrents.
Decentraliseer het proces van nieuwe releases.
- Meer onderdelen van het proces onderbrengen bij meerdere verantwoordelijken.
- Andere maintainers moeten releases kunnen doen zonder de betrokkenheid van de lead maintainer.
- Gebruik meerdere keys om de releases van Bitcoin Core te ondertekenen. Dat kan heel simpel met een checksum en een soort multi-sig constructie.
Decentraliseer de ontwikkeling
- Het is niet met zekerheid te zeggen dat Github op de lange termijn te vertrouwen en duurzaam genoeg is. Hoewel er natuurlijk back-ups gemaakt worden, is het misschien beter om over te stappen op een P2P-platform voor ‘distributed code collaboration’.
Tot slot deelt hij nog enige suggesties over meetings, mailinglijsten en hosting. Hoewel de lead maintainer absoluut niet de weg uitstippelt die bitcoin zal gaan, is er een continue dialoog over de positie van deze persoon.
Snelle veranderingen
Toch zijn er ook veranderingen geweest waarbij het niet gewenst was om (lang) te wachten om álle deelnemers van het netwerk een kans te geven om een zegje te doen. Denk aan het beruchte ‘value overflow incident’ uit 2010, toen er 184 miljard bitcoin is gemaakt.
Er zat nog een cruciale fout in een van de eerste versies van de bitcoin client. Binnen vijf uur was er een update vrijgegeven, waar lang niet iedereen naar had kunnen kijken. Het was achter essentieel dat er snel een oplossing kwam, om grotere problemen te voorkomen.
Het gebeurt ook wel eens dat een bug pas wordt bekend gemaakt als deze daadwerkelijk is opgelost. Andrew Chow vond bijvoorbeeld een fout in versie 0.18, maar hing het nieuws pas aan de grote klok nadat het allemaal was opgelost.
Complex
Bitcoin is een enorm complex systeem. Econoom Hayek noemde dit soort mechanismen ‘spontaneous order’, waarbij er op een spontane manier vanuit chaos iets van structuur ontstaat, zónder inmenging van een centrale autoriteit.
Net als een taal evolueert, verandert bitcoin ook. Hoe? “The result of human actions, not of human design”, zoals Hayek het omschreef in zijn werk over spontane order.
Deze actie kun jij ook ondernemen: draai een node en kies zélf de spelregels. Bitcoin Core is voor iedereen gratis te gebruiken: geef het eens een poging! Be your own bank!
Focus is een value4value nieuwsbrief. Steun ons met een vrijblijvende donatie!