+− THE DAILY DIFFdev & AI news
SHIP IT

JavaScript-ի տասնմեկ տող կոտրել են ինտերնետը։ Մեկ չհրապարակում։

2016 թվականի մարտի 22, 21:30 UTC.

2016 թվականի մարտի 22, 21:30 UTC. ծրագրավորողը չհրապարակում է իր բոլոր 273 npm փաթեթները այն բանից հետո, երբ npm-ը «kik» փաթեթի անունը հանձնում է Kik հաղորդագրությունների հավելվածին, որի արտոնագրային գործակալը խոստացել էր «փաստաբաններ կտանեն ձեր դուռը»։ 273 փաթեթներից մեկը left-pad-ն է՝ տասնմեկ տող, որոնք բացատներ են դնում տողի առջև, ներբեռնվում է ամսական 2.5 միլիոն անգամ։ Րոպեների ընթացքում Babel, React և Node կառուցվածքները խափանվում են ամբողջ աշխարհում, հարյուրավոր րոպեում։ Տասը րոպեից հայտնվում է ճյուղ և ոչինչ չի փոխում, քանի որ Babel-ը left-pad-ը քաշում է տողի համարների միջոցով, որոնք ամրացնում են 0.0.3-ը ճշգրիտ։ 23:55-ին npm-ը վերականգնում է ջնջված տարբերակը կրկնօրինակից՝ «չ-չ-հրապարակման» առաջին դեպքը գրանցամատյանի պատմության մեջ, և մեկ շաբաթ անց ուժի մեջ է մտնում 24-ժամյա չհրապարակման կանոնը։ Հետմահու վերլուծություն, npm-ի սեփական հաշվետվությունից և Kik-ի հրապարակած էլեկտրոնային նամակների շարքից. գրանցամատյանը, որը թույլ էր տալիս ցանկացած հեղինակի ջնջել ցանկացած տարբերակ՝ առանց կախյալների ստուգման, փոխանցվող ծառը լուծվում էր յուրաքանչյուր տեղադրման ժամանակ, լռելյայնորեն չկար lockfile։ Git-ի մեղքը. 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 404s Babel, Atom, Node նախագծերում; ճյուղ 1.0.0 21:42-ին; npm-ի CTO-ն թվիթերում հրապարակում է «չ-չ-հրապարակում» 23:03-ին; 0.0.3-ը վերականգնվում է կրկնօրինակից 23:55-ին — 2.5 ժամ
  • Մարտի 23 և մարտի 29. npm-ի հետմահու վերլուծությունը («մենք ձախողեցինք») և նոր քաղաքականությունը. չհրապարակել միայն 24 ժամվա ընթացքում, անվտանգության տեղապահներ հեռացված անունների համար (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-ին npm-ի CTO-ն թվիթերում հրապարակում է. չ-չ-հրապարակում։ 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-ը վերականգնում է կրկնօրինակից, հրապարակում է հետմահու վերլուծությունը հաջորդ օրը, և մեկ շաբաթվա ընթացքում ուժի մեջ է մտնում այն կանոնը, որը դեռ գործում է. դուք կարող եք չհրապարակել քսանչորս ժամ, դրանից հետո դուք խոսում եք մարդու հետ։ Երկուշաբթի. կատարեք ձեր lockfile-ը, և եթե ֆունկցիան տասնմեկ տող է, այն պարբերություն է, ոչ թե կախվածություն։ Ուղարկեք ինձ այն միջադեպը, որի մասին դուք դեռ չեք կարող խոսել, մեկնաբանություններում, կամ daily diff dot dev-ում։ Եվ դա այսօրվա diff-ն է։

2:48 Ես Նիկոն եմ Axrisi-ից։ Միավորեք պատասխանատվությամբ։

Աղբյուրներ

  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

Հարակից տեսանյութեր

postmortem · hy · 25 սեպ, 2026 թ.

Մեկ միլիվայրկյանի սխալը կանգնեցրել է Մեծ Բրիտանիայի ավիափոխադրումները։ Վեց ժամով։

Սեպտեմբերի 8-ի երեքշաբթի, ժամը 10:00-ին, NATS-ի Ազգային Օդային Տարածքի Համակարգի (NAS) ներսում սքվոք կոդի մեկ սովորական հարցումն ընդհատվում է ավելի բարձր առաջնահերթության հաղորդագրությամբ, մինչ այն մա

3:06 ↗
postmortem · hy · 22 սեպ, 2026 թ.

Վերագործարկումը Telstra-ին ուղարկեց 2006 թվական: Ինը միլիոն հեռախոս:

Մելբուրնի ինժեներն առավոտյան ժամը 2:50-ին միացնում է ժամանակաչափման շասսին, և մինչև նախաճաշ Ավստրալիայի ամենամեծ բջջային ցանցը համաձայնում է, որ դա 2006 թվականի նոյեմբերն է։ 2026 թվականի հուլիսի 8. Te

3:15 ↗