Elf regels JavaScript legden het internet plat. Eén keer ongedaan maken.
22 maart 2016, 21:30 UTC: een ontwikkelaar publiceert al zijn 273 npm-pakketten ongedaan nadat npm de pakketnaam "kik" heeft overgedragen aan Kik, de berichten-app, wiens patentgemachtigde "advocaten die op je deur kloppen" had beloofd.
22 maart 2016, 21:30 UTC: een ontwikkelaar publiceert al zijn 273 npm-pakketten ongedaan nadat npm de pakketnaam "kik" heeft overgedragen aan Kik, de berichten-app, wiens patentgemachtigde "advocaten die op je deur kloppen" had beloofd. Een van de 273 is left-pad: elf regels die spaties voor een string plaatsen, 2,5 miljoen keer per maand gedownload. Binnen enkele minuten falen Babel-, React- en Node-builds wereldwijd, honderden per minuut. Een fork verschijnt binnen tien minuten en verandert niets, omdat Babel left-pad binnenhaalt via regelnummers, die 0.0.3 precies vastzetten. Om 23:55 herstelt npm de verwijderde versie van een backup – de eerste "un-un-publish" in de geschiedenis van het register – en een week later introduceert het de 24-uurs ongedaanmaakregel. Postmortem, van npm's eigen account en de e-mailthread die Kik publiceerde: het register dat elke auteur elke versie liet verwijderen zonder afhankelijkheidscontrole, de transitieve boom live opgelost bij elke installatie, geen lockfile standaard. Git blame: 60 npm / 25 Kik / 15 de afhankelijkheidsgewoonte. Oordeel over de oplossing: SHIP IT.
Lees de geschreven editie (Engels) ↗
Wat deze video behandelt
- 11 maart: Kiks patentgemachtigde vraagt Azer Koçulu om `kik` te hernoemen; een uur later: advocaten "kloppen op je deur en nemen je accounts in beslag"; Azer: $30.000; Kik e-mailt npm-ondersteuning
- 18–20 maart: npm's CEO draagt de naam over aan Kik ("zou redelijkerwijs verwachten dat het gerelateerd is aan kik.com"); Azer vraagt om al zijn modules te verwijderen
- 22 maart, 21:30–23:55 UTC: 273 pakketten ongedaan gemaakt; left-pad@0.0.3 404s in Babel-, Atom-, Node-projecten; fork 1.0.0 om 21:42; npm's CTO tweette "un-un-publishing" om 23:03; 0.0.3 terug van backup om 23:55 — 2,5 uur
- 23 en 29 maart: npm's postmortem ("we lieten het liggen") en het nieuwe beleid: alleen ongedaan maken binnen 24 uur, beveiligingsplaceholders voor verwijderde namen (72 uur sinds 2020)
Vertaald transcript
Vertaald vanuit de originele Engelse gesproken tekst. Beschikbare audio en ondertiteling worden beheerd door YouTube.
0:00 Eén ontwikkelaar verwijdert elf regels JavaScript, en binnen enkele minuten falen Babel, React- en Node-builds wereldwijd, honderden per minuut. De functie is left-pad. Het vult een string met spaties, en tegen het einde van de avond doet npm het ene ding dat het zegt niet te kunnen doen: een verwijderde versie opnieuw publiceren. Hoe het gebeurt, waarom het mogelijk is en wie de schuld krijgt. Dit is The Daily Diff, postmortem. 11 maart. Een patentgemachtigde bij Kik, de berichten-app,
0:26 e-mailt Azer Koçulu: hernoem je npm-pakket, kik is ons merk. Azer zegt nee. Een uur later: onze merkenrechtadvocaten zullen op je deur kloppen en je accounts afsluiten. Azer noemt een prijs, dertigduizend dollar, en Kik stuurt de thread door naar npm ondersteuning. 18 maart. De CEO van npm besluit dat iedereen die npm install kik typt de berichten-app verwacht,
0:48 en draagt de naam over. Azer vraagt om alles van hem te verwijderen. Twee dagen later doet hij het zelf: tweehonderddrieënzeventig pakketten. 22 maart, 21:30 UTC. Elke build die left-pad probeert te bereiken, krijgt een 404. Tien minuten later publiceert een vreemde het opnieuw als 1.0.0, en er verandert niets, want Babel en Atom laden het via een pakket genaamd line-numbers, dat precies 0.0.3 wil.
1:13 Om 23:03 tweette de CTO van npm: un-un-publishing. Om 23:55 is 0.0.3 terug van een backup. Twee en een half uur. Waarom kan één persoon dit doen? Drie redenen. Elke versie op npm is door de auteur te verwijderen, onmiddellijk, zonder controle op wie ervan afhankelijk is. Ten tweede zijn afhankelijkheden transitief: Babel weet niet dat left-pad bestaat, het kent line-numbers, en de hele boom wordt live opgelost bij elke installatie.
1:36 Ten derde, in 2016 zette niets die boom standaard vast; lockfiles zijn opt-in, dus elke CI-run vraagt het internet opnieuw hoe elf regels code eruitzien. Eén register, beheerd door niemand die ervan afhankelijk is. git blame. npm, zestig procent: zijn eigen postmortem zegt dat onbeperkt ongedaan maken de pijn veroorzaakte, en, citaat, we lieten het liggen. Kik, vijfentwintig: een patentgemachtigde, geen advocaat, die advocaten aan de deur beloofde vanwege een naam die Kik al had besloten niet te gebruiken. De afhankelijkheidsgewoonte, vijftien: iedereen die elf regels met npm-install installeerde in plaats
2:06 van ze te typen. Inclusief Kik, wiens builds ook falen. Impact: tweehonderddrieënzeventig pakketten verwijderd, één ervan werd tweeënhalf miljoen keer per maand gedownload. De oplossing duurt twee en een half uur; de functie duurt elf regels. Op Hacker News haalt een post die vraagt of we vergeten zijn hoe we moeten programmeren zeventienhonderd punten, voornamelijk van mensen wiens builds nog steeds rood zijn. Oordeel, postmortem: ship it.
2:26 npm herstelt van backup, plaatst de postmortem de volgende dag, en binnen een week introduceert het de regel die nog steeds geldt: je kunt gedurende vierentwintig uur ongedaan maken, daarna praat je met een mens. Maandag: commit je lockfile, en als een functie elf regels is, is het een alinea, geen afhankelijkheid. Stuur me het incident waar je het nog steeds niet over mag hebben, in de reacties, of op the daily diff dot dev. En dat is de diff voor vandaag.
2:48 Ik ben Niko van Axrisi. Verantwoord samenvoegen.
Bronnen
- npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)blog.npmjs.org
- npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)blog.npmjs.org
- Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)web.archive.org
- Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)web.archive.org
- Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTCx.com
- left-pad 0.0.3 on the npm registry (the eleven lines)registry.npmjs.org
- Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)news.ycombinator.com
- Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)news.ycombinator.com
- Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)news.ycombinator.com
- The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"www.theregister.com



