Чи може одна людина повалити інтернет? Звідки виникають небезпечні бібліотеки? І чому open-source програми можуть бути не лише благом, але й прокляттям?
У цій статті розповімо про випадок, коли незалежний інженер-програміст з Окленду порушив ці питання у 2016 році. Що відомо про «npm left-pad incident»?
Напевно, ви колись бачили цей мем.
Річ у тому, що в реальності все працювало саме так, як у цьому мемі. Facebook, PayPal, Netflix та Spotify у 2016 році тримались на програмі однієї людини. І коли ця людина прибрала свою програму, всі вони разом впали. Але як так сталося? І що це за суперважна програма?
Азер Кочулу — незалежний американський програміст турецького походження. Одного дня він створив дуже просту функцію для JavaScript, що додавала символи в початок рядка. У ній було всього сімнадцять рядків.
Ось і вся функція.
Він виклав свою функцію у NPM — менеджер пакетів для JavaScript, з якого програмісти могли завантажувати потрібні їм функції, класи й бібліотеки. Назвав він її так само просто: «left-pad».
Азер публікував свою функцію як open-source програму: код таких програм безкоштовно доступний всім охочим і підтримується також силами охочих.
Час йшов і люди почали завантажувати «left-pad»: функція була корисна, а самим писати було лінь.
Давно минули часи, коли програмістам було треба все придумувати самим. У наш час через інтернет доступна «сила силенна» бібліотек і пакетів, які вже реалізували багато з потрібних вам функцій, так що залишається лиш інтегрувати їх. От і «left-pad» інтегрували у свої програми численні користувачі, у тому числі — React та React Native, дуже популярні фреймворки JS, на яких були написані численні вебзастосунки.
У Кочулу був і інший пакет — «kik». Одного дня Kik Messenger (безкоштовний додаток для обміну миттєвими повідомленнями від канадської компанії Kik Interactive) почав вимагати від нього передати права на пакет їм, адже слово «кik» — зареєстрована торгова марка. Адміністрація NPM стала на бік Kik Messenger. Цього Кочулу не витримав, і, лаючись нецензурними словами, видалив з відкритого доступу всі свої пакети…
За місяць перед інцидентом «left-pad» був завантажений два з половиною мільйони разів. Всі проєкти, які залежали від нього, просто припинили працювати.
React і React Native більше не мали доступу до однієї з «залежностей» і перестали компілюватися. А за ними — перестали компілюватися всі застосунки, написані на них.
Почали ламатися Netflix і Facebook, а за ними Spotify. Це торкнулося навіть платіжної системи PayPal. Зламалися також деякі професіональні інструменти JavaScript, включаючи компілятор Babel.
За годину проблему ідентифікували та NPM скасував видалення пакета. Інтернет повернувся до спокою.
Проте виникало багато питань. Наскільки надійними є сучасні системи, якщо прибирання сімнадцяти рядків з інтернету ламає їх повністю? Чи можна взагалі покладатися на open-source програми, автори яких підтримують їх на чистому ентузіазмі та нічого вам не винні? Чи не занадто лінуються програмісти, що замість створення програм займаються зв’язуванням «залежностей» від чужих інструментів?
Після цього випадку NPM заборонив видаляти пакети, від яких хтось залежить.
А програмістам залишається шукати для себе традиційні відповіді при написанні програми.
- Витрачати зайвий час на реалізацію того, що вже сто разів було зроблено?
- Чи завантажити бібліотеку і розраховувати на те, що вона не зламається?
Звісно, писати вебсервер чи складні математичні дії кожен раз, коли вони вам потрібні — безглуздо. Проте безглуздо і завантажувати пакет для кожного «чиху» програми.
Так чи інакше, якщо ваша програма одного дня припинить працювати, лагодити її доведеться вам і лише вам. І наскільки легко буде це робити, залежить також лише від вас.
Іван Синенко