Sebelas baris JavaScript "memecahkan internet". Satu "unpublish".
22 Mac 2016, 21:30 UTC: seorang pembangun membatalkan penerbitan kesemua 273 pakej npm beliau selepas npm menyerahkan nama pakej "kik" kepada Kik, aplikasi pemesejan, yang ejen patennya telah berjanji "peguam akan mengetuk pintu anda".
22 Mac 2016, 21:30 UTC: seorang pembangun membatalkan penerbitan kesemua 273 pakej npm beliau selepas npm menyerahkan nama pakej "kik" kepada Kik, aplikasi pemesejan, yang ejen patennya telah berjanji "peguam akan mengetuk pintu anda". Salah satu daripada 273 adalah left-pad: sebelas baris yang meletakkan ruang di hadapan rentetan, dimuat turun 2.5 juta kali sebulan. Dalam beberapa minit binaan Babel, React dan Node gagal di seluruh dunia, ratusan setiap minit. "Fork" muncul dalam sepuluh minit dan tidak mengubah apa-apa, kerana Babel menarik left-pad melalui nombor baris, yang mengunci 0.0.3 dengan tepat. Pada 23:55 npm memulihkan versi yang dipadam daripada sandaran — "un-un-publish" pertama dalam sejarah "registry" — dan seminggu kemudian melancarkan peraturan "unpublish" 24 jam. Postmortem, daripada akaun npm sendiri dan utas e-mel yang diterbitkan oleh Kik: "registry" yang membenarkan mana-mana penulis memadam mana-mana versi tanpa semakan tanggungan, "transitive tree" diselesaikan secara langsung pada setiap pemasangan, tiada fail kunci secara lalai. Git blame: 60 npm / 25 Kik / 15 tabiat pergantungan. Keputusan mengenai pembetulan: SHIP IT.
Baca edisi bertulis (Bahasa Inggeris) ↗
Apa yang diliputi video ini
- 11 Mac: Ejen paten Kik meminta Azer Koçulu untuk menamakan semula `kik`; sejam kemudian: peguam "mengetuk pintu anda dan menutup akaun anda"; Azer: $30,000; Kik menghantar e-mel sokongan npm
- 18–20 Mac: CEO npm memindahkan nama tersebut kepada Kik ("secara munasabah menjangkakan ia berkaitan dengan kik.com"); Azer meminta semua modulnya dipadam
- 22 Mac, 21:30–23:55 UTC: 273 pakej dibatalkan penerbitan; left-pad@0.0.3 404s dalam projek Babel, Atom, Node; fork 1.0.0 pada 21:42; CTO npm tweet "un-un-publishing" pada 23:03; 0.0.3 kembali daripada sandaran pada 23:55 — 2.5 jam
- 23 Mac dan 29 Mac: "postmortem" npm ("kami terlepas pandang") dan dasar baru: "unpublish" hanya dalam masa 24 jam, pemegang tempat keselamatan untuk nama yang dialih keluar (72 jam sejak 2020)
Transkrip terjemahan
Diterjemahkan daripada penceritaan asal Bahasa Inggeris. Audio dan kapsyen yang tersedia dikawal oleh YouTube.
0:00 Seorang pembangun memadam sebelas baris JavaScript, dan dalam beberapa minit Babel, binaan React dan Node gagal di seluruh dunia, ratusan setiap minit. Fungsinya ialah left-pad. Ia memenuhkan rentetan dengan ruang, dan menjelang akhir malam npm melakukan satu perkara yang dikatakan tidak dapat dilakukan: menerbitkan semula versi yang dipadam. Bagaimana ia berlaku, mengapa ia mungkin, dan siapa yang patut dipersalahkan. Ini adalah The Daily Diff, postmortem. 11 Mac. Seorang ejen paten di Kik, aplikasi pemesejan,
0:26 menghantar e-mel kepada Azer Koçulu: namakan semula pakej npm anda, kik adalah jenama kami. Azer berkata tidak. Sejam kemudian: peguam cap dagang kami akan mengetuk pintu anda dan menutup akaun anda. Azer menyebut harga, tiga puluh ribu dolar, dan Kik memajukan utas tersebut kepada npm sokongan. 18 Mac. CEO npm memutuskan bahawa sesiapa yang menaip npm install kik menjangkakan aplikasi
0:48 pemesejan, dan menyerahkan nama tersebut. Azer meminta semua yang dimilikinya dipadam. Dua hari kemudian dia melakukannya sendiri: dua ratus tujuh puluh tiga pakej. 22 Mac, 21:30 UTC. Setiap binaan yang mencapai left-pad mendapat 404. Sepuluh minit kemudian seorang asing menerbitkannya semula sebagai 1.0.0, dan tiada apa yang berubah, kerana Babel dan Atom memuatkannya melalui pakej yang dipanggil nombor baris, yang mahukan 0.0.3 dengan tepat.
1:13 Pada 23:03 CTO npm tweet: un-un-publishing. Pada 23:55, 0.0.3 kembali daripada sandaran. Dua setengah jam. Mengapa seorang boleh melakukan ini? Tiga sebab. Mana-mana versi pada npm boleh dipadam oleh pengarangnya, serta-merta, tanpa semakan siapa yang bergantung padanya. Kedua, kebergantungan adalah transitif: Babel tidak tahu left-pad wujud, ia tahu nombor baris, dan keseluruhan pokok diselesaikan secara langsung pada setiap pemasangan.
1:36 Ketiga, pada tahun 2016 tiada apa yang mengunci pokok itu secara lalai; fail kunci adalah "opt-in", jadi setiap "run" CI bertanya semula kepada internet bagaimana rupa sebelas baris kod. Satu "registry", dijalankan oleh tiada siapa yang bergantung padanya. git blame. npm, enam puluh peratus: "postmortem" sendiri mengatakan "unpublishing" tanpa sekatan menyebabkan kesakitan, dan, quote, kami terlepas pandang. Kik, dua puluh lima: seorang ejen paten, bukan peguam, menjanjikan peguam di pintu kerana nama yang telah diputuskan oleh Kik untuk tidak digunakan. Tabiat kebergantungan, lima belas: semua orang yang npm-install sebelas baris, sebaliknya
2:06 daripada menaipnya. Termasuk Kik, yang binaannya juga rosak. Jejari letupan: dua ratus tujuh puluh tiga pakej ditarik, salah satunya dimuat turun dua setengah juta kali sebulan. Pembetulan mengambil masa dua setengah jam; fungsi itu mengambil sebelas baris. Di Hacker News, satu pos bertanya sama ada kita telah lupa cara memprogram mencapai seribu tujuh ratus mata, kebanyakannya daripada orang yang binaannya masih merah. Keputusan, postmortem: SHIP IT.
2:26 npm memulihkan daripada sandaran, menyiarkan "postmortem" keesokan harinya, dan dalam masa seminggu melancarkan peraturan yang masih kekal: anda boleh "unpublish" selama dua puluh empat jam, selepas itu anda bercakap dengan manusia. Isnin: komit fail kunci anda, dan jika fungsi adalah sebelas baris, ia adalah perenggan, bukan kebergantungan. Hantar saya insiden yang anda masih tidak dibenarkan untuk bercakap mengenainya, dalam komen, atau di the daily diff dot dev. Dan itu "the diff" untuk hari ini.
2:48 Saya Niko dari Axrisi. Gabung dengan bertanggungjawab.
Sumber
- 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



