+− THE DAILY DIFFdev & AI news
SHIP IT

Jedanaest linija JavaScripta srušilo je internet. Jedna de-objava.

22.

22. ožujka 2016., 21:30 UTC: programer de-objavljuje svih 273 svoja npm paketa nakon što npm preda naziv paketa "kik" Kik-u, aplikaciji za razmjenu poruka, čiji je patentni zastupnik obećao "odvjetnike koji će vam kucati na vrata". Jedan od 273 je left-pad: jedanaest linija koje stavljaju razmake ispred niza znakova, preuzeto 2,5 milijuna puta mjesečno. U roku od nekoliko minuta Babel, React i Node buildovi padaju diljem svijeta, stotine u minuti. Fork se pojavljuje za deset minuta i ništa ne mijenja, jer Babel povlači left-pad kroz brojeve linija, što točno fiksira 0.0.3. U 23:55 npm vraća izbrisanu verziju iz sigurnosne kopije — prva "de-de-objava" u povijesti repozitorija — a tjedan dana kasnije uvodi pravilo o 24-satnoj de-objavi. Postmortem, iz vlastitog izvještaja npm-a i e-mail prepiske koju je Kik objavio: repozitorij koji je dopustio svakom autoru da izbriše bilo koju verziju bez provjere ovisnosti, tranzitivno stablo riješeno uživo pri svakoj instalaciji, bez lockfile-a po zadanoj postavci. Git krivnja: 60 npm / 25 Kik / 15 navika ovisnosti. Presuda o popravku: SHIP IT.

Pročitajte pisano izdanje (engleski) ↗

Što ovaj video pokriva

  • 11. ožujka: Patentni zastupnik Kika traži od Azera Koçulua da preimenuje `kik`; sat vremena kasnije: odvjetnici "koji vam kucaju na vrata i zatvaraju vam račune"; Azer: 30.000 dolara; Kik šalje e-mail npm podršci
  • 18.–20. ožujka: CEO npm-a prebacuje ime na Kik ("razumno bi očekivao da je povezano s kik.com"); Azer traži brisanje svih svojih modula
  • 22. ožujka, 21:30–23:55 UTC: 273 paketa de-objavljena; left-pad@0.0.3 404s u Babel, Atom, Node projektima; fork 1.0.0 u 21:42; CTO npm-a tvita "un-un-publishing" u 23:03; 0.0.3 vraćen iz sigurnosne kopije u 23:55 — 2,5 sata
  • 23. i 29. ožujka: postmortem npm-a ("podbacili smo") i nova politika: de-objava samo unutar 24 sata, sigurnosni rezervirani nazivi za uklonjene nazive (72 h od 2020.)

Prevedeni transkript

Prevedeno iz izvornog engleskog pripovijedanja. Dostupni zvuk i titlovi kontroliraju se putem YouTubea.

0:00 Jedan programer briše jedanaest linija JavaScripta, i u roku od nekoliko minuta Babel, React i Node buildovi padaju diljem svijeta, stotine u minuti. Funkcija je left-pad. Ona puni niz razmacima, a do kraja večeri npm radi jedinu stvar za koju kaže da ne može: ponovno objaviti izbrisanu verziju. Kako se to događa, zašto je to moguće i tko je kriv. Ovo je The Daily Diff, postmortem. 11. ožujka. Patentni zastupnik Kika, aplikacije za razmjenu poruka,

0:26 šalje e-mail Azeru Koçuluu: preimenujte svoj npm paket, kik je naš brand. Azer kaže ne. Sat vremena kasnije: naši odvjetnici za zaštitne znakove kucat će vam na vrata i zatvarati vam račune. Azer navodi cijenu, trideset tisuća dolara, i Kik prosljeđuje prepisku npm-u podršci. 18. ožujka. CEO npm-a donosi odluku da svatko tko upiše npm install kik očekuje aplikaciju za razmjenu

0:48 poruka, i predaje ime. Azer traži brisanje svega što je njegovo. Dva dana kasnije to čini sam: dvjesto sedamdeset i tri paketa. 22. ožujka, 21:30 UTC. Svaki build koji poseže za left-padom dobiva 404. Deset minuta kasnije stranac ga ponovno objavljuje kao 1.0.0, i ništa se ne mijenja, jer Babel i Atom ga učitavaju putem paketa nazvanog line-numbers, koji želi točno 0.0.3.

1:13 U 23:03 CTO npm-a tvita: un-un-publishing. U 23:55, 0.0.3 je vraćen iz sigurnosne kopije. Dva i pol sata. Zašto jedna osoba to može učiniti? Tri razloga. Bilo koja verzija na npm-u može se izbrisati od strane autora, trenutno, bez provjere tko ovisi o njoj. Drugo, ovisnosti su tranzitivne: Babel ne zna da left-pad postoji, zna line-numbers, i cijelo stablo se rješava uživo pri svakoj instalaciji.

1:36 Treće, 2016. ništa ne fiksira to stablo po zadanoj postavci; lockfile-ovi su opt-in, pa svako CI pokretanje ponovno pita internet kako izgleda jedanaest linija koda. Jedan repozitorij, kojim ne upravlja nitko tko o njemu ovisi. git krivnja. npm, šezdeset posto: vlastiti postmortem kaže da neograničeno de-objavljivanje je uzrokovalo bol, i, citiram, podbacili smo. Kik, dvadeset pet: patentni zastupnik, a ne odvjetnik, obećavajući odvjetnike na vratima zbog imena koje je Kik već odlučio ne koristiti. Navika ovisnosti, petnaest: svatko tko je npm-instalirao jedanaest linija umjesto

2:06 da ih je sam napisao. Uključujući Kik, čiji su se buildovi također srušili. Radijus eksplozije: dvjesto sedamdeset i tri paketa povučena, jedan od njih preuzet dva i pol milijuna puta mjesečno. Popravak traje dva i pol sata; funkcija traje jedanaest linija. Na Hacker News-u, objava koja pita jesmo li zaboravili kako programirati postiže sedamnaest stotina bodova, uglavnom od ljudi čiji su buildovi još uvijek crveni. Presuda, postmortem: SHIP IT.

2:26 npm vraća iz sigurnosne kopije, objavljuje postmortem sljedeći dan, i unutar tjedan dana uvodi pravilo koje još uvijek vrijedi: možete de-objaviti unutar dvadeset četiri sata, nakon toga razgovarate s čovjekom. Ponedjeljak: commitajte svoj lockfile, i ako funkcija ima jedanaest linija, to je paragraf, a ne ovisnost. Pošaljite mi incident o kojem još uvijek ne smijete govoriti, u komentarima, ili na daily diff dot dev. I to je diff za danas.

2:48 Ja sam Niko iz Axrisija. Spajajte odgovorno.

Izvori

  1. npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)blog.npmjs.org
  2. npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)blog.npmjs.org
  3. Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)web.archive.org
  4. Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)web.archive.org
  5. Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTCx.com
  6. left-pad 0.0.3 on the npm registry (the eleven lines)registry.npmjs.org
  7. Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)news.ycombinator.com
  8. Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)news.ycombinator.com
  9. Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)news.ycombinator.com
  10. The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"www.theregister.com

Povezani videozapisi