инцидент с левой панелью npm
22 марта 2016 года инженер-программист Азер Кочулу снял left-pad
пакет, который он опубликовал в npm ( JavaScript менеджер пакетов ). Кочулу удалил пакет после спора с Kik Messenger , в котором компания принудительно взяла под свой контроль название пакета. kik
. В результате тысячи программных проектов, в которых использовались left-pad
в качестве зависимости , включая Babel транскомпилятор и React веб-фреймворк , не удалось собрать или установить.
Технологические корпорации, включая Meta Platforms , PayPal , Netflix и Spotify, потенциально пострадали после удаления left-pad
поскольку их программные продукты в той или иной форме использовали этот пакет. Через несколько часов после удаления пакета из npm компания, стоящая за платформой, npm, Inc , вручную восстановила пакет из-за широкомасштабного сбоя, вызванного инцидентом.
После сбоя npm отключил удаление пакета, если с даты его публикации прошло более 24 часов и от него зависит хотя бы еще один проект. Инцидент также привлек широкое внимание средств массовой информации и реакцию со стороны представителей индустрии программного обеспечения . Удаление left-pad
вызвало дискуссию о преднамеренном самовредительстве программного обеспечения в целях содействия социальной справедливости и привлекло внимание к повышенной вероятности атак на цепочку поставок при модульном программировании .
Фон
[ редактировать ]
left-pad
во время его удаления npm left-pad
— это с открытым исходным кодом, JavaScript бесплатный пакет опубликованный Азером Кочулу, независимым инженером-программистом из Окленда, Калифорния. [1] Пакет периодически добавляет символы к строке с помощью цикла . [1] left-pad
в окончательной версии, автором которой является Кочулу , охарактеризован как чрезвычайно простой, состоящий всего из 11 строк кода (без учета пустых строк). [2] [3]
Кочулу опубликовал left-pad
в npm , менеджере пакетов по умолчанию для Node.js JavaScript , среды выполнения . [4] [2] Несмотря на свою относительную неясность, left-pad
активно использовался; пакет использовался в качестве зависимости тысячами других программных проектов, и до его удаления его загрузили более 15 миллионов раз. [5] [6] Некоторые из проектов, которые требовали left-pad
для функционирования были критически важны для экосистемы JavaScript в то время. Сюда входили Babel , транскомпилятор , обеспечивающий обратную совместимость кода JavaScript, Webpack , система объединения модулей, а также React и React Native , которые являются платформами, широко используемыми для разработки веб-сайтов и мобильных приложений соответственно. [7] [8] [1]
В дополнение к left-pad
Кочулу также владел kik
на npm — инструменте, позволяющем разработчикам настраивать шаблоны для своих проектов. [1] 11 марта 2016 года Kik Interactive, канадская компания, владеющая обмена мгновенными сообщениями платформой Kik Messenger , связалась с Кочулу и попросила его отказаться от контроля над kik
упаковки в связи с владением компанией торговой марки «Кик» . [9] Часть переписки включала следующее сообщение от Кика:
Мы не хотим быть придурками по поводу [
kik
package], но это зарегистрированная торговая марка в большинстве стран мира, и если вы действительно выпустите проект с открытым исходным кодом под названием kik, наши юристы по товарным знакам будут стучать в вашу дверь, блокировать ваши учетные записи и тому подобное — и мы У меня не будет другого выбора, кроме как сделать все это, потому что вам придется обеспечить соблюдение прав на товарные знаки, иначе вы их потеряете. Нельзя ли прийти к какому-то компромиссу, чтобы заставить вас сменить имя без привлечения юристов? Можем ли мы что-то сделать для вас в качестве компенсации, чтобы заставить вас сменить имя? [3]
Кочулу ответил вскоре после этого, отказавшись менять название своего проекта, сказав:
хахаха, ты вообще придурок. так что иди на хуй. не отвечайте мне по электронной почте. [3]
Кочулу также запросил 30 000 долларов США в качестве компенсации «за хлопоты, связанные с отказом от моего любимого проекта ради [ sic ] кучки корпоративных придурков». [1] 18 марта 2016 года Исаак З. Шлютер, генеральный директор npm, Inc., написал Kik Interactive и Koçulu, заявив, что право собственности на kik
пакет будет вручную перенесен в Kik Interactive. [1]
Удаление
[ редактировать ]Выразив разочарование решением npm, Inc. и заявив, что он больше не желает быть частью платформы, Шлютер предоставил Кочулу команду удалить все 273 модуля, которые он зарегистрировал. [9] Кочулу выполнил команду 22 марта 2016 года, удалив все выпущенные им ранее пакеты. [1] left-pad
был одним из пакетов, которые были «неопубликованы», что сделало его недоступным для публичного доступа на npm. [5] left-pad
Программный проект и его содержимое остались доступными на GitHub . [9]
Пользователи, пытающиеся создать или установить любой проект JavaScript, который использовал left-pad
поскольку зависимость (включая такие зависимости, как Babel или Webpack) получила ошибку 404 , которая привела к сбою процесса. [1] несколько известных корпораций, занимающихся разработкой программного обеспечения, включая Meta Platforms , PayPal , Netflix и Spotify , поскольку их продукты зависели от этого пакета. Инцидент потенциально затронул [8] По иронии судьбы, удаление пакета также затронуло разработчиков Kik Interactive и они столкнулись с проблемами сборки. [1]
Последствия
[ редактировать ]Немедленные эффекты
[ редактировать ]проекта был немедленно опубликован поток жалоб, реакций и обходных решений от других разработчиков программного обеспечения . Git в систему отслеживания проблем В ответ на удаление пакета из npm [7] [1] Сопровождающие проекты с открытым исходным кодом, включая Babel, также выпустили исправления для удаления зависимостей, которые Кочулу не опубликовал. [7] Некоторые другие названия пакетов Кочулу были быстро заменены недавно опубликованными пакетами. [3] Через час после удаления пакетов Кочулу опубликовал на Medium пост под названием «Я только что освободил свои модули», в котором объяснил, что отменил публикацию всех своих программных проектов из npm в качестве формы протеста против корпоративных интересов в свободном и открытом доступе. -исходное программное обеспечение. [1]
Чтобы решить проблемы с программным обеспечением, другой разработчик воссоздал left-pad
упаковка. Однако, поскольку разработчик выпустил свой пакет с версией 1.0.0, а Кочулу опубликовал свою версию 0.0.3, пользователи продолжали сталкиваться с проблемами. [3] Примерно через два часа после оригинала left-pad
пакет был удален, npm вручную «отменил публикацию» исходной версии 0.0.3, восстановив резервную копию, что эффективно устранило сбой. [1] Что касается восстановления left-pad
В пакете Лори Восс, технический директор npm, написала, что компания «выбрала потребности многих», несмотря на внутренние разногласия по поводу того, было ли это действие «правильным решением». [10]
Реакции
[ редактировать ]Чтобы еще больше предотвратить возникновение подобной проблемы, npm также опубликовал новую политику удаления опубликованных пакетов, чтобы предотвратить удаление, если с даты выпуска прошло более 24 часов и по крайней мере еще один проект требует его в качестве зависимости. [11] От имени npm менеджер сообщества Эшли Уильямс извинилась за сбои, вызванные инцидентом, заявив, что платформа «[не смогла] защитить сообщество». [11] Kik Interactive также извинилась за инцидент: руководитель службы обмена сообщениями компании Майк Робертс опубликовал цепочку электронных писем с Кочулу на Medium и охарактеризовал свое общение как «вежливую просьбу». [8] Робертс написал, что изначально они обратились к Кочулу, потому что хотели опубликовать на npm пакет с открытым исходным кодом под именем, которое использовал Кочулу. [5] Кочулу заявил, что ему жаль, что он помешал работе других, но он считает, что сделал это «на благо общества в [ sic ] долгосрочной перспективе». [2]
Инцидент вызвал разную реакцию со стороны пользователей Twitter , GitHub , Reddit и Hacker News , причем многие утверждали, что он ненадолго «сломал Интернет». [2] [8] [9] [1] Многие отмечали культуру разработки JavaScript « двигайся быстро и ломай вещи », непредсказуемую природу программного обеспечения с открытым исходным кодом и чрезмерную зависимость от модульного программирования . [2] [8] [3] Пользователи также выразили разочарование по поводу решения npm принудительно передать пакет Кочулу Kik Interactive из-за юридической угрозы. [1]
Влияние
[ редактировать ] что нарушение работы пакета npm может привести к атаке на цепочку поставок Этот инцидент также подчеркнул, . Помимо широко разрекламированного left-pad
В результате инцидента несколько человек сразу же похитили другие пакеты Кочулу с неизвестным кодом после того, как они были удалены. [7] npm опубликовал новую политику по предотвращению злонамеренных поглощений в подобных спорах. [3] но left-pad
Этот инцидент до сих пор приводится в качестве примера чрезмерной зависимости от внешних участников, что приводит к увеличению поверхности атаки на программные продукты. [12] Умышленный самосаботаж Кочулу left-pad
Чтобы привлечь внимание к социальной проблеме, это также считается предвестником случаев протестного ПО на таких платформах, как npm. публикации [6]
Кик-пакет
[ редактировать ]Несмотря на попытки сохранить имя kik
, этот пакет вскоре был заброшен и теперь пустует. Организация kik на NPM также опубликовала пакет с пространством имен. @kikinteractive/kik
; однако с 2017 года он не получал никаких обновлений, а по состоянию на 2024 год загрузок очень мало. [13] [14]
Дополнение к стандартной библиотеке
[ редактировать ]Функция, предоставляемая пакетом, была навсегда добавлена в спецификацию JavaScript, поскольку String.prototype.padStart()
, неоднозначно принятое на заседании ТК39 25 мая 2016 г. [15] Первым браузером, поддерживающим эту функцию, стал Firefox 48, выпущенный 2 августа того же года. [16]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с д и ж г час я дж к л м н Коллинз, Кейт (27 марта 2016 г.). «Как один программист сломал Интернет, удалив крошечный фрагмент кода» . Кварц . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Перейти обратно: а б с д и Вайнбергер, Мэтт (23 марта 2016 г.). «Один программист чуть не сломал Интернет, удалив 11 строк кода » Бизнес-инсайдер . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Перейти обратно: а б с д и ж г Фельдман, Брайан (24 марта 2016 г.). «Один человек удалил 11 строк кода из Интернета и сломал сотни приложений» . Интеллигент . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Клэберн, Томас (22 апреля 2019 г.). «НПМ не отличается особым великодушием? Сотрудники уволены после попытки объединиться в профсоюз – жалобы» . Регистр . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Перейти обратно: а б с Уильямс, Крис (23 марта 2016 г.). «Как один разработчик только что сломал Node, Babel и тысячи проектов в 11 строках JavaScript» . Регистр . Архивировано из оригинала 16 октября 2023 года . Проверено 11 мая 2024 г.
- ^ Перейти обратно: а б Шарма, Акс (27 июля 2022 г.). «Протестное ПО набирает обороты: почему разработчики саботируют собственный код» . ТехКранч . Архивировано из оригинала 29 февраля 2024 года . Проверено 11 мая 2024 г.
- ^ Перейти обратно: а б с д Мазаика, Кен (24 марта 2016 г.). «Как 17 строк кода уничтожили самые горячие стартапы Кремниевой долины» . ХаффПост . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Перейти обратно: а б с д и Миллер, Пол (24 марта 2016 г.). «Как разгневанный разработчик ненадолго сломал JavaScript» . Грань . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Перейти обратно: а б с д Галлахер, Шон (25 марта 2016 г.). «Rage-quit: Coder не опубликовал 17 строк JavaScript и «сломал Интернет» » . Арс Техника . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Тунг, Лиам (23 марта 2016 г.). «Недовольный разработчик ломает тысячи приложений JavaScript и Node.js» . ЗДНЕТ . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Перейти обратно: а б Уильямс, Крис (29 марта 2016 г.). « Никаких сожалений» говорит парень, который свалил башню JavaScript Jenga, а разработчики спрашивают: мы разучились программировать?» . Регистр . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ Клэберн, Томас (3 февраля 2022 г.). «Зараженные вредоносным ПО пакеты npm встречаются чаще, чем вы думаете» . Регистр . Архивировано из оригинала 11 мая 2024 года . Проверено 11 мая 2024 г.
- ^ "кик на НПМ" . 7 июля 2024 г.
- ^ «@kikinteractive/kik на NPM» . 7 июля 2024 г.
- ^ "String.prototype.pad{Начало,Конец} (JHD)" . Гитхаб . 25 мая 2016 года . Проверено 10 июля 2024 г.
- ^ «String.prototype.padStart()» . Веб-документы MDN . 9 августа 2023 г. . Проверено 10 июля 2024 г.