Все валиться

Давайте спробуємо разом зменшити фрагментацію в світі JavaScript

Нещодавно, після аносна Yarn (пакетний менеджер для node.js від facebook прим. пер.), деякі в JavaScript співтоваристві розкритикували Facebook і проект в цілому.

Існує тенденція для команії або індивідуумів форкать або перестворювати OSS проекти, замість роботи над існуючими в співтоваристві. Це відбувається з багатьох причин, але це трапляється частіше, ніж потрібно. Це пояснює, чому з'явився Yarn.


Панки живі!

По суті немає нічого поганого в DIY(«зроби це сам» прим. пер.) у OSS. Для разрабтчиков — це хороший спосіб дізнатися, чи показати на що ти здатний. Поки у тебе немає фан-клубу, це крапля в морі.

Але якщо це робить бізнес, який може надати ресурси і таланти для проекту, з потрібними зв'язками і маркетингом — це схоже гарматного ядра. І діє виключно у своїх інтересах, що може заподіяти шкоду OSS спільноти.

Я хочу розповісти чому компанія може прийти до такого рішення (див. також: фатальний недолік), та які від цього можуть бути наслідки.

Благими намірами вимощена...

Якщо трапляється, що OSS проект X може в деяких сценаріях працювати для компанії, вона спробує його використовувати.

Але можливо, що вона не досить добре вивчила його, чи змінилися потреби, або змінилася сфера, чи баг X все ніяк не пофиксят або мільйон причин. Замість співпраці, компанія бере і пише свою реалізацію.

Розробники компанії розуміють, що дешевше буде зробити все самим. Я знаю це, тому що, сам так робив. І в цьому є якийсь сенс.

Бізнес любить і погоджується з ідеєю, що він «може повертати» спільноти відкривши исходники свого нового проекту! Розробникам в компанії це теж подобається тому, що вони пишуть код за своїм стандартам і практикам. Вони більше не залежать від примх і тимчасових рамок кого небудь ще.

Більш уважний бізнес, зробить більш сумлінне рішення і поверне внесок у проект X. Поки код вливається в розумний час, всі щасливі. Але якщо PR висить занадто довго або мейнтейнери не згодні з рішенням і відхилили запит, співпраця може закінчиться.

Що виллється в новий проект Z, який призведе до фрагметации на декількох рівнях:
  • Співтовариство. Із-за поділу, деякі користувачі можуть перекинутися до Z. Може Z підходить їм більше, або вони вірять, що Z буде розвиватися швидше, або тому, що воно нове і блищить. Внесок у X може знизитися.
  • Зусилля. Користувачі тепер будуть контрибьютить в Z замість внеску в проект X. Паритет з фічами або сумісності дублює зусилля.
  • Екосистема. Проект X добре поширений і у нього є плагіни, і він надає інтеграцію з іншими інструментами. Ці інструменти в екосистемі X можуть бути або не бути сумісні з Z.


Індивідууми, бізнес і мейнтейнери проекту могли б постаратися для запобігання потенційної фрагментації. Мейнтейнери дуже зав'язані або часто не розуміють, що реально потрібно пользователм, або у них інша мотивація. Компанії думають, що вони зустрічаються з «унікальними проблемами» частіше ніж є насправді.

З перерахованого вище, я хотів би загострити увагу на фрагментацію екосистеми, оскільки це має відношення до недавнього анонсу Yarn.

Однакові, але різні

Коли я намагався використовувати альтернативи npm cli, у мене просто зламалися пакети. Вони зламалися, оскільки очікували, що будуть встановлені через npm cli. Не дуже очевидно, але вся справа в lifecycle scripts і те як cli по особливому обробляє симлинки директорій.

У мене є підозри, що таких пакетів багато, і ти використовуєш щонайменше хоча б один.

Не варто очікувати, що альтернативи npm cli забезпечують 100% сумісність з поточної екосистемою. Якщо б вони робили все теж, що і npm cli, все б припинили користуватися npm cli, включаючи сам npm.

Навіть якщо альтернатива cli забезпечує більшу безпеку та продуктивність, широке впровадження викличе певний рівень фрагментації екосистеми.

Не так легко бути зеленим

Новенькі в node.js і JS співтоваристві зіткнутися з ще одним вибором, який інструмент використовувати. Для них буде не зрозуміло, чому npm не працює з цією бібліотекою, яка була написана з використанням альтернативного cli. Або, чому альтернативний cli не працює з цією бібліотекою, очікує npm.

Не дивлячись на всі зусилля і увагу вкладені в Yarn, він не зможе покрити всі випадки, не кожен буде чекати 100% сумісності. Ветеран JavaScript екосистеми зможе знайти обхідні шляхи, але новачок немає.

Перемножуємо матрицю складання

Ти майнтейнер проекту. Одного разу ти отримуєш повідомлення про помилку від користувача:

хей, цей пакет не працює з quuxbaz, новий npm клієнт, додайте підтримку пліз.


Забудь, що ти витратив минулий тиждень на виправлення підтримки Windows. Тепер тобі потрібно турбуватися про підтримці quuxbaz на Windows.

Ти можеш побачити, як швидко росте ця проблема. Якщо ти підтримуєш три (3) версії node.js на Linux, Windows і MacOS (9), то твоя матриця подвоюється до вісімнадцяти (18), якщо враховувати, що quuxbaz працює на цих дев'яти конфігураціях. А може і не працює, так що забудь про тих дивних баги над якими ти працював, це насправді проблема з node.js 4.під MacOS x використовуючи quuxbaz.

Я такого не очікую, але я не хочу більше оверхеда, не те, щоб я хочу відразу взяти і відмовитися від підтримки quuxbaz. І я заздалегідь вибачаюсь перед вами, якщо я напишу це питання в трекері твого проекту.

Більш конкретний приклад:
Коли з'явився Browserify, багато пакети на node.js магічним чином заробили в браузері. Інші виявилися зламані. Деякі поправили цей «баг», інші ні. Час минув і тепер Browserify працює ніби нормально, але не з Webpack. А потім ламається в якомусь браузері, або electron, або телефоні або тостері і тд.

Як нам уникнути таких проблем?

Командна робота!

Незважаючи на причини чому ми тут, ми все разом.

Для користувачів
Як споживач Node.js модулів, ти можеш допомогти мейнтейнеру проекту, відправляючи більш детальні баг репорти, та/або код який виправляє ці баги. Якщо ти запостив баг, стеж за його виправленням. Якщо ти законтрибьютил код, будь ласка, допомагай його підтримувати. Остання частина, особливо важлива.

Мейнтейнери
Як мейнтейнер, будь відкритим для нових ідей і перспектив. Якщо ти виклав що на Github, ти повинен чекати, що хтось буде це використовувати, не так як ти це припускаєш. Ти будеш здивований, як багато розбіжностей вирішує «залишити це за флагом».

Бізнес
Для бізнесу — і спеціально для R&D команд — якщо проект має активне співтовариство, приєднуйтесь. Може виявитися, що інший користувач хоче таку фічу що і ви. Може, ви можете попрацювати над нею разом, як наприклад команда Yarn.

Команда Yarn
Хлопці, ви доклали неймовірних зусиль. Напевно існує якесь непорозуміння навколо існування проекту.

Будь ласка допоможіть зрозуміти співтовариства, і особливо новачкам:

  • Що таке Yarn і для чого він?
  • Чому саме він?
  • Що можна очікувати від роботи з ним?


Якщо я завтра побачу нове ишью «не працює з Yarn», хоча я не очікую що побачу, я б хотів вікі або документацію з описом загальних проблем, рішень та відомих несумісностей, часті помилки користувачів і тд.

І якщо вам не важко, будь ласка тримайте 100% сумісність з npm за прапором, спасибі.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.