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