Мейнтейнери не масштабуються



Система розробки і підтримки ядра Linux не так ідеальна, як хотілося б. Чому б не покращити нинішню систему, використовуючи в якості експерименту успішний досвід інших проектів? З такою пропозицією виступив розробник Деніел Веттер (Daniel Vetter). Він підготував доповідь на цю тему для конференції LCA 2017 (слайди), а також опублікував більш докладний текст в блозі.

Деніел Веттер останні кілька років займається підтримкою драйвера ядра для графіки Intel drm/i915, він працює в Intel Open Source Technology Center. Драйвер drm/i915 підтримують два мейнтейнера, а приблизно 19 розробників мають право коммитить патчі відразу в основну гілку. «Це цілком нормальна ситуація для спільноти open source, але абсолютно немислима річ для ядра Linux», — каже Деніел. Він вважає, що така організація роботи над драйвером цілком успішно проявила себе і її цілком можна використовувати в інших місцях. Наприклад, в ядрі Linux, де зараз на мейнтейнерів доводиться занадто велике навантаження.

Ось основні тези доповіді.

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

Культ зайнятості веде до вигорання — наростаючому емоційного виснаження, яке може спричинити за собою особистісні зміни в сфері спілкування з людьми (аж до розвитку глибоких когнітивних спотворень). Згідно клініці, емоційне вигорання проявляється наростаючим байдужістю до своїх обов'язків і того, що відбувається на роботі, дегуманізацією у формі негативізму до свої колег та користувачів, а також негативний самовосприятии в професійному плані, незадоволеності своєю роботою.

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

Емоційне вигорання часто починається при недостатньо високій оплаті праці людини та/або недостатньо високому психологічному заохоченні його праці. В цьому випадку виникає відчуття, що його робота не має цінності. Іноді напружена праця в період емоційного вигорання супроводжується зловживанням алкоголем.

Деніел Веттер вважає, що емоційне вигорання — це основна загроза для розробника, який працює в проекті open source: «Особисто я пройшов через кілька складних етапів, перш ніж усвідомив свої ліміти і став дотримуватися їх», — пише він. Культ зайнятості та вигоряння мейнтейнерів цілком зрозуміло. Ти починаєш працювати з двома-трьома розробників, а через кілька років їх кількість зростає до кількох десятків. Природно, що часу не вистачає на все. Добре про цьому процесі і своєму власному вигорянні розповів Джейкоб Каплан-Мосс, один з основних розробників Django, теж колишній мейнтейнер.

Кожен рік на конференції розробників ядра обговорюється тема, щасливий Лінус.

Проблему вигорання ні в якому разі не можна ігнорувати, тому слід чітко стежити за тим, щоб не працювати занадто багато.

Мейнтейнери ядра Linux
На думку автора, нинішні мейнтейнери ядра Linux працюють занадто багато, і це нездорова ситуація. Приблизно 80% всіх патчів мейнтейнери накочують від імені інших авторів. Зазвичай зміни скидаються в список розсилки, тут їх обговорюють, а потім мейнтейнер патч додає у свою гілку git. Потім кожен мейнтейнер відправляє запит на включення зроблених змін, часто безпосередньо Лінусу. Для деяких великих підсистем (мережевий стек, графіка, ARM-SoC) є другий або третій рівень мейнтейнерів. Тільки 20% патчів в ядро приходять безпосередньо від авторів.

Більшість мейнтейнерів дійсно сильно завантажені роботою. Один чоловік доглядає за кількома областями ядра з відповідними різними гілками git і репозиторіями.

Деніел Веттер каже, що у своєму проекті drm/i915 близько року тому вони впровадили радикально іншу систему, коли всім розробникам дали рівні права на додавання патчів в репозиторій
drm-intel
. Зараз такі права є у 19 осіб. За підсумками першого року роботи експеримент виглядає цілком вдало. Зараз близько 70% комітів в репозиторій відбуваються безпосередньо від авторів.

Автор також посилається на досвід спільноти Rust (доповідь з минулорічної конференції LCA), в якому така система працює дуже добре.

Деніел Веттер багато років працював за традиційною моделі з мейнтейнерами, зараз отримав новий досвід і з упевненістю говорить, що нинішня модель мейнейнеров ядра Linux просто не масштабується. Мова йде не про те, що ієрархічна модель технічно недієздатна при збільшенні кількості розробників. Зовсім ні. Ця модель git довела свою успішність. Мова йде про ефективність, з якою патчі розглядаються і вносяться в ядро. Ось ця ефективність знижується.

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

«Якщо мета проекту — світове домінування або, принаймні, створення чогось тривалого, то краще мати надійну організацію, яка справляється з плинністю робочої сили», — пише Веттер. Замість цього мейнтейнери породжують нові рівні ієрархії, які тільки погіршують ситуацію. Так, у графічній підсистемі для простого драйвера іноді потрібні патчі в п'ять різних гілок. Ймовірність практично 100%, що хоча б один з мейнтейнерів не буде доступний відразу, і процес розтягується надовго.

Ще одна проблема в тому, що при нинішній ієрархічній системі більша частина патчів самих мейнтейнерів ніхто не розглядає і не аналізує. Це вже схоже на диктатуру. «Плоска» система з рівними правами позбавлена такого недоліку.

Не дивно, що навіть у співтоваристві Debian зараз обговорюють перехід на модель без мейнтейнерів.

Замість нинішньої ієрархічної структури Деніел Веттер пропонує рассмотрить щось на зразок mesh-мережі, де розробники мають рівні права на коміти. Він вважає, що мейнтейнери, які скаржаться на брак часу і в тому ж час говоррят, що не може нікому довіряти, насправді погано роблять свою роботу.

Треба більше довіряти людям, але бути готовим зробити
git revert
. Мейнтейнер повинен пам'ятати, що він обслуговує розробників, а не вони служать йому.
Джерело: Хабрахабр

0 коментарів

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