# أحد عشر سطرًا من جافا سكريبت عطّلت الإنترنت. عملية إلغاء نشر واحدة.

Published: 2026-09-13

22 مارس 2016، 21:30 بالتوقيت العالمي المنسق: مطور يلغي نشر جميع حزم npm الـ 273 الخاصة به بعد أن سلمت npm اسم الحزمة "kik" لتطبيق Kik، تطبيق المراسلة، الذي وعد وكيل براءات الاختراع الخاص به بـ "محامين يقرعون بابك". واحدة من الـ 273 هي left-pad: أحد عشر سطرًا تضع مسافات أمام سلسلة نصية، تم تنزيلها 2.5 مليون مرة شهريًا. في غضون دقائق، تفشل عمليات بناء Babel وReact وNode في جميع أنحاء العالم، مئات في الدقيقة. يظهر تفرع في عشر دقائق ولا يغير شيئًا، لأن Babel يسحب left-pad عبر أرقام الأسطر، مما يثبت 0.0.3 بالضبط. في 23:55، تستعيد npm الإصدار المحذوف من نسخة احتياطية - أول "إلغاء إلغاء نشر" في تاريخ السجل - وبعد أسبوع، تطبق قاعدة إلغاء النشر لمدة 24 ساعة. ما بعد الكارثة، من حساب npm الخاص وسلسلة رسائل البريد الإلكتروني التي نشرتها Kik: السجل الذي سمح لأي مؤلف بحذف أي إصدار بدون فحص التبعيات، الشجرة الانتقالية التي يتم حلها مباشرةً عند كل تثبيت، ولا يوجد ملف قفل افتراضيًا. لوم Git: 60 npm / 25 Kik / 15 عادة التبعية. الحكم على الإصلاح: SHIP IT.

Canonical: https://thedailydiff.dev/ar/video/2026-09-13-left-pad/

## ما يغطيه هذا الفيديو

- 11 مارس: وكيل براءات الاختراع لشركة Kik يطلب من أذر كوتشولو إعادة تسمية \`kik\`؛ بعد ساعة: محامون "يقرعون بابك ويغلقون حساباتك"؛ أذر: 30,000 دولار؛ Kik ترسل رسائل بريد إلكتروني إلى دعم npm
- 18-20 مارس: الرئيس التنفيذي لشركة npm ينقل الاسم إلى Kik ("يتوقع بشكل معقول أن يكون مرتبطًا بـ kik.com")؛ أذر يطلب حذف جميع وحداته
- 22 مارس، 21:30-23:55 بالتوقيت العالمي المنسق: 273 حزمة غير منشورة؛ left-pad@0.0.3 404s في مشاريع Babel، Atom، Node؛ تفرع 1.0.0 في 21:42؛ المدير التقني لشركة npm يغرد "إلغاء إلغاء النشر" في 23:03؛ 0.0.3 يعود من النسخة الاحتياطية في 23:55 — ساعتان ونصف
- 23 مارس و 29 مارس: تقرير npm لما بعد الحادث ("لقد أهملنا الأمر") والسياسة الجديدة: إلغاء النشر فقط في غضون 24 ساعة، وحوامل أمنية للأسماء المحذوفة (72 ساعة منذ 2020)

## النص المترجم

مترجم من السرد الإنجليزي الأصلي. يتم التحكم في الصوت والتعليقات التوضيحية المتاحة بواسطة YouTube.

0:00 مطور واحد يحذف أحد عشر سطرًا من جافا سكريبت، وفي غضون دقائق Babel، وReact وNode تبدأ في الفشل عالميًا، مئات في الدقيقة. الدالة هي left-pad. إنها تضع مسافات في بداية سلسلة نصية، وبحلول نهاية المساء، تفعل npm الشيء الوحيد الذي تقول إنها لا تستطيع فعله: إعادة نشر نسخة محذوفة. كيف يحدث ذلك، ولماذا هو ممكن، ومن يتحمل اللوم. هذا هو The Daily Diff، ما بعد الكارثة. الحادي عشر من مارس. وكيل براءات اختراع في Kik، تطبيق المراسلة،

0:26 يرسل بريدًا إلكترونيًا إلى أذر كوتشولو: أعد تسمية حزمة npm الخاصة بك، kik هي علامتنا التجارية. أذر يقول لا. بعد ساعة: محامو علامتنا التجارية سيقرعون بابك و يغلقون حساباتك. أذر يحدد سعرًا، ثلاثين ألف دولار، وتقوم Kik بإعادة توجيه الموضوع إلى دعم npm. الثامن عشر من مارس. يحكم الرئيس التنفيذي لـ npm بأن أي شخص يكتب npm install kik يتوقع تطبيق

0:48 المراسلة، ويسلم الاسم. يطلب أذر حذف كل شيء خاص به. بعد يومين يقوم بذلك بنفسه: مائتان وثلاثة وسبعون حزمة. 22 مارس، 21:30 بالتوقيت العالمي المنسق. كل عملية بناء تتطلب left-pad تحصل على خطأ 404. بعد عشر دقائق، يعيد غريب نشرها كـ 1.0.0، ولا يتغير شيء، لأن Babel و Atom يحمّلانها عبر حزمة تسمى line-numbers، والتي تريد 0.0.3 بالضبط.

1:13 في 23:03، يغرد المدير التقني لـ npm: un-un-publishing (إلغاء إلغاء النشر). في 23:55، يعود 0.0.3 من نسخة احتياطية. ساعتان ونصف. لماذا يمكن لشخص واحد أن يفعل هذا؟ ثلاثة أسباب. أي نسخة على npm قابلة للحذف من قبل مؤلفها، فوراً، بدون فحص لمن يعتمد عليها. ثانياً، التبعيات متعدية: Babel لا يعرف أن left-pad موجودة، إنه يعرف line-numbers، ويتم حل الشجرة بأكملها مباشرة عند كل تثبيت.

1:36 ثالثاً، في عام 2016، لا يوجد شيء يثبت تلك الشجرة افتراضياً؛ ملفات القفل اختيارية، لذلك كل تشغيل تكامل مستمر (CI) يعيد سؤال الإنترنت عن شكل أحد عشر سطرًا من التعليمات البرمجية. سجل واحد، لا يديره أحد يعتمد عليه. لوم Git. npm، ستون بالمائة: تقريرها الخاص لما بعد الكارثة يقول إن إلغاء النشر غير المقيد تسبب في الألم، و، اقتباس، لقد أهملنا الأمر. Kik، خمسة وعشرون بالمائة: وكيل براءات اختراع، وليس محامياً، يوعد بمحامين على الباب بسبب اسم قررت Kik بالفعل عدم استخدامه. عادة الاعتماد، خمسة عشر بالمائة: كل من قام بتثبيت أحد عشر سطرًا باستخدام npm بدلاً

2:06 من كتابتها. بما في ذلك Kik، التي تعطلت عمليات بنائها أيضاً. نطاق التأثير: مائتان وثلاثة وسبعون حزمة تم سحبها، إحداها تم تنزيلها مليونين ونصف مليون مرة شهرياً. يستغرق الإصلاح ساعتين ونصف؛ والدالة تستغرق أحد عشر سطرًا. على Hacker News، منشور يسأل عما إذا كنا قد نسينا كيفية البرمجة يحصد سبعة عشر مائة نقطة، معظمها من أشخاص لا تزال عمليات بنائهم حمراء. الحكم، بعد الحادث: SHIP IT.

2:26 تستعيد npm من النسخة الاحتياطية، وتنشر تقرير ما بعد الكارثة في اليوم التالي، وفي غضون أسبوع تطبق القاعدة التي لا تزال قائمة: يمكنك إلغاء النشر لمدة أربع وعشرين ساعة، بعد ذلك تتحدث مع إنسان. الاثنين: التزم بملف القفل الخاص بك، وإذا كانت الدالة أحد عشر سطرًا، فهي فقرة، وليست تبعية. أرسل لي الحادث الذي لا يزال غير مسموح لك بالتحدث عنه، في التعليقات، أو على daily diff dot dev. وهذا هو الـ diff لهذا اليوم.

2:48 أنا نيكو من Axrisi. ادمج بمسؤولية.

## المصادر

- [npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)](https://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm) — blog.npmjs.org
- [npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)](https://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy) — blog.npmjs.org
- [Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)](https://web.archive.org/web/20160323201305/https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c) — web.archive.org
- [Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)](https://web.archive.org/web/20170112194445/https://medium.com/@mproberts/a-discussion-about-the-breaking-of-the-internet-3d4d2a83aa4d) — web.archive.org
- [Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTC](https://x.com/seldo/status/712414400808755200) — x.com
- [left-pad 0.0.3 on the npm registry (the eleven lines)](https://registry.npmjs.org/left-pad/0.0.3) — registry.npmjs.org
- [Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)](https://news.ycombinator.com/item?id=11340510) — news.ycombinator.com
- [Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)](https://news.ycombinator.com/item?id=11348798) — news.ycombinator.com
- [Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)](https://news.ycombinator.com/item?id=11382885) — news.ycombinator.com
- [The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"](https://www.theregister.com/2016/03/23/npm_left_pad_chaos/) — www.theregister.com
