# אחד עשר שורות של JavaScript שברו את האינטרנט. הסרה אחת.

Published: 2026-09-13

22 במרץ 2016, 21:30 UTC: מפתח מבטל פרסום של כל 273 חבילות ה-npm שלו לאחר ש-npm העבירה את שם החבילה "kik" ל-Kik, אפליקציית ההודעות, שסוכן הפטנטים שלה הבטיח "עורכי דין ידפקו על דלתכם". אחת מ-273 החבילות היא left-pad: אחת עשרה שורות שמציבות רווחים לפני מחרוזת, שהורדה 2.5 מיליון פעמים בחודש. תוך דקות בוני Babel, React ו-Node נכשלו ברחבי העולם, מאות לדקה. "פורק" (fork) הופיע תוך עשר דקות ולא שינה דבר, מכיוון ש-Babel מושך את left-pad באמצעות מספרי שורות, מה שקובע בדיוק את גרסה 0.0.3. בשעה 23:55 npm שחזרה את הגרסה שנמחקה מגיבוי – ה"ביטול-ביטול פרסום" הראשון בהיסטוריית הרישום – ושבוע לאחר מכן הוציאה את חוק ביטול הפרסום של 24 שעות. לאחר מכן, מתוך הדו"ח של npm עצמה ושרשור האימייל שפרסמה Kik: הרישום שאפשר לכל מחבר למחוק כל גרסה ללא בדיקת תלויות, העץ הטרינזיטיבי שנפתר בזמן אמת בכל התקנה, ללא קובץ נעילה (lockfile) כברירת מחדל. Git blame: 60 npm / 25 Kik / 15 הרגל התלויות. פסק הדין על התיקון: SHIP IT.

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

## מה מכסה הסרטון הזה

- 11 במרץ: סוכן הפטנטים של Kik מבקש מאזר קוצ'ולו לשנות את שם \`kik\`; שעה לאחר מכן: עורכי דין "דופקים על דלתך ומורידים את חשבונותיך"; אזר: 30,000 דולר; Kik שולחת אימייל לתמיכת npm
- 18–20 במרץ: מנכ"ל npm מעביר את השם ל-Kik ("ניתן לצפות באופן סביר שהוא יהיה קשור ל-kik.com"); אזר מבקש למחוק את כל המודולים שלו
- 22 במרץ, 21:30–23:55 UTC: 273 חבילות בוטלו; left-pad@0.0.3 מחזיר 404 בפרויקטי Babel, Atom, Node; fork 1.0.0 בשעה 21:42; ה-CTO של npm מצייץ "un-un-publishing" בשעה 23:03; 0.0.3 חוזר מגיבוי בשעה 23:55 – שעתיים וחצי
- 23 במרץ ו-29 במרץ: דו"ח "לאחר מעשה" של npm ("פישלנו") והמדיניות החדשה: ביטול פרסום רק תוך 24 שעות, "פלייסולדרים" (placeholders) אבטחתיים לשמות שהוסרו (72 שעות מאז 2020)

## תמליל מתורגם

תורגם מהקריינות המקורית באנגלית. זמינות אודיו וכתוביות נשלטת על ידי YouTube.

0:00 מפתח אחד מוחק אחד עשר שורות של JavaScript, ותוך דקות Babel, React ו-Node נכשלים בבנייה ברחבי העולם, מאות לדקה. הפונקציה היא left-pad. היא ממלאת מחרוזת ברווחים, ועד סוף הערב npm עושה את הדבר האחד שלדבריה היא לא יכולה לעשות: לפרסם מחדש גרסה שנמחקה. איך זה קורה, למה זה אפשרי, ומי אשם. זה ה-The Daily Diff, דו"ח לאחר מעשה. ה-11 במרץ. סוכן פטנטים ב-Kik, אפליקציית ההודעות,

0:26 שולח אימייל לאזר קוצ'ולו: שנה את שם חבילת ה-npm שלך, kik הוא המותג שלנו. אזר אומר לא. שעה לאחר מכן: עורכי הדין של הסימן המסחרי שלנו ידפקו על דלתך ו יסגרו את חשבונותיך. אזר נוקב במחיר, שלושים אלף דולר, ו-Kik מעבירה את השרשור ל-npm תמיכה. ה-18 במרץ. מנכ"ל npm קובע שכל מי שמקליד npm install kik מצפה לאפליקציית ההודעות,

0:48 ומעביר את השם. אזר מבקש למחוק את כל מה ששלו. יומיים לאחר מכן הוא עושה זאת בעצמו: מאתיים שבעים ושלוש חבילות. 22 במרץ, 21:30 UTC. כל בנייה שמנסה לגשת ל-left-pad מקבלת 404. עשר דקות לאחר מכן אדם זר מפרסם אותה מחדש כ-1.0.0, ושום דבר לא משתנה, מכיוון ש-Babel ו-Atom טוענים אותה דרך חבילה בשם line-numbers, שדורשת בדיוק 0.0.3.

1:13 בשעה 23:03 ה-CTO של npm מצייץ: un-un-publishing. בשעה 23:55, 0.0.3 חוזר מגיבוי. שעתיים וחצי. למה אדם אחד יכול לעשות את זה? שלוש סיבות. כל גרסה ב-npm ניתנת למחיקה על ידי מחברה, באופן מיידי, ללא בדיקה של מי תלוי בה. שנית, תלויות הן טרנזיטיביות: Babel לא יודעת ש-left-pad קיימת, היא מכירה את line-numbers, וכל העץ נפתר בזמן אמת בכל התקנה.

1:36 שלישית, בשנת 2016 שום דבר לא קבע את העץ הזה כברירת מחדל; קובצי נעילה (lockfiles) הם "אופט-אין", אז כל הפעלת CI שואלת שוב את האינטרנט איך נראים אחד עשר שורות קוד. רישום אחד, שמנוהל על ידי אף אחד שתלוי בו. Git blame. npm, שישים אחוז: הדו"ח "לאחר מעשה" שלה אומר שביטול פרסום בלתי מוגבל גרם לכאב, ו, ציטוט, "פישלנו". Kik, עשרים וחמישה: סוכן פטנטים, לא עורך דין, מבטיח עורכי דין בדלת על שם ש-Kik כבר החליטה לא להשתמש בו. הרגל התלויות, חמישה עשר: כל מי שהתקין ב-npm אחד עשר שורות במקום

2:06 להקליד אותן. כולל Kik, שגם הבניות שלה נשברות. רדיוס הפיצוץ: מאתיים שבעים ושלוש חבילות נמשכו, אחת מהן הורדה שניים וחצי מיליון פעמים בחודש. התיקון לוקח שעתיים וחצי; הפונקציה לוקחת אחד עשר שורות. ב-Hacker News, פוסט ששואל אם שכחנו איך לתכנת מגיע ל- אלף ושבע מאות נקודות, בעיקר מאנשים שהבניות שלהם עדיין אדומות. פסק דין, לאחר מעשה: SHIP IT.

2:26 npm משחזרת מגיבוי, מפרסמת את הדו"ח "לאחר מעשה" למחרת, ותוך שבוע מוציאה את הכלל שעדיין עומד: ניתן לבטל פרסום במשך עשרים וארבע שעות, לאחר מכן מדברים עם בן אדם. יום שני: בצעו commit לקובץ ה-lockfile שלכם, ואם פונקציה היא אחד עשר שורות, היא פסקה, לא תלות. שלחו לי את התקרית שאסור לכם עדיין לדבר עליה, בתגובות, או ב-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
