Jedanaest linija JavaScript-a slomilo je internet. Jedno depubliciranje.
22.
22. mart 2016, 21:30 UTC: programer depublicira svih 273 svoja npm paketa nakon što npm preda naziv paketa "kik" kompaniji Kik, aplikaciji za razmenu poruka, čiji je patentni zastupnik obećao "advokate koji će vam lupati na vrata". Jedan od 273 je left-pad: jedanaest linija koje stavljaju razmake ispred stringa, preuzete 2,5 miliona puta mesečno. U roku od nekoliko minuta Babel, React i Node buildovi padaju širom sveta, stotine u minuti. Fork se pojavljuje za deset minuta i ništa ne menja, jer Babel povlači left-pad kroz brojeve linija, što tačno vezuje 0.0.3. U 23:55 npm obnavlja izbrisanu verziju iz rezervne kopije — prvo "nedepubliciranje" u istoriji registra — i nedelju dana kasnije objavljuje pravilo o 24-časovnom depubliciranju. Postmortem, iz npm-ovog sopstvenog izveštaja i mejl prepiske koju je Kik objavio: registar koji je dopuštao bilo kom autoru da izbriše bilo koju verziju bez provere zavisnosti, tranzitivno stablo rešavano uživo pri svakoj instalaciji, bez lockfile-a podrazumevano. Git blame: 60 npm / 25 Kik / 15 navika zavisnosti. Presuda o popravci: SHIP IT.
Pročitajte pisano izdanje (engleski) ↗
Šta ovaj video pokriva
- 11. mar: Patentni zastupnik Kika traži od Azera Koçulua da preimenuje `kik`; sat kasnije: advokati "lupaju na vaša vrata i ukidaju vam naloge"; Azer: 30.000 $; Kik šalje mejlove npm podršci
- 18–20. mar: Izvršni direktor npm-a prenosi ime Kiku ("razumno bi očekivao da je povezano sa kik.com"); Azer traži da se svi njegovi moduli izbrišu
- 22. mar, 21:30–23:55 UTC: 273 paketa depublicirano; left-pad@0.0.3 404s u Babel, Atom, Node projektima; fork 1.0.0 u 21:42; tehnički direktor npm-a tvituje "un-un-publishing" u 23:03; 0.0.3 se vraća iz rezervne kopije u 23:55 — 2,5 sata
- 23. mar i 29. mar: npm-ov postmortem ("zeznuo sam stvar") i nova politika: depubliciranje samo u roku od 24 sata, sigurnosni rezervirani nazivi za uklonjena imena (72 h od 2020)
Preveden transkript
Prevedeno sa originalne engleske naracije. Dostupan audio i titlovi kontrolisani su od strane YouTube-a.
0:00 Jedan programer briše jedanaest linija JavaScript koda, i u roku od nekoliko minuta Babel, React i Node buildovi padaju širom sveta, stotine u minuti. Funkcija je left-pad. Ona popunjava string razmacima, i do kraja večeri npm radi jedinu stvar za koju kaže da ne može: ponovo objavljuje izbrisanu verziju. Kako se to dešava, zašto je to moguće i ko je kriv. Ovo je The Daily Diff, postmortem. 11. mart. Patentni zastupnik Kika, aplikacije za razmenu poruka,
0:26 šalje mejl Azeru Koçuluu: preimenujte svoj npm paket, kik je naš brend. Azer kaže ne. Sat kasnije: naši advokati za zaštitu žiga će vam lupati na vrata i ugasiti vaše naloge. Azer navodi cenu, trideset hiljada dolara, i Kik prosleđuje prepisku npm podršci. 18. mart. Izvršni direktor npm-a presuđuje da svako ko kuca npm install kik očekuje aplikaciju za razmenu poruka,
0:48 i predaje ime. Azer traži da se sve njegovo izbriše. Dva dana kasnije on to radi sam: dve stotine sedamdeset i tri paketa. 22. mart, 21:30 UTC. Svaki build koji posegne za left-padom dobija 404. Deset minuta kasnije stranac ga ponovo objavljuje kao 1.0.0, i ništa se ne menja, jer Babel i Atom ga učitavaju kroz paket pod nazivom line-numbers, koji tačno želi 0.0.3.
1:13 U 23:03 tehnički direktor npm-a tvituje: nedepubliciranje. U 23:55, 0.0.3 se vraća iz rezervne kopije. Dva i po sata. Zašto jedna osoba to može da uradi? Tri razloga. Svaka verzija na npm-u može biti izbrisana od strane njenog autora, trenutno, bez provere ko zavisi od nje. Drugo, zavisnosti su tranzitivne: Babel ne zna da left-pad postoji, zna line-numbers, i celo stablo se rešava uživo pri svakoj instalaciji.
1:36 Treće, 2016. godine ništa ne vezuje to stablo podrazumevano; lockfile-ovi su opcioni, pa svaki CI pokret ponovo pita internet kako izgleda jedanaest linija koda. Jedan registar, vođen od strane nikoga ko zavisi od njega. git blame. npm, šezdeset procenata: sopstveni postmortem kaže da je neograničeno depubliciranje izazvalo bol, i, citiram, "zeznuo sam stvar". Kik, dvadeset pet: patentni zastupnik, a ne advokat, obećava advokate na vratima zbog imena koje je Kik već odlučio da ne koristi. Navika zavisnosti, petnaest: svi koji su npm-instalirali jedanaest linija umesto
2:06 da ih kucaju. Uključujući Kik, čiji se buildovi takođe kvare. Radijus eksplozije: dve stotine sedamdeset i tri paketa povučena, jedan od njih preuzet dva i po miliona puta mesečno. Popravka traje dva i po sata; funkcija traje jedanaest linija. Na Hacker News-u, objava koja pita da li smo zaboravili kako da programiramo dostiže hiljadu sedamsto poena, uglavnom od ljudi čiji su buildovi još uvek crveni. Presuda, postmortem: ship it.
2:26 npm obnavlja iz rezervne kopije, objavljuje postmortem sledećeg dana, i u roku od nedelju dana objavljuje pravilo koje još uvek važi: možete depublicirati dvadeset četiri sata, nakon toga razgovarate sa čovekom. Ponedeljak: commitujte svoj lockfile, i ako funkcija ima jedanaest linija, to je paragraf, a ne zavisnost. Pošaljite mi incident o kojem još uvek ne smete da govorite, u komentarima, ili na the daily diff dot dev. I to je razlika za danas.
2:48 Ja sam Niko iz Axrisi. Spajajte odgovorno.
Izvori
- 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



