Labing-isang linya ng JavaScript ang sumira sa internet. Isang pag-unpublish.
Marso 22, 2016, 21:30 UTC: isang developer ang nag-unpublish ng lahat ng 273 ng kanyang npm packages matapos ibigay ng npm ang package name na "kik" sa Kik, ang messaging app, na ang ahente ng patente ay nangako ng "mga abogado na kumakatok sa iyong pinto".
Marso 22, 2016, 21:30 UTC: isang developer ang nag-unpublish ng lahat ng 273 ng kanyang npm packages matapos ibigay ng npm ang package name na "kik" sa Kik, ang messaging app, na ang ahente ng patente ay nangako ng "mga abogado na kumakatok sa iyong pinto". Isa sa 273 ay left-pad: labing-isang linya na naglalagay ng espasyo sa harap ng isang string, na-download ng 2.5 milyong beses sa isang buwan. Sa loob ng ilang minuto ang mga build ng Babel, React at Node ay bumagsak sa buong mundo, daan-daan kada minuto. Isang fork ang lumitaw sa loob ng sampung minuto at walang binago, dahil hinihila ng Babel ang left-pad sa pamamagitan ng line-numbers, na eksaktong nagtatakda ng 0.0.3. Sa 23:55 ibinalik ng npm ang naburang bersyon mula sa isang backup — ang unang "un-un-publish" sa kasaysayan ng registry — at pagkaraan ng isang linggo ay ipinadala ang 24-oras na panuntunan sa pag-unpublish. Postmortem, mula sa sariling account ng npm at ang e-mail thread na inilathala ng Kik: ang registry na nagpapahintulot sa sinumang may-akda na magtanggal ng anumang bersyon nang walang dependents check, ang transitive tree na nareresolba nang live sa bawat pag-install, walang lockfile bilang default. Git blame: 60 npm / 25 Kik / 15 ang dependency habit. Hatol sa pag-aayos: SHIP IT.
Basahin ang nakasulat na edisyon (English) ↗
Ang sakop ng video na ito
- Mar 11: Hinihiling ng ahente ng patente ng Kik kay Azer Koçulu na palitan ang pangalan ng `kik`; pagkaraan ng isang oras: mga abogado "na kumakatok sa iyong pinto at nagtatanggal ng iyong mga account"; Azer: $30,000; Nag-e-mail ang Kik sa npm support
- Mar 18–20: Inilipat ng CEO ng npm ang pangalan sa Kik ("makatuwirang asahan na may kaugnayan ito sa kik.com"); Hinihiling ni Azer na burahin ang lahat ng kanyang modules
- Mar 22, 21:30–23:55 UTC: 273 packages na-unpublish; [email protected] 404s sa Babel, Atom, Node projects; fork 1.0.0 sa 21:42; Nag-tweet ang CTO ng npm ng "un-un-publishing" sa 23:03; 0.0.3 bumalik mula sa backup sa 23:55 — 2.5 oras
- Mar 23 at Mar 29: Postmortem ng npm ("bumagsak kami") at ang bagong patakaran: unpublish lamang sa loob ng 24 na oras, security placeholders para sa mga inalis na pangalan (72 h mula 2020)
Isinaling transcript
Isinalin mula sa orihinal na salaysay sa English. Ang available na audio at mga caption ay kinokontrol ng YouTube.
0:00 Isang developer ang nagbubura ng labing-isang linya ng JavaScript, at sa loob ng ilang minuto ang Babel, Ang mga build ng React at Node ay bumabagsak sa buong mundo, daan-daan bawat minuto. Ang function ay left-pad. Naglalagay ito ng espasyo sa isang string, at sa pagtatapos ng gabi, ginagawa ng npm ang isang bagay na sinasabi nitong hindi nito magagawa: muling i-publish ang isang naburang bersyon. Paano ito nangyari, bakit ito posible, at sino ang may kasalanan. Ito ang The Daily Diff, postmortem. Marso 11. Isang ahente ng patente sa Kik, ang messaging app,
0:26 nag-e-mail kay Azer Koçulu: palitan ang pangalan ng iyong npm package, ang kik ay aming brand. Sinabi ni Azer na hindi. Pagkaraan ng isang oras: ang aming mga abogado ng trademark ay kakatok sa iyong pinto at tatalian ang iyong mga account. Naglagay ng presyo si Azer, tatlumpung libong dolyar, at ipinasa ng Kik ang thread sa npm suporta. Marso 18. Nagpasya ang CEO ng npm na sinumang nagta-type ng npm install kik ay inaasahan ang messaging
0:48 app, at ibinigay ang pangalan. Hiningi ni Azer na burahin ang lahat ng kanya. Pagkaraan ng dalawang araw ay ginawa niya ito mismo: dalawang daan at pitumpu't tatlong packages. Marso 22, 21:30 UTC. Bawat build na naghahanap ng left-pad ay nakakakuha ng 404. Sampung minuto mamaya ay muling inilabas ito ng isang estranghero bilang 1.0.0, at walang nagbago, dahil kinakarga ito ng Babel at Atom sa pamamagitan ng isang package na tinatawag na line-numbers, na eksaktong gusto ng 0.0.3.
1:13 Sa 23:03 nag-tweet ang CTO ng npm: un-un-publishing. Sa 23:55, bumalik ang 0.0.3 mula sa isang backup. Dalawa't kalahating oras. Bakit magagawa ito ng isang tao? Tatlong dahilan. Anumang bersyon sa npm ay maaaring burahin ng may-akda nito, kaagad, nang walang pagsusuri kung sino ang umaasa dito. Pangalawa, ang mga dependency ay transitive: hindi alam ng Babel na mayroong left-pad, alam nito ang line-numbers, at ang buong tree ay nareresolba nang live sa bawat pag-install.
1:36 Pangatlo, noong 2016 walang nagtatakda ng tree na iyon bilang default; ang mga lockfile ay opt-in, kaya bawat CI run ay muling nagtatanong sa internet kung ano ang hitsura ng labing-isang linya ng code. Isang registry, pinapatakbo ng walang sinumang umaasa dito. git blame. npm, animnapung porsyento: ang sarili nitong postmortem ay nagsasabing ang hindi pinaghihigpitang pag-unpublish ay sanhi ng sakit, at, quote, nagkamali kami. Kik, dalawampu't lima: isang ahente ng patente, hindi abogado, nangangako ng mga abogado sa pinto para sa isang pangalan na napagdesisyunan na ng Kik na hindi gamitin. Ang dependency habit, labinlima: lahat ng nag-npm-install ng labing-isang linya sa halip na
2:06 i-type ang mga ito. Kabilang ang Kik, na ang mga build ay nasira rin. Laki ng pinsala: dalawang daan at pitumpu't tatlong packages na nakuha, isa sa mga ito ay na-download ng dalawa't kalahating milyong beses sa isang buwan. Ang pag-aayos ay tumatagal ng dalawa't kalahating oras; ang function ay tumatagal ng labing-isang linya. Sa Hacker News, isang post na nagtatanong kung nakalimutan na natin kung paano mag-program ay nakakuha ng labimpitong daang puntos, karamihan mula sa mga taong ang mga build ay pula pa rin. Hatol, postmortem: SHIP IT.
2:26 Nag-restore ang npm mula sa backup, nag-post ng postmortem kinabukasan, at sa loob ng isang linggo ay ipinadala ang panuntunan na umiiral pa rin: maaari kang mag-unpublish sa loob ng dalawampu't apat na oras, pagkatapos nito ay makikipag-usap ka sa isang tao. Lunes: i-commit ang iyong lockfile, at kung ang isang function ay labing-isang linya, ito ay isang talata, hindi isang dependency. Ipadala sa akin ang insidente na hindi mo pa rin pinapayagang pag-usapan, sa mga komento, o sa the daily diff dot dev. At iyan ang diff para sa araw na ito.
2:48 Ako si Niko mula sa Axrisi. Merge responsibly.
Mga Pinagmulan
- 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



