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-ից։ Միավորեք պատասխանատվությամբ։
Աղբյուրներ
- 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



