Üksteist rida JavaScripti lõhkus interneti. Üks avaldamise tühistamine.
22.
22. märts 2016, 21:30 UTC: arendaja tühistab kõigi oma 273 npm-paketi avaldamise pärast seda, kui npm annab paketi nime "kik" üle sõnumsiderakendusele Kik, kelle patendiesindaja oli lubanud "advokaadid teie ukse taga tagumas". Üks 273-st on left-pad: üksteist rida, mis lisavad stringi ette tühikuid, alla laaditud 2,5 miljonit korda kuus. Mõne minuti jooksul ebaõnnestuvad Babeli, Reacti ja Node'i versioonid kogu maailmas, sadu minutis. Kahvliharu ilmub kümne minuti pärast ja ei muuda midagi, sest Babel tõmbab left-pad'i läbi reanumbrite, mis "paneb paika" täpselt 0.0.3. Kell 23:55 taastab npm kustutatud versiooni varukoopiast – registri ajaloos esimene "avalduse tühistamise tühistamine" – ja nädal hiljem kehtestab 24-tunnise avaldamise tühistamise reegli. Postmortem, npm-i enda aruandest ja Kiki avaldatud e-kirjavahetusest: register, mis lubas igal autoril kustutada mis tahes versiooni ilma sõltuvuste kontrollita, üleminekuline puu lahendati reaalajas iga installimise käigus, vaikimisi puudus lockfile. Git blame: 60 npm / 25 Kik / 15 sõltuvusharjumus. Paranduse otsus: SHIP IT.
Loe kirjalikku väljaannet (inglise keeles) ↗
Mida see video hõlmab
- 11. märts: Kiki patendiesindaja palub Azer Koçulul `kik` ümber nimetada; tund hiljem: advokaadid "taguvad teie ukse taga ja võtavad teie kontod maha"; Azer: $30 000; Kik saadab e-kirja npm-i toele
- 18.–20. märts: npm-i tegevjuht kannab nime Kikile üle ("mõistlikult eeldaks, et see on seotud kik.com-iga"); Azer palub kõigi oma moodulite kustutamist
- 22. märts, 21:30–23:55 UTC: 273 paketi avaldamine tühistati; [email protected] annab Babeli, Atomi, Node'i projektides 404; fork 1.0.0 kell 21:42; npm-i tehniline juht säutsub "avalduse tühistamise tühistamisest" kell 23:03; 0.0.3 varukoopiast tagasi kell 23:55 – 2,5 tundi
- 23. märts ja 29. märts: npm-i postmortem ("me unustasime selle ära") ja uus poliitika: avalduse tühistamine ainult 24 tunni jooksul, eemaldatud nimede turvaplatsihoidjad (72 tundi alates 2020. aastast)
Tõlgitud transkriptsioon
Tõlgitud ingliskeelsest originaaljutustusest. Saadaolevat heli ja subtiitreid kontrollib YouTube.
0:00 Üks arendaja kustutab üksteist rida JavaScripti ja mõne minuti jooksul Babel, Reacti ja Node'i versioonid ebaõnnestuvad kogu maailmas, sadu minutis. Funktsioon on left-pad. See täidab stringi tühikutega ja õhtu lõpuks teeb npm seda ühte asja, mida ta ütleb, et ta ei saa teha: kustutatud versiooni uuesti avaldada. Kuidas see juhtub, miks see on võimalik ja kes saab süü. See on The Daily Diff, postmortem. 11. märts. Sõnumsiderakenduse Kik patendiesindaja
0:26 saadab Azer Koçulule e-kirja: nimetage oma npm-pakett ümber, kik on meie kaubamärk. Azer ütleb ei. Tund hiljem: meie kaubamärgiadvokaadid hakkavad teie ukse taga taguma ja võtavad teie kontod maha. Azer nimetab hinna, kolmkümmend tuhat dollarit, ja Kik edastab kirjavahetuse npm-i toele. 18. märts. npm-i tegevjuht otsustab, et igaüks, kes trükib npm install kik, ootab sõnumi-
0:48 rakendust ja annab nime üle. Azer palub kõigi oma asjade kustutamist. Kaks päeva hiljem teeb ta seda ise: kakssada seitsekümmend kolm paketti. 22. märts, 21:30 UTC. Iga versioon, mis ulatub left-pad'i poole, saab 404. Kümme minutit hiljem avaldab keegi võõras selle uuesti nimega 1.0.0, ja midagi ei muutu, sest Babel ja Atom laadivad selle läbi paketi nimega line-numbers, mis tahab täpselt 0.0.3.
1:13 Kell 23:03 säutsub npm-i tehniline juht: un-un-publishing. Kell 23:55 on 0.0.3 varukoopiast tagasi. Kaks ja pool tundi. Miks saab üks inimene seda teha? Kolm põhjust. Iga versiooni npm-is saab selle autor kustutada, koheselt, ilma kontrollita, kes sellest sõltub. Teiseks on sõltuvused üleminekulised: Babel ei tea, et left-pad eksisteerib, ta teab line-numbers'it ja kogu puu lahendatakse reaalajas iga installi käigus.
1:36 Kolmandaks, 2016. aastal ei kinnita miski seda puud vaikimisi; lockfile'id on valikulised, nii et iga CI käivitus küsib internetilt uuesti, kuidas üksteist rida koodi välja näeb. Üks register, mida ei halda keegi, kes sellest sõltub. git blame. npm, kuuskümmend protsenti: selle enda postmortem ütleb, et piiramatu avaldamise tühistamine põhjustas valu ja, tsitaat, me unustasime selle ära. Kik, kakskümmend viis: patendiesindaja, mitte advokaat, lubades advokaate ukse taga nime pärast, mida Kik oli juba otsustanud mitte kasutada. Sõltuvusharjumus, viisteist: kõik, kes npm-installeerisid üksteist rida
2:06 selle asemel, et need ise kirjutada. Kaasa arvatud Kik, kelle versioonid samuti katkesid. Löögiraadius: kakssada seitsekümmend kolm paketti eemaldati, üks neist laaditi alla kaks ja pool miljonit korda kuus. Parandus võtab aega kaks ja pool tundi; funktsioon võtab üksteist rida. Hacker Newsis jõuab postitus, milles küsitakse, kas oleme unustanud, kuidas programmeerida, seitseteist saja punktini, peamiselt inimestelt, kelle versioonid on endiselt punased. Otsus, postmortem: SHIP IT.
2:26 npm taastab varukoopiast, postitab postmortem järgmisel päeval, ja nädala jooksul kehtestab reegli, mis kehtib siiani: saate tühistada avaldamise kakskümmend neli tundi, pärast seda räägite inimesega. Esmaspäev: "commit"ige oma lockfile ja kui funktsioon on üksteist rida, see on lõik, mitte sõltuvus. Saatke mulle intsident, millest teil ikka veel ei ole lubatud rääkida, kommentaarides või aadressil daily diff dot dev. Ja see on tänane "diff".
2:48 Olen Niko Axrisist. Ühendage vastutustundlikult.
Allikad
- 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



