+− THE DAILY DIFFdev & AI news
SHIP IT

Sebelas baris JavaScript merusak internet. Satu "unpublish".

22 Maret 2016, 21:30 UTC: seorang pengembang "unpublish" semua 273 paket npm miliknya setelah npm menyerahkan nama paket "kik" kepada Kik, aplikasi pesan, yang agen patennya telah menjanjikan "pengacara akan mendatangi Anda".

22 Maret 2016, 21:30 UTC: seorang pengembang "unpublish" semua 273 paket npm miliknya setelah npm menyerahkan nama paket "kik" kepada Kik, aplikasi pesan, yang agen patennya telah menjanjikan "pengacara akan mendatangi Anda". Salah satu dari 273 adalah left-pad: sebelas baris yang menempatkan spasi di depan sebuah string, diunduh 2,5 juta kali sebulan. Dalam hitungan menit build Babel, React, dan Node gagal di seluruh dunia, ratusan per menit. Sebuah "fork" muncul dalam sepuluh menit dan tidak mengubah apa pun, karena Babel menarik left-pad melalui nomor baris, yang mengunci 0.0.3 dengan tepat. Pada 23:55 npm memulihkan versi yang dihapus dari cadangan — "un-un-publish" pertama dalam sejarah "registry" — dan seminggu kemudian mengirimkan aturan "unpublish" 24 jam. Postmortem, dari akun npm sendiri dan "e-mail thread" yang diterbitkan Kik: "registry" yang memungkinkan penulis mana pun menghapus versi apa pun tanpa pemeriksaan ketergantungan, pohon transitif diselesaikan langsung di setiap instalasi, tidak ada "lockfile" secara default. Git blame: 60 npm / 25 Kik / 15 kebiasaan ketergantungan. Putusan perbaikan: SHIP IT.

Baca edisi tertulis (Inggris) ↗

Isi video ini

  • 11 Mar: Agen paten Kik meminta Azer Koçulu untuk mengganti nama `kik`; satu jam kemudian: pengacara "akan mendatangi Anda dan menutup akun Anda"; Azer: $30.000; Kik mengirim email ke dukungan npm
  • 18–20 Mar: CEO npm mengalihkan nama ke Kik ("secara wajar akan mengharapkan hal itu terkait dengan kik.com"); Azer meminta semua modulnya dihapus
  • 22 Mar, 21:30–23:55 UTC: 273 paket "unpublished"; [email protected] 404 di proyek Babel, Atom, Node; "fork" 1.0.0 pada 21:42; CTO npm "tweet" "un-un-publishing" pada 23:03; 0.0.3 kembali dari "backup" pada 23:55 — 2,5 jam
  • 23 Mar dan 29 Mar: "postmortem" npm ("kami melakukan kesalahan") dan kebijakan baru: "unpublish" hanya dalam 24 jam, "placeholder" keamanan untuk nama yang dihapus (72 jam sejak 2020)

Transkrip terjemahan

Diterjemahkan dari narasi asli bahasa Inggris. Audio dan teks tersedia yang dikontrol oleh YouTube.

0:00 Seorang pengembang menghapus sebelas baris JavaScript, dan dalam hitungan menit Babel, Build React dan Node gagal di seluruh dunia, ratusan per menit. Fungsinya adalah left-pad. Itu mengisi string dengan spasi, dan pada akhir malam npm melakukan satu hal yang katanya tidak bisa dilakukan: menerbitkan kembali versi yang dihapus. Bagaimana itu terjadi, mengapa itu mungkin, dan siapa yang disalahkan. Ini adalah The Daily Diff, postmortem. 11 Maret. Seorang agen paten di Kik, aplikasi pesan,

0:26 mengirim email ke Azer Koçulu: ganti nama paket npm Anda, kik adalah merek kami. Azer mengatakan tidak. Satu jam kemudian: pengacara merek dagang kami akan mendatangi Anda dan menutup akun Anda. Azer menyebutkan harga, tiga puluh ribu dolar, dan Kik meneruskan "thread" ke dukungan npm. 18 Maret. CEO npm memutuskan bahwa siapa pun yang mengetik npm install kik mengharapkan aplikasi pesan,

0:48 dan menyerahkan nama itu. Azer meminta semua miliknya dihapus. Dua hari kemudian dia melakukannya sendiri: dua ratus tujuh puluh tiga paket. 22 Maret, 21:30 UTC. Setiap build yang mencari left-pad mendapatkan 404. Sepuluh menit kemudian orang asing menerbitkannya kembali sebagai 1.0.0, dan tidak ada yang berubah, karena Babel dan Atom memuatnya melalui paket yang disebut line-numbers, yang menginginkan 0.0.3 dengan tepat.

1:13 Pada 23:03 CTO npm "tweet": un-un-publishing. Pada 23:55, 0.0.3 kembali dari "backup". Dua setengah jam. Mengapa satu orang bisa melakukan ini? Tiga alasan. Setiap versi di npm dapat dihapus oleh penulisnya, secara instan, tanpa pemeriksaan siapa yang bergantung padanya. Kedua, ketergantungan bersifat transitif: Babel tidak tahu left-pad ada, itu tahu line-numbers, dan seluruh pohon diselesaikan langsung di setiap instalasi.

1:36 Ketiga, pada tahun 2016 tidak ada yang mengunci pohon itu secara default; "lockfiles" adalah "opt-in", jadi setiap "run CI" menanyakan kembali internet seperti apa sebelas baris kode itu. Satu "registry", dijalankan oleh orang yang tidak bergantung padanya. git blame. npm, enam puluh persen: "postmortem" sendiri mengatakan "unpublishing" tanpa batas menyebabkan masalah, dan, "quote", kami melakukan kesalahan. Kik, dua puluh lima: seorang agen paten, bukan pengacara, menjanjikan pengacara di depan pintu atas nama yang sudah diputuskan Kik untuk tidak digunakan. Kebiasaan ketergantungan, lima belas: setiap orang yang npm-install sebelas baris daripada

2:06 mengetiknya. Termasuk Kik, yang "build"-nya juga rusak. Radius ledakan: dua ratus tujuh puluh tiga paket ditarik, salah satunya diunduh dua setengah juta kali sebulan. Perbaikan memakan waktu dua setengah jam; fungsi memakan waktu sebelas baris. Di Hacker News, sebuah postingan menanyakan apakah kita lupa cara memprogram mencapai seribu tujuh ratus poin, sebagian besar dari orang-orang yang "build"-nya masih merah. Putusan, "postmortem": SHIP IT.

2:26 npm memulihkan dari "backup", memposting "postmortem" keesokan harinya, dan dalam seminggu mengirimkan aturan yang masih berlaku: Anda dapat "unpublish" selama dua puluh empat jam, setelah itu Anda berbicara dengan manusia. Senin: "commit" "lockfile" Anda, dan jika sebuah fungsi sebelas baris, itu adalah sebuah paragraf, bukan sebuah ketergantungan. Kirimkan kepada saya insiden yang masih belum boleh Anda bicarakan, di komentar, atau di daily diff dot dev. Dan itulah "diff" untuk hari ini.

2:48 Saya Niko dari Axrisi. Gabungkan dengan bertanggung jawab.

Sumber

  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

Video terkait