+− THE DAILY DIFFdev & AI news
SHIP IT

თერთმეტმა JavaScript ხაზმა გააფუჭა ინტერნეტი. ერთი გაუქმება.

2016 წლის 22 მარტი, 21:30 UTC: დეველოპერმა წაშალა მისი 273-ვე npm პაკეტი მას შემდეგ, რაც npm-მა პაკეტის სახელი "kik" გადასცა Kik-ს, შეტყობინებების აპლიკაციას, რომლის საპატენტო აგენტმა პირობა დადო „ადვოკატები თქვენს კარზე დააკაკუნებენ“.

2016 წლის 22 მარტი, 21:30 UTC: დეველოპერმა წაშალა მისი 273-ვე npm პაკეტი მას შემდეგ, რაც npm-მა პაკეტის სახელი "kik" გადასცა Kik-ს, შეტყობინებების აპლიკაციას, რომლის საპატენტო აგენტმა პირობა დადო „ადვოკატები თქვენს კარზე დააკაკუნებენ“. 273 პაკეტიდან ერთ-ერთი არის left-pad: თერთმეტი ხაზი, რომელიც სტრიქონის წინ ათავსებს სივრცეებს, თვეში 2.5 მილიონჯერ იტვირთება. რამდენიმე წუთში Babel, React და Node builds-ები იშლება მთელ მსოფლიოში, ასობით წუთში. ათ წუთში ჩნდება ფორკი და არაფერს ცვლის, რადგან Babel-ი left-pad-ს იღებს ხაზების ნომრების მეშვეობით, რომელიც ზუსტად 0.0.3-ზეა მიმაგრებული. 23:55-ზე npm აღადგენს წაშლილ ვერსიას სარეზერვო ასლიდან — რეგისტრის ისტორიაში პირველი „გაუქმების გაუქმება“ — და ერთი კვირის შემდეგ აგზავნის 24-საათიან გაუქმების წესს. Postmortem, 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 პაკეტი გაუქმდა; [email protected] 404s Babel, Atom, Node პროექტებში; fork 1.0.0 21:42-ზე; npm-ის CTO ტვიტავს „გაუქმების გაუქმებას“ 23:03-ზე; 0.0.3 დაბრუნდა სარეზერვო ასლიდან 23:55-ზე — 2.5 საათი
  • 23 მარტი და 29 მარტი: npm-ის postmortem („ჩვენ დავაგვიანეთ“) და ახალი პოლიტიკა: გაუქმება მხოლოდ 24 საათის განმავლობაში, უსაფრთხოების შემცვლელები წაშლილი სახელებისთვის (72 საათი 2020 წლიდან)

ნათარგმნი ტრანსკრიპტი

ნათარგმნია ორიგინალური ინგლისური ნარატივიდან. ხელმისაწვდომი აუდიო და სუბტიტრები კონტროლდება YouTube-ის მიერ.

0:00 ერთმა დეველოპერმა წაშალა თერთმეტი ხაზი JavaScript-დან, და რამდენიმე წუთში Babel, React და Node-ის builds-ები იშლება მთელ მსოფლიოში, ასობით წუთში. ფუნქცია არის left-pad. ის სტრიქონს ავსებს სივრცეებით, და საღამოს ბოლოსთვის npm აკეთებს იმ ერთ რამეს, რასაც ამბობს, რომ არ შეუძლია: წაშლილი ვერსიის თავიდან გამოქვეყნებას. როგორ ხდება ეს, რატომ არის შესაძლებელი და ვინ არის დამნაშავე. ეს არის The Daily Diff, postmortem. 11 მარტი. Kik-ის, შეტყობინებების აპლიკაციის, საპატენტო აგენტი,

0:26 უგზავნის ელფოსტას აზერ კოჩულუს: გადაარქვი სახელი შენს npm პაკეტს, kik ჩვენი ბრენდია. აზერი ამბობს არა. ერთი საათის შემდეგ: ჩვენი სავაჭრო ნიშნის ადვოკატები თქვენს კარზე დააკაკუნებენ და თქვენს ანგარიშებს დაბლოკავენ. აზერი ასახელებს ფასს, ოცდაათი ათას დოლარს, და Kik-ი აგზავნის მიმოწერას npm-ის მხარდაჭერას. 18 მარტი. npm-ის აღმასრულებელმა დირექტორმა განაცხადა, რომ ვინც აკრიფავს npm install kik, შეტყობინებების

0:48 აპლიკაციას ელის, და სახელი გადასცა. აზერი ითხოვს მისი ყველაფრის წაშლას. ორი დღის შემდეგ თვითონ აკეთებს ამას: ორას სამოცდაცამეტი პაკეტი. 22 მარტი, 21:30 UTC. ყოველი build, რომელიც 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, სამოცი პროცენტი: მისი საკუთარი postmortem ამბობს, რომ შეუზღუდავი გაუქმება გამოიწვია ტკივილი, და, ციტატა, ჩვენ დავაგვიანეთ. Kik, ოცდახუთი: საპატენტო აგენტი, არა ადვოკატი, ადვოკატებს დაჰპირდა კართან იმ სახელის გამო, რომლის გამოყენებაზეც Kik-მა უკვე უარი თქვა. დამოკიდებულების ჩვევა, თხუთმეტი: ყველა, ვინც npm-ის მეშვეობით დააინსტალირა თერთმეტი ხაზი

2:06 მათი აკრეფის ნაცვლად. Kik-ის ჩათვლით, რომლის builds-ებიც ასევე იშლება. აფეთქების რადიუსი: ორას სამოცდაცამეტი პაკეტი წაიშალა, ერთ-ერთი მათგანი თვეში ორნახევარი მილიონჯერ იტვირთება. გამოსწორებას სჭირდება ორნახევარი საათი; ფუნქციას სჭირდება თერთმეტი ხაზი. Hacker News-ზე, პოსტი, რომელიც კითხულობს, დაგვავიწყდა თუ არა პროგრამირება, ათას შვიდას ქულას აგროვებს, ძირითადად იმ ადამიანებისგან, ვისი builds-ებიც ჯერ კიდევ წითელია. ვერდიქტი, postmortem: ship it.

2:26 npm აღადგენს სარეზერვო ასლიდან, მეორე დღეს აქვეყნებს postmortem-ს, და ერთ კვირაში აგზავნის წესს, რომელიც დღესაც მოქმედებს: შეგიძლიათ გააუქმოთ ოცდაოთხი საათის განმავლობაში, ამის შემდეგ ადამიანთან უნდა ისაუბროთ. ორშაბათი: დააკომიტეთ თქვენი 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 · ka · 17 სექ. 2026

Dependabot-ის განახლებამ ჭიაყელა გაავრცელა. 22 პაკეტი.

ბოტი ხსნის pull request-ს. ადამიანი მას 24 წუთის შემდეგ აერთიანებს. ამის შემდეგ 95 წუთში, ჭიაყელამ გამოაქვეყნა მისი 22 npm პაკეტის 110 მავნე ვერსია, მისი სახელით, ტოკენით, რომელიც იპოვა მის CI-ში.

3:04 ↗
postmortem · ka · 15 სექ. 2026

Rust-ის კრეტმა მავნე პროგრამა გაუშვა კომპილაციის დროს. 86 წუთი.

ოთხმაგი მაკრო Rust-ის კრეტმა 260 მილიონი ჩამოტვირთვით დაამატა ერთი დამოკიდებულება, და `cargo build`-მა გაუშვა უცნობის ბინარი თქვენს მანქანაზე. 2026 წლის 20 აგვისტო: arrayref 0.3.10 დაეშვა crates.io-ზე

3:09 ↗
postmortem · ka · 25 სექ. 2026

ერთმილიწამიანმა ხარვეზმა შეაჩერა გაერთიანებული სამეფოს საჰაერო მოძრაობა. ექვსი საათი.

სამშაბათს, 8 სექტემბერს, 10:00 საათზე, NATS-ის ეროვნული საჰაერო სივრცის სისტემაში (NAS) squawk-კოდის ერთ რუტინულ მოთხოვნას აწყვეტინებს უფრო მაღალი პრიორიტეტის შეტყობინება, სანამ ის მნიშვნელობის განახლ

3:06 ↗
postmortem · ka · 22 სექ. 2026

გადატვირთვამ Telstra 2006 წელში დააბრუნა. ცხრა მილიონი ტელეფონი.

მელბურნელმა ინჟინერმა დილის 2:50 საათზე ჩართო ქრონომეტრაჟის შასი, და საუზმისთვის ავსტრალიის უდიდესმა მობილურმა ქსელმა დაასკვნა, რომ ეს იყო 2006 წლის ნოემბერი. 2026 წლის 8 ივლისი: Telstra-ს NTP შასიში

3:15 ↗