Enajst vrstic JavaScripta je pokvarilo internet. Ena odstranitev objave.
22.
22. marec 2016, 21:30 UTC: razvijalec odstrani objavo vseh 273 svojih npm paketov, potem ko npm preda ime paketa "kik" podjetju Kik, aplikaciji za sporočanje, katere patentni zastopnik je obljubil "odvetnike, ki vam bodo trkali na vrata". Eden od 273 je left-pad: enajst vrstic, ki dodajo presledke pred niz, prenesen 2,5 milijon krat na mesec. V nekaj minutah gradnje Babel, React in Node propadejo po vsem svetu, na stotine na minuto. Fork se pojavi v desetih minutah in ne spremeni ničesar, ker Babel vleče left-pad preko številk vrstic, kar točno določa 0.0.3. Ob 23:55 npm obnovi izbrisano različico iz varnostne kopije — prva "un-un-publish" v zgodovini registra — in teden dni kasneje uvede 24-urno pravilo za odstranjevanje objav. Postmortem, iz lastnega poročila npm in e-poštnega sporočila, ki ga je objavil Kik: register, ki je vsakemu avtorju omogočal izbris katere koli različice brez preverjanja odvisnosti, tranzitivno drevo, rešeno v živo ob vsaki namestitvi, privzeto brez lockfile. Git blame: 60 npm / 25 Kik / 15 odvisniška navada. Razsodba o popravku: SHIP IT.
Preberi pisno izdajo (angleščina) ↗
Kaj zajema ta videoposnetek
- 11. mar: Patentni zastopnik podjetja Kik prosi Azerja Koçuluja, naj preimenuje `kik`; uro kasneje: odvetniki "vam bodo trkali na vrata in vam zaprli račune"; Azer: 30.000 $; Kik pošlje e-pošto podpori npm
- 18.–20. mar: Izvršni direktor npm prenese ime na Kik ("bi razumno pričakovali, da bo povezano s kik.com"); Azer zahteva izbris vseh svojih modulov
- 22. mar, 21:30–23:55 UTC: 273 paketov odstranjenih; [email protected] 404s v projektih Babel, Atom, Node; fork 1.0.0 ob 21:42; tehnični direktor npm tvitne "un-un-publishing" ob 23:03; 0.0.3 nazaj iz varnostne kopije ob 23:55 — 2,5 ure
- 23. in 29. mar: Postmortem npm ("smo ga polomili") in nova politika: odstranitev objave le v 24 urah, varnostni nadomestni znaki za odstranjena imena (72 ur od 2020)
Preveden prepis
Prevedeno iz izvirnega angleškega pripovedovanja. Razpoložljivi zvok in podnapisi so nadzorovani s strani YouTuba.
0:00 En razvijalec izbriše enajst vrstic JavaScripta, in v nekaj minutah Babel, React in Node gradnje propadajo po vsem svetu, na stotine na minuto. Funkcija je left-pad. Niz zapolni s presledki, in do konca večera npm stori edino stvar, za katero pravi, da je ne more storiti: ponovno objavi izbrisano različico. Kako se zgodi, zakaj je to mogoče in kdo je kriv. To je The Daily Diff, postmortem. 11. marec. Patentni zastopnik podjetja Kik, aplikacije za sporočanje,
0:26 pošlje e-pošto Azerju Koçuluju: preimenuj svoj npm paket, kik je naša blagovna znamka. Azer reče ne. Uro kasneje: naši odvetniki za blagovne znamke vam bodo trkali na vrata in vam zaprli račune. Azer imenuje ceno, trideset tisoč dolarjev, in Kik posreduje nit na npm podporo. 18. marec. Izvršni direktor npm odloči, da vsak, ki vtipka npm install kik, pričakuje sporočilno
0:48 aplikacijo, in preda ime. Azer zahteva izbris vsega, kar je njegovega. Dva dni kasneje to stori sam: dvesto triinsedemdeset paketov. 22. marec, 21:30 UTC. Vsaka gradnja, ki poseže po left-padu, dobi 404. Deset minut kasneje jo neznanec ponovno objavi kot 1.0.0, in nič se ne spremeni, ker jo Babel in Atom naložita preko paketa, imenovanega line-numbers, ki želi točno 0.0.3.
1:13 Ob 23:03 tehnični direktor npm tvitne: un-un-publishing. Ob 23:55 je 0.0.3 nazaj iz varnostne kopije. Dve uri in pol. Zakaj lahko ena oseba to stori? Trije razlogi. Vsako različico na npm lahko njen avtor izbriše, takoj, brez preverjanja, kdo je odvisen od nje. Drugič, odvisnosti so tranzitivne: Babel ne ve, da left-pad obstaja, pozna line-numbers, in celotno drevo se reši v živo ob vsaki namestitvi.
1:36 Tretjič, leta 2016 nič privzeto ne določa tega drevesa; lockfiles so opt-in, zato vsak CI znova sprašuje internet, kako je videti enajst vrstic kode. En register, ki ga ne vodi nihče, ki je odvisen od njega. git blame. npm, šestdeset odstotkov: lastni postmortem pravi, da neomejeno odstranjevanje objav je povzročilo bolečino, in, citiram, smo ga polomili. Kik, petindvajset: patentni zastopnik, ne odvetnik, ki obljublja odvetnike pred vrati zaradi imena, ki se ga je Kik že odločil, da ga ne bo uporabljal. Odvisniška navada, petnajst: vsi, ki so npm-namestili enajst vrstic namesto
2:06 da bi jih vtipkali. Vključno s Kikom, katerega gradnje tudi propadejo. Radij eksplozije: dvesto triinsedemdeset paketov umaknjenih, eden od njih prenesen dva in pol milijona krat na mesec. Popravek traja dve uri in pol; funkcija traja enajst vrstic. Na Hacker News, objava, ki sprašuje, ali smo pozabili programirati, doseže sedemnajststo točk, večinoma od ljudi, katerih gradnje so še vedno rdeče. Razsodba, postmortem: SHIP IT.
2:26 npm obnovi iz varnostne kopije, objavi postmortem naslednji dan, in v enem tednu uvede pravilo, ki še vedno velja: objavo lahko prekličete za štiriindvajset ur, po tem se pogovorite s človekom. Ponedeljek: vložite svojo datoteko lockfile, in če je funkcija enajst vrstic, je to odstavek, ne odvisnost. Pošljite mi incident, o katerem še vedno ne smete govoriti, v komentarjih ali na daily diff dot dev. In to je diff za danes.
2:48 Sem Niko iz Axrisija. Odgovorno združite.
Viri
- 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



