אחד עשר שורות של JavaScript שברו את האינטרנט. הסרה אחת.
22 במרץ 2016, 21:30 UTC: מפתח מבטל פרסום של כל 273 חבילות ה-npm שלו לאחר ש-npm העבירה את שם החבילה "kik" ל-Kik, אפליקציית ההודעות, שסוכן הפטנטים שלה הבטיח "עורכי דין ידפקו על דלתכם".
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.
קראו את המהדורה הכתובה (אנגלית) ↗
מה מכסה הסרטון הזה
- 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)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



