Система разработки и поддержки ядра 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. Мейнтейнер должен помнить, что он обслуживает разработчиков, а не они служат ему.
Поделиться с друзьями
-->

Комментарии (4)


  1. Randl
    21.01.2017 21:35

    Своего рода продолжение https://habrahabr.ru/post/314084/


  1. musuk
    21.01.2017 23:57
    -8

    Просто git слишком сложный, вот никто не готов делать git revert на большом проекте.


  1. Rulexec
    22.01.2017 18:04

    Обязательно должны быть те, кто будет ревьювить код, вносимый в настолько важный проект и иметь права на блокирование внесения некоторых коммитов. Иначе шансы на получение бэкдоров/прочих радостей значительно возрастают, чего не хотелось бы.

    Я не знаю, как на самом деле устроено ядро и мне вот интересно, почему в ядре настолько много работы и из-за чего её объём может расти? Почему не «закончить» разработку ядра, оставив в нём только совсем стабильные системные абстракции, поддерживать «околоядро», предоставляющее API для взаимодействия модулей, а поддержку оборудования вообще вынести за его пределы? Или оно так и есть? Как оно вообще?


    1. Deosis
      23.01.2017 07:47

      Разработку ядра можно и «закончить», вы ведь до сих пор сидите на Win95?
      Можно попробовать вариант с демократией:
      Разработчики пишут свой код и ревьюят чужой.
      Для внесения в мастер коммит должен получить определенный рейтинг.
      Рейтинг коммита равен* сумме рейтингов проголосовавших за минус рейтинги проголосовавших против.
      Рейтинг автора определяется качеством внесенных коммитов.
      * формулы расчета могут быть сложнее.