Интернет, который мы воспринимаем как нечто вечное, в один момент может обрушиться, словно карточный домик. Это почти случилось на днях, когда один программист в расстроенных чувствах удалил простейшую программу из 11 строк, навредив таким образом тысячам софтверных проектов. Сейчас уже все хорошо, но кейс наглядно демонстрирует, насколько это хрупкая штука – интернет.

Все началось с того, что программист по имени Азер Кокулу написал ничем не примечательный модуль – расширение для популярного языка программирования Node.js. И назвал его Kik. свой модуль Кокулу загрузил на NPM (это как App Store для Node.js-программистов) бесплатно в помощь коллегам.

Азер Кокулу

Но был и другой Kik – приложение-мессенджер, владельцы которого обратились к Кокулу с требованием переименовать модуль. Но программист заартачился. “Когда я начал писал Kik, я не знал, что есть компания с таким названием. И я не хотел, чтобы меня принуждали менять название моей программы”, – написал Азер в блоге на Medium.

Как сообщает Business Insider, закон был на стороне противника, который зарегистрировал название задолго до Кокулу с его модулем. В итоге СЕО NPM Исаак Шлуетер аннулировал авторство Кокулу над собственным модулем, не посоветовавшись с программистом.

Создатель приложения Kik Тедж Ливингстон. Фото: BI

Создатель приложения Kik Тедж Ливингстон. Фото: BI

“Эта ситуация дала мне понять, что NPM – частная площадка, на которой корпоративные интересы важнее общечеловеческих, а я делаю проекты с открытым кодом, чтобы вооружить людей”, – написал Исаак, после чего в порыве эмоций удалил Kik с NPM, а заодно и все свои коды.

Казалось бы, кому какое дело, да вот незадача: именно Кокулу в свое время создал примитивный, но очень популярный модуль npm left-pad. В нем всего 11 строк кода, которые не выполняют ничего особо сложного, однако этот модуль насчитывает 575 000 загрузок. И когда модуль исчез, разработчикам таких интернет-проектов, как Reddit, Twitter и других было очень не все равно.

Такие модули, как npm left-pad, являются по сути шаблонами базовых функций, которые разработчики используют в своих кодах, чтобы не прописывать функции с нуля. Они просто вставляют в код вызов модуля из NPM, и в нужный момент программа загружает его непосредственно из менеджера пакетов. Но если модуль вдруг исчезнет оттуда, компилятор будет вызывать его снова и снова, зациклив программу. А это очень плохо.

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

Глобально исчезновение таких модулей приводит к тому, что популярные проекты вроде Babel, которые помогают Facebook, Netflix и Spotify работать быстрее, а их разработчикам создавать более эффективные интерфейсы, внезапно перестают работать. По данным NPM, жест Кокулу привел к сбоям в работе примерно тысячи софтверных проектов.

После массовых протестов разработчиков по всему миру NPM восстановила модуль из резервной копии, назвав это “беспрецедентным решением”. Права на модуль передали другому программисту Кэмерону Вестлейку – владельцу аналогичного модуля, но с другим названием. (Модуль Азера назывался 0.0.3, а модуль Кэмерона – 1.0.0). Интернет страдал примерно 2,5 часа, но затем был спасен.

В серии твитов СТО NPM Лори Восс отметила, что компания и сама не рада была отдать другим пользователям права на интеллектуальную собственность Кокулу, но цель оправдывает средства. Иначе сайты по всему миру продолжали бы страдать.

Итог истории таков: npm left-pad снова онлайн. Но осадок остался. Программисты все чаще используют чужой код вместо того, чтобы писать самостоятельно. Однако Азер не имеет ничего против и обещает делиться своей работой на GitHub. Но на NPM он возвращаться не планирует: “Я поступил так, не потому что я м*дак. Я люблю opensource и верю, что комьюнити однажды создаст по-настоящему свободную альтернативу NPM”.

Был еще один забавный случай, куда менее трагичный. Программист писал скрипты, которые делали за него работу, варили латте и общались с женой.