Разработчик Азер Кочулу чуть не сломал интернет. Конечно, это громко сказано, но на пару часов он озадачил программистов по всему миру, стерев всего 11 строчек кода. Кочулу удалил свой модуль из системы хранения пакетов npm, из-за чего начала возникать ошибка при «сборке» более сложных пакетов и библиотек. Оказалось, что от крохотного модуля могут зависеть даже такие крупные проекты как React от Facebook.
Разработка на JavaScript сейчас устроена примерно таким образом. В системе хранения пакетов npm находятся модули, которые при сборке скачиваются на компьютер разработчика или на сервер, где работает сайт. Один модуль может требовать наличия другого модуля, тот — третьего и так далее. Разработчик, используя в своей программе модуль, рассчитывает, что все модули доступны в npm, и не задумывается, от чего зависят используемые пакеты.
23 марта разработчики со всего мира заметили, что с их программами на JavaScript что-то не так. Одно из предупреждений гласило: «npm ERR! 404 'left-pad' is not in the npm registry». Это означает, что для запуска проекта требуется пакет под названием left-pad, но получить его не удается. Многие разработчики не могли понять, что случилось: они никогда не использовали такой модуль. Однако его могли использовать другие модули, о чем можно просто не догадываться.
Выяснилось, что ошибка выдавалась, поскольку разработчик из Окленда Азер Кочулу удалил свой модуль left-pad из npm.
Модуль left-pad — один из самых популярных пакетов в npm. За последний месяц его установили около 2,5 миллиона раз. Поэтому из-за удаления этой программы пострадали даже такие крупные проекты как библиотека для разработки интерфейсов React от Facebook. Напрямую она не включает в себя left-pad, но она основана на других модулях, которые используют другие модули, которые используют left-pad.
Пакет left-pad состоит всего из 11 строк. Он выглядит вот так.
Этот код берет три значения — строку, длину и символ — и добавляет символ в начало строки столько раз, сколько составляет разница между длиной строки и заданной длиной. Например, если вызвать функцию leftpad с аргументами «Медуза», 10, «a», то результатом будет «aaaaМедуза». Это нужно для форматирования строк — например, чтобы слова разной длины были расположены ровно. На самом деле, любой программист может написать такую функцию, но удобнее просто взять уже готовую из npm. Этим и объясняется такая популярность left-pad.
Поскольку этот модуль использовался миллионы раз, от него зависят многие программы. Поэтому когда пакет удалили, многие оказались в недоумении.
Азер Кочулу удалил свой модуль не просто так, а в знак протеста. Как сторонник свободного ПО, он не хотел подчиняться правообладателям.
Все началось 11 марта, когда он получил письмо от компании Kik, которая делает одноименный мессенджер. Его попросили переименовать один из его пакетов под названием kik. В противном случае правообладатели грозились послать к нему домой юристов по товарным знакам, хотя и уверяли, что не хотят быть «мудаками в этой ситуации». Кочулу ответил, что это имя уже занято для его проектов с открытым кодом, и отказал. А потом и вовсе послал их. «Хаха, вы и вправду мудаки, пошли ** *** [куда подальше]», — написал он.
Компания Kik даже предлагала Азеру Кочулу денег за «неудобства, связанные со сменой имени». Он ответил: «Да, вы можете купить его за 30 тысяч долларов, чтобы компенсировать мои неудобства по передаче моего собственного проекта куче корпоративных мудаков».
Не найдя понимания у Азера Кочулу, Kik обратилась к npm, и там согласились помочь. Представитель npm написал разработчику, что ему стоит сменить имя своего пакета. Кочулу пришел в негодование. «Я знаю вас много лет и никогда не мог представить, что вы займете сторону корпоративных юристов, которые угрожают разработчикам открытого ПО, — писал он. — Я думаю, что у меня есть право удалить из npm все, что я сделал». И он удалил все 273 пакета, которые сделал.
Когда разработчики заметили, что при попытке обратиться к left-pad выдается ошибка, сотрудники npm поступили беспрецедентно: они вернули удаленный модуль.
Случай с left-pad породил бесчисленное множество споров о нынешнем устройстве веб-разработки и копирайте. Одни ругали Kik за давление на разработчиков открытого ПО, другие критиковали разработчиков, которые ленятся написать 11 строчек кода, и так далее. По мотивам этого происшествия в шутку создали сайт left-pad.io, который позволяет воспользоваться модулем через API. А также предложили хранить код не в npm, а в твитах.