💻 ПРОГРАММИРОВАНИЕ

Left-pad: как 11 строчек кода обрушили половину интернета

В 2016 году один разработчик в обиде удалил крошечную библиотеку из одиннадцати строк — и по всему миру посыпались сборки тысяч проектов, включая гигантов индустрии. История о хрупкости современной разработки, держащейся на чужих кубиках.

Одиннадцать строчек кода, которые умели всего одно: добавлять пробелы в начало строки. Их удаление на несколько часов парализовало разработку по всему миру.
История left-pad — это про то, как современный софт собирается из тысяч чужих маленьких кусочков, и почему вынуть один из них бывает достаточно, чтобы всё посыпалось.

Что вообще делал left-pad

Библиотека left-pad решала смехотворно простую задачу — дополнить строку слева до нужной длины. Например, превратить "5" в "005". Вся её суть умещалась в несколько строк:

function leftPad(str, len, ch) {
  str = String(str);
  while (str.length < len) {
    str = ch + str;
  }
  return str;
}

console.log(leftPad("5", 3, "0")); // "005"

Такое любой программист напишет за минуту. И всё же тысячи проектов подключали готовый left-pad вместо того, чтобы написать самим. Почему? Потому что в мире JavaScript так принято: есть огромный склад готовых библиотек (npm), и оттуда тянут даже мельчайшие функции.

Невидимая паутина зависимостей

Ключевое слово здесь — зависимости. Большой проект подключает библиотеку A. Та, в свою очередь, зависит от B и C. B зависит от D, E, F. И так далее, вглубь на много уровней. Получается дерево из сотен и тысяч библиотек, большинство из которых разработчик даже в глаза не видел.

Left-pad оказался где-то глубоко в основании этого дерева у множества популярных инструментов. От него зависели те, от кого зависели гиганты. Никто не подключал его напрямую — но он был внутри почти у всех.

Один обиженный человек — и обвал

В марте 2016 года разработчик по имени Азер Кочулу поссорился с площадкой npm из-за спора о названии другого своего пакета. В знак протеста он удалил все свои библиотеки разом, включая left-pad. Пакет исчез со склада.

И тут началось. Любой проект, который при сборке пытался скачать left-pad (пусть и через десять уровней вложенности), внезапно получал ошибку «пакет не найден» и не собирался. Падали сборки у крупнейших компаний и популярнейших инструментов. Тысячи разработчиков по всему миру одновременно уставились на сломанные билды, не понимая, что произошло.

Развязка за пару часов

Масштаб был такой, что площадка npm пошла на беспрецедентный шаг — вернула удалённый пакет обратно, фактически отменив решение автора. Это вызвало уже другой спор: а вправе ли площадка восстанавливать то, что человек удалил сам? Но сборки чинить было надо, и left-pad воскресили.

Уроки, которые остались надолго

Крошечная библиотека преподала индустрии большой урок:

  • Хрупкость цепочек. Современный продукт держится на сотнях чужих кусков, и любой может исчезнуть или сломаться.
  • Не тяни зависимость ради мелочи. Подключать целую библиотеку, чтобы добавить пару пробелов, — сомнительная экономия.
  • Нужна страховка. После этого случая стали популярны механизмы, которые сохраняют копии всех зависимостей у себя, чтобы внезапное удаление с чужого склада не ломало сборку.

Left-pad стал символом целой проблемы. Он показал: за удобством «возьми готовое из интернета» прячется незаметная зависимость от незнакомцев, чьи решения могут в любой момент аукнуться половине мира.

#left-pad#npm#open source#зависимости#история