# Jedenaście linii JavaScriptu zepsuło internet. Jedno wycofanie publikacji.

Published: 2026-09-13

22 marca 2016, 21:30 UTC: deweloper wycofuje publikację wszystkich 273 swoich pakietów npm po tym, jak npm przekazuje nazwę pakietu "kik" do Kik, aplikacji do przesyłania wiadomości, której agent patentowy obiecał "prawników pukających do twoich drzwi". Jeden z 273 to left-pad: jedenaście linii, które dodają spacje przed ciągiem znaków, pobierane 2,5 miliona razy miesięcznie. W ciągu kilku minut kompilacje Babel, React i Node zaczynają zawodzić na całym świecie, setki na minutę. Fork pojawia się w dziesięć minut i niczego nie zmienia, ponieważ Babel pobiera left-pad przez numery linii, co dokładnie przypina 0.0.3. O 23:55 npm przywraca usuniętą wersję z kopii zapasowej — pierwsze "cofnięcie wycofania publikacji" w historii rejestru — a tydzień później wprowadza 24-godzinną zasadę wycofywania publikacji. Postmortem, z własnego konta npm i opublikowanego przez Kik wątku e-mailowego: rejestr, który pozwalał każdemu autorowi usunąć dowolną wersję bez sprawdzania zależności, drzewo przechodnie rozwiązywane na żywo przy każdej instalacji, brak pliku lockfile domyślnie. Obwinianie Gita: 60 npm / 25 Kik / 15 nawyk zależności. Werdykt w sprawie poprawki: SHIP IT.

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

## Co obejmuje ten film

- 11 marca: agent patentowy Kik prosi Azera Koçulu o zmianę nazwy \`kik\`; godzinę później: prawnicy "pukają do twoich drzwi i zamykają twoje konta"; Azer: 30 000 $; Kik wysyła e-maile do wsparcia npm
- 18–20 marca: CEO npm przekazuje nazwę Kik ("można by rozsądnie oczekiwać, że będzie to związane z kik.com"); Azer prosi o usunięcie wszystkich swoich modułów
- 22 marca, 21:30–23:55 UTC: 273 pakiety wycofane; left-pad@0.0.3 404 w projektach Babel, Atom, Node; fork 1.0.0 o 21:42; CTO npm tweetuje "un-un-publishing" o 23:03; 0.0.3 wraca z kopii zapasowej o 23:55 — 2,5 godziny
- 23 i 29 marca: postmortem npm ("nie daliśmy rady") i nowa polityka: wycofanie publikacji tylko w ciągu 24 godzin, zabezpieczające miejsca dla usuniętych nazw (72 h od 2020)

## Przetłumaczona transkrypcja

Przetłumaczono z oryginalnej narracji angielskiej. Dostępne audio i napisy są kontrolowane przez YouTube.

0:00 Jeden deweloper usuwa jedenaście linii JavaScriptu, a w ciągu kilku minut Babel, kompilacje React i Node zawodzą na całym świecie, setki na minutę. Funkcja to left-pad. Dopełnia ciąg znaków spacjami, a pod koniec wieczoru npm robi to, czego twierdzi, że nie może zrobić: ponownie publikuje usuniętą wersję. Jak to się dzieje, dlaczego jest to możliwe i kto jest winny. To jest The Daily Diff, postmortem. 11 marca. Agent patentowy w Kik, aplikacji do przesyłania wiadomości,

0:26 wysyła e-mail do Azera Koçulu: zmień nazwę swojego pakietu npm, kik to nasza marka. Azer mówi nie. Godzinę później: nasi prawnicy od znaków towarowych będą pukać do twoich drzwi i zamykać twoje konta. Azer podaje cenę, trzydzieści tysięcy dolarów, a Kik przesyła wątek do wsparcia npm. 18 marca. CEO npm orzeka, że każdy, kto wpisuje npm install kik, oczekuje aplikacji do przesyłania wiadomości,

0:48 i przekazuje nazwę. Azer prosi o usunięcie wszystkiego, co do niego należy. Dwa dni później robi to sam: dwieście siedemdziesiąt trzy pakiety. 22 marca, 21:30 UTC. Każda kompilacja, która sięga po left-pad, otrzymuje 404. Dziesięć minut później nieznajomy ponownie publikuje ją jako 1.0.0, i nic się nie zmienia, ponieważ Babel i Atom ładują ją przez pakiet o nazwie line-numbers, który dokładnie chce 0.0.3.

1:13 O 23:03 CTO npm tweetuje: un-un-publishing. O 23:55, 0.0.3 wraca z kopii zapasowej. Dwie i pół godziny. Dlaczego jedna osoba może to zrobić? Trzy powody. Każdą wersję na npm może usunąć jej autor, natychmiast, bez sprawdzania, kto od niej zależy. Po drugie, zależności są przechodnie: Babel nie wie, że left-pad istnieje, zna line-numbers, a całe drzewo jest rozwiązywane na żywo przy każdej instalacji.

1:36 Po trzecie, w 2016 roku nic nie przypina tego drzewa domyślnie; lockfiles są opcjonalne, więc każde uruchomienie CI ponownie pyta internet, jak wygląda jedenaście linii kodu. Jeden rejestr, prowadzony przez nikogo, kto od niego zależy. git blame. npm, sześćdziesiąt procent: jego własny postmortem mówi, że nieograniczone wycofywanie publikacji spowodowało ból i, cytuję, nie daliśmy rady. Kik, dwadzieścia pięć: agent patentowy, nie prawnik, obiecujący prawników u drzwi z powodu nazwy, której Kik już postanowił nie używać. Nawyk zależności, piętnaście: każdy, kto zainstalował npm jedenaście linii zamiast

2:06 ich wpisania. W tym Kik, którego kompilacje też się psują. Promień rażenia: dwieście siedemdziesiąt trzy pakiety usunięte, jeden z nich pobierany dwa i pół miliona razy miesięcznie. Naprawa zajmuje dwie i pół godziny; funkcja zajmuje jedenaście linii. Na Hacker News, post pytający, czy zapomnieliśmy, jak programować, osiąga siedemnaście tysięcy punktów, głównie od osób, których kompilacje są nadal czerwone. Werdykt, postmortem: SHIP IT.

2:26 npm przywraca z kopii zapasowej, publikuje postmortem następnego dnia, i w ciągu tygodnia wprowadza zasadę, która nadal obowiązuje: możesz wycofać publikację na dwadzieścia cztery godziny, po tym rozmawiasz z człowiekiem. Poniedziałek: zatwierdź swój plik lockfile, a jeśli funkcja ma jedenaście linii, to jest to akapit, a nie zależność. Wyślij mi incydent, o którym nadal nie możesz mówić, w komentarzach lub na daily diff dot dev. I to jest diff na dziś.

2:48 Jestem Niko z Axrisi. Scalaj odpowiedzialnie.

## Źródła

- [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
