Інтернет, який ми сприймаємо як щось вічне, в один момент може обрушитися, немов картковий будиночок. Це майже сталося днями, коли один програміст в засмучених почуттях видалив найпростішу програму з 11 рядків, зашкодивши таким чином тисячам софтверних проектів. Зараз вже все добре, але кейс наочно демонструє, наскільки це тендітна штука – інтернет.
Все почалося з того, що програміст на ім’я Азер Кокулу написав нічим не примітний модуль – розширення для популярної мови програмування Node.js. І назвав його Kik. свій модуль Кокулу завантажив на NPM (це як App Store для Node.js-програмістів) безкоштовно в допомогу колегам.
Але був і інший Kik – додаток-месенджер, власники якого звернулися до Кокулу з вимогою перейменувати модуль. Але програміст уперся. «Коли я почав писати Kik, я не знав, що є компанія з такою назвою. І я не хотів, щоб мене примушували міняти назву моєї програми», – написав Азер в блозі на Medium.
Як повідомляє Business Insider, закон був на стороні супротивника, який зареєстрував назву задовго до Кокулу з його модулем. В результаті СЕО NPM Ісаак Шлуетер анулював авторство Кокулу над власним модулем, не порадившись з програмістом.
«Ця ситуація дала мені зрозуміти, що 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».