یازده خط جاوا اسکریپت اینترنت را از کار انداخت. یک لغو انتشار.
۲۲ مارس ۲۰۱۶، ۲۱:۳۰ UTC: یک توسعهدهنده پس از اینکه npm نام پکیج «kik» را به Kik، برنامه پیامرسان، واگذار کرد، تمام ۲۷۳ پکیج npm خود را از حالت انتشار خارج میکند؛ نماینده ثبت اختراع Kik وعده «وکلایی که به در خانهتان میکوبند» را داده بود.
۲۲ مارس ۲۰۱۶، ۲۱:۳۰ UTC: یک توسعهدهنده پس از اینکه npm نام پکیج «kik» را به Kik، برنامه پیامرسان، واگذار کرد، تمام ۲۷۳ پکیج npm خود را از حالت انتشار خارج میکند؛ نماینده ثبت اختراع Kik وعده «وکلایی که به در خانهتان میکوبند» را داده بود. یکی از آن ۲۷۳ پکیج left-pad است: یازده خط کدی که فضاهایی را در ابتدای یک رشته قرار میدهد و ماهانه ۲.۵ میلیون بار دانلود میشود. در عرض چند دقیقه، بیلدهای Babel، React و Node در سراسر جهان با شکست مواجه میشوند، صدها مورد در دقیقه. یک فورک در ده دقیقه ظاهر میشود و چیزی را تغییر نمیدهد، زیرا Babel از طریق شماره خطوط left-pad را میکشد، که دقیقاً 0.0.3 را مشخص میکند. در ساعت ۲۳:۵۵ npm نسخه حذف شده را از یک پشتیبان بازیابی میکند — اولین «لغو-لغو-انتشار» در تاریخ رجیستری — و یک هفته بعد قانون ۲۴ ساعته لغو انتشار را اعمال میکند. بررسی پس از حادثه، از حساب خود npm و ایمیلهای منتشر شده توسط Kik: رجیستری که به هر نویسندهای اجازه میداد هر نسخهای را بدون بررسی وابستگان حذف کند، درخت انتقالی به صورت زنده در هر نصب حل میشد، و به طور پیشفرض lockfile وجود نداشت. مقصر اصلی از دید Git: ۶۰ درصد npm / ۲۵ درصد Kik / ۱۵ درصد عادت به استفاده از وابستگیها. حکم برای اصلاح: SHIP IT.
نسخه نوشتاری را بخوانید (انگلیسی) ↗
این ویدیو چه مواردی را پوشش میدهد
- ۱۱ مارس: نماینده ثبت اختراع Kik از Azer Koçulu میخواهد تا نام `kik` را تغییر دهد؛ یک ساعت بعد: وکلای «درب خانهتان را میکوبند و حسابهایتان را میبندند»؛ Azer: ۳۰٬۰۰۰ دلار؛ Kik به پشتیبانی npm ایمیل میزند.
- ۱۸-۲۰ مارس: مدیرعامل npm نام را به Kik منتقل میکند («به طور منطقی انتظار میرود که با kik.com مرتبط باشد»)؛ Azer درخواست حذف تمام ماژولهایش را میکند.
- ۲۲ مارس، ۲۱:۳۰–۲۳:۵۵ UTC: ۲۷۳ پکیج از حالت انتشار خارج میشوند؛ [email protected] در پروژههای Babel، Atom و Node خطای 404 میدهد؛ فورک 1.0.0 در ۲۱:۴۲ ظاهر میشود؛ مدیر ارشد فناوری npm در ساعت ۲۳:۰۳ توییت میکند «لغو-لغو-انتشار»؛ 0.0.3 در ۲۳:۵۵ از پشتیبان بازگردانده میشود — ۲.۵ ساعت.
- ۲۳ مارس و ۲۹ مارس: گزارش پس از حادثه npm («ما کوتاهی کردیم») و سیاست جدید: لغو انتشار فقط در ۲۴ ساعت، نشانگرهای امنیتی برای نامهای حذف شده (۷۲ ساعت از سال ۲۰۲۰).
رونوشت ترجمه شده
ترجمه شده از روایت اصلی انگلیسی. صوت و زیرنویسهای موجود توسط YouTube کنترل میشوند.
0:00 یک توسعهدهنده یازده خط جاوا اسکریپت را حذف میکند، و در عرض چند دقیقه Babel، بیلدهای React و Node در سراسر جهان با شکست مواجه میشوند، صدها مورد در دقیقه. این تابع left-pad است. این تابع یک رشته را با فاصلهها پر میکند، و تا پایان عصر npm کاری را انجام میدهد که میگوید نمیتواند انجام دهد: یک نسخه حذف شده را دوباره منتشر کند. یک نسخه حذف شده را دوباره منتشر میکند. چگونه اتفاق میافتد، چرا ممکن است، و چه کسی مقصر است. این The Daily Diff است، بررسی پس از حادثه. ۱۱ مارس. یک نماینده ثبت اختراع در Kik، برنامه پیامرسان،
0:26 به Azer Koçulu ایمیل میزند: پکیج npm خود را تغییر نام دهید، kik نام تجاری ماست. Azer میگوید نه. یک ساعت بعد: وکلای علامت تجاری ما به در خانهتان میکوبند و حسابهایتان را مسدود میکنند. Azer قیمتی را اعلام میکند، سی هزار دلار، و Kik مکالمه را به پشتیبانی npm ارسال میکند. ۱۸ مارس. مدیرعامل npm حکم میدهد که هر کسی که npm install kik را تایپ میکند، انتظار برنامه پیامرسان
0:48 را دارد و نام را واگذار میکند. Azer درخواست حذف تمام محتوای خود را میکند. دو روز بعد خودش این کار را انجام میدهد: دویست و هفتاد و سه پکیج. ۲۲ مارس، ۲۱:۳۰ UTC. هر بیلدی که به left-pad نیاز دارد، خطای 404 دریافت میکند. ده دقیقه بعد یک غریبه آن را به عنوان 1.0.0 دوباره منتشر میکند، و هیچ چیز تغییر نمیکند، زیرا Babel و Atom آن را از طریق پکیجی به نام line-numbers بارگذاری میکنند، که دقیقاً 0.0.3 را میخواهد.
1:13 در ساعت ۲۳:۰۳ مدیر ارشد فناوری npm توییت میکند: un-un-publishing. در ساعت ۲۳:۵۵، 0.0.3 از یک پشتیبان بازگردانده میشود. دو و نیم ساعت. چرا یک نفر میتواند این کار را انجام دهد؟ سه دلیل. هر نسخهای در npm توسط نویسندهاش قابل حذف است، فوراً، بدون بررسی اینکه چه کسی به آن وابسته است. دوم، وابستگیها انتقالی هستند: Babel نمیداند left-pad وجود دارد، این خط-شمارهها را میشناسد، و کل درخت به صورت زنده در هر نصب حل میشود.
1:36 سوم، در سال ۲۰۱۶ هیچ چیز آن درخت را به طور پیشفرض تثبیت نمیکند؛ lockfileها اختیاری هستند، بنابراین هر بار اجرای CI دوباره از اینترنت میپرسد که یازده خط کد چگونه به نظر میرسند. یک رجیستری، که توسط هیچ کس که به آن وابسته است اداره نمیشود. مقصر Git. npm، شصت درصد: گزارش پس از حادثه خود میگوید انتشار نامحدود باعث دردسر شد، و به قول خودشان، ما کوتاهی کردیم. Kik، بیست و پنج درصد: یک نماینده ثبت اختراع، نه یک وکیل، وعده وکلا را در خانه میداد به خاطر نامی که Kik قبلاً تصمیم گرفته بود از آن استفاده نکند. عادت به وابستگی، پانزده درصد: همه کسانی که به جای تایپ کردن یازده خط، آن را از npm نصب کردند.
2:06 به جای تایپ کردن آنها. از جمله Kik، که بیلدهای آن نیز از کار افتاد. شعاع انفجار: دویست و هفتاد و سه پکیج حذف شد، یکی از آنها ماهانه دو و نیم میلیون بار دانلود میشد. رفع مشکل دو و نیم ساعت طول میکشد؛ تابع یازده خط طول میکشد. در Hacker News، پستی که میپرسید آیا فراموش کردهایم چگونه برنامهنویسی کنیم، هفده صد امتیاز میگیرد، عمدتاً از افرادی که بیلدهایشان هنوز قرمز است. حکم، پس از حادثه: SHIP IT.
2:26 npm از پشتیبان بازیابی میکند، گزارش پس از حادثه را روز بعد منتشر میکند، و در عرض یک هفته قانونی را اعمال میکند که هنوز پابرجاست: میتوانید برای بیست و چهار ساعت لغو انتشار کنید، پس از آن باید با یک انسان صحبت کنید. دوشنبه: lockfile خود را کامیت کنید، و اگر تابعی یازده خط است، آن یک پاراگراف است، نه یک وابستگی. حادثهای را که هنوز اجازه صحبت درباره آن را ندارید، در نظرات، یا در the daily diff dot dev برای من ارسال کنید. و این The Daily Diff برای امروز است.
2:48 من نیکو از Axrisi هستم. مسئولانه ادغام کنید.
منابع
- 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



