Для того, чтобы поставить на колени популярный пакетный менеджер и сделать невозможной установку тысяч модулей, хватило одиннадцати строчек Javascript. И не каких-то особенных или интересных строчек. Источником проблемы, которая затронула тысячи разработчиков, оказалась совершенно тривиальная функция для форматирования строк.

Азер Кочулу
Азер Кочулу
Герой этой истории — оклендский программист по имени Азер Кочулу, разработавший и опубликовавший более 250 модулей и утилит с открытыми исходниками. Несколько дней назад с ним связался юрист компании Kik и попросил переименовать утилиту kik, которую Кочулу распространял через пакетный менеджер npm.

Компания Kik занимается разработкой одноимённого мессенджера для мобильных телефонов. В декабре этот мессенджер насчитывал 240 миллионов зарегистрированных пользователей. Компания утверждает, что им пользуются более 40% жителей США в возрасте от 13 до 19 лет.

Кочулу не стал переименовывать свой проект, но юрист Kik не сдавался. Он вежливо пояснил, что Kik — это зарегистрированная торговая марка, и закон обязывает компанию защищать её. «У нас нет выбора, потому что либо мы будем защищать торговую марку, либо лишимся её», — написал он программисту. В ответ Кочулу дал юристу нецензурную рекомендацию и прекратил разговор.

Следующее письмо получил уже не он, а руководство компании, которая поддерживает работу npm. Администраторы npm попытались найти компромисс, но Кочулу не поддавался. Когда все методы были исчерпаны, они переименовали модуль kik без разрешения автора.

Кочулу был взбешён. «Эта ситуация заставила меня осознать, что npm — частное пространство, где корпорации сильнее людей, — заявил он через Medium, — а я занимаюсь открытыми исходниками потому, что власть должна принадлежать людям». С этими словами программист убрал из npm 272 пакета, которые он опубликовал.

Последствия оказались неожиданно значительными. «Во вторник, 22 марта около 14:30 по тихоокеанскому стандартному времени, мы стали фиксировать сотни ошибок в минуту, вызванных тем, что зависимые от этих модулей проекты, а за ними — зависимые от зависимых и так далее, не могли установить удалённые пакеты», — описывали развитие событий администраторы npm.

Больше всего ошибок вызвало исчезновение модуля left-pad — простенькой функции на Javascript, которая заполняет левую часть строки нулями или пробелами. Вот она.

code

Эта функция использовалась во множестве проектов, включая Babel и сам Node. В течение месяца модуль left-pad устанавливали миллионы раз. Когда Кочулу удалил его, все проекты, в зависимостях которых значился left-pad, перестали устанавливаться. За ними последовали проекты, зависимые не от самого left-pad, а от одного из других проектов, который от него зависит.

Через десять минут после начала вакханалии кто-то опубликовал в npm копию left-pad, но для полного устранения последствий происшествия потребовалось ещё два с половиной часа.

Никто не ожидал, что инструменты, которые ежедневно используют тысячи разработчиков и компаний, окажутся настолько хрупкими. Администраторы npm объявили о необходимости внесения изменений в работу пакетного менеджера. Чтобы подобная ситуация не повторилась, они планируют усложнить удаление пакетов без которых не будут устанавливаться другие.



13 комментария

  1. carcinogen75

    24.03.2016 at 22:19

  2. petrovichtim

    25.03.2016 at 08:10

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

    • schoolboy

      25.03.2016 at 14:04

      Ты прав. Я, например, питаю множество капиталлистических иллюзий.
      Вроде того, что если от твоих модулей зависит куча чужого кода, то стоит сначала сообщить об их удалении, а потом резать (хоть пару дней дать на разруливание зависимостей). Или что такие инциденты — отличная поддержка для слогана проприетарщиков «опенсорс это нестабильно и ненадёжно». Или что говорить «власть народу» и не давать народу поучаствовать в конфликте это лицемерие (не нашёл следов того, чтобы наш герой попытался давить на npm через сообщество). Или что если говнюки в npm втихаря поломали твой проект, это не повод самому действовать как они.
      Глупо, правда?

      • petrovichtim

        26.03.2016 at 07:10

        Вот ты их как раз и изложил. Есть механизм буржуазного насилия или проще говоря государство и есть толпа гиков, которые дальше своих линз не видят. Солидарности, чести , достоинства, единых действий среди программистов нет. Их по одному пригибают, подкупают или просто убивают (Арон Шварц например). Человек сделал поступок. на который многие из вас не отважатся и за это ему уважение.

  3. astral77708

    29.03.2016 at 10:12

    Плохой пример зазнавшегося программера! Теперь, думаю, он по заслугам огребет полную пазуху!

    • dron247

      25.11.2016 at 04:28

      Сорян за некропост, но тут пример не зазнавшегося программера, а порочности npm и в принципе экосистемы ноды. Такая хрень должна быть или в стандартной библиотеке, или авторы пакетов должны как минимум такую мелочёвку реализовывать САМИ, глянь на типичный проект на ноде, зависимость на зависимости, сам кодер по большей части ищет пакеты и склеивает их с другими, реально ни в какие ворота, ленивые черти.

  4. Int

    30.03.2016 at 13:30

    Никак не затронуло, не пользуюсь npm. Если что-то нужно поставить, можно скачать это с официального сайта.

  5. Capricorn404

    31.03.2016 at 10:04

    Не хочу никого оправдывать, но поступок Азера действительно немного истеричен. Начиная разработку своей утилиты, он мог бы предусмотреть возможность подобных конфликтов или хотя бы не слать парламентёра подальше. Если с тобой хорошо поговорили, то будь добр и уважай собеседника.
    Другой вопрос: как его просили? Но нельзя не отметить, что он вскрыл сильную уязвимость, ставшую следствием халатности администраторов пакетного менеджера.

  6. Hikikomori

    24.05.2016 at 10:44

    По-моему он правильно поступил, если он назвал пакет так первым , то почему он должен уступать название компании? Конечно, если он всё таки назвал так пакет после того как администраторы компании решили назвать свой проект, то поступок не совсем правильный. Мог бы удалить только kik.

Оставить мнение