GitHub Планета 2021

Как организовать живое сообщество
вокруг open-source продукта

О докладчике

Что такое GitHub?

1. Хостинг Git репозиториев.

2. Система управления проектами.

3. Социальная сеть для разработчиков.

Уровни open-source

Уровень 0: архивный и музейный код.

Исходники доступны публично под одной из open-source
или «source-available» лицензий.

Развитие продукта не предполагается.
Участие сообщества не обязательно.

Примеры:

id-Software/DOOM;
microsoft/MS-DOS;
vk-com/kphp-kdb;

Важно для сохранения культурного наследия.

Уровни open-source

Уровень 0: архивный и музейный код.

Примеры:

— заброшенные проекты;

— проекты с оконченным циклом развития;

— демонстрационный код в рамках исследования;

— вынужденный open-source для соответствия лицензии;

— проекты по сохранению культурного наследия,
  представляющего исторический интерес;

Уровни open-source

Уровень 1: «кафедральная разработка».

Исходники доступны публично.
Продукт развивается без участия сообщества.

Пример 1:

SQLite: разработка командой небольшого размера;
  патчи принимаются в исключительных случаях
  и обычно переписываются.

Пример 2:

— разработка внутри корпораций
  с периодической публикацией снепшотов кода.

Уровни open-source

Уровень 2:

Исходники доступны публично.
Патчи от сообщества принимаются.
Закрытые процессы разработки.

Процессы разработки:

— правила разработки (contribution guidelines);
— таск-трекер;
— система code review;
— планы разработки (development roadmap);
— система тестирования и CI;
— релизный цикл;
— поддержка пользователей;
— документация;

Уровни open-source

Уровень 3:

Исходники доступны публично.
Патчи от сообщества принимаются.
Открытые процессы разработки.
Максимальное поощрение и вовлечение сообщества.

GitHub — это социальная сеть для разработчиков.

Вопрос: может ли GitHub вместить в себя все процессы разработки,
чтобы максимально использовать его преимущества?

GitHub для процессов разработки

Пример 1: torvalds/linux

Возможно крупнейшее и самое развитое сообщество.

Недавно начали использовать GitHub для хостинга кода.

Изменения принимаются через списки рассылки,
pull requests на GitHub не используются
(как будто используются, но по факту, содержат мусор).

Для issue tracker используется Bugzilla,
Issues на GitHub не предусмотрены.

Для CI используется отдельный продукт kernelci.org.

Никакие процессы не интегрированы с GitHub.

GitHub для процессов разработки

Пример 2: llvm/llvm-project

Один из наиболее активных open-source C++ продуктов.

Недавно перешли с SVN и своего хостинга на Git и GitHub.

Все pull requests на GitHub автоматически закрываются роботом.

Патчи рассматриваются в Phabricator: https://reviews.llvm.org/

Для issue tracker используется Bugzilla: https://bugs.llvm.org/

Никакие процессы не интегрированы с GitHub.

GitHub для процессов разработки

Пример 3: mongodb/mongo

В качестве issue tracker используется JIRA

Изменения публикуются в виде pull requests.

Code review и merge производится вне GitHub.

Участие сообщества в разработке минимально.

Для CI системы используется собственная разработка Evergreen: https://evergreen.mongodb.com/

Публично доступны только результаты тестов, но не логи и артифакты.

GitHub для процессов разработки

Пример 4: arangodb/arangodb

Используются issues и pull requests на GitHub.

Активные обсуждения и code review в рамках GitHub.

Закрытый CI: ссылки ведут на недоступную страницу.

GitHub для процессов разработки

Пример 5: tensorflow/tensorflow

Используются issues и pull requests на GitHub.

Активные обсуждения и code review в рамках GitHub.

Открытый CI: используется собственная система,
логи и артифакты доступны публично.

Способы вовлечения сообщества

Низкий порог входа:
— простота и понятность кода, наличие design docs;
— хорошо документированный код — как учебник.

Открытый не только код, но и процессы:
— разработка open-source продукта может быть реалити-шоу!

Основные разработчики используют те же инструменты, что и внешние:
— отправляют pull requests и мержат их по одинаковым правилам.

Обсуждения и планы доступны снаружи:
— контрибьютор может выбрать для реализации крупную задачу,
и обсудить способы её реализации.

Способы вовлечения сообщества

Минимальные усилия для внесения изменений:
— наличие code style и guidelines;
— отсутствие необходимости регистрации на внешнем сервисе;
— отсутствие заполнения сложных форм;
— максимально простой процесс согласия с CLA или DCO.

Быстрая обратная связь в pull requests:
— публично доступная, автоматизированная система CI:
  быстро сообщает о тех ошибках, которые автор может исправить сам.
— сборки, линтеры, форматирование кода, статический анализ,
  тесты и тестовое покрытие, фазинг...

Дружелюбный процесс code review:
— быстрое назначение ревьюеров;
— совместная работа над кодом и доведение до мержа.

Способы вовлечения сообщества

Вовлечение и поощрение контрибьюторов:
— обязательные credits в changelog, списке авторов;
— конкурсы и хакатоны; сувениры, подарки;
— вовлечение в конференции и мероприятия;
— обучающие проекты и взаимодейтсвие с институтами;
— технические статьи, интересные для разработчиков;

Нельзя в чём-либо обвинять контрибьюторов:
— если вы приняли недоделанный код — это ваша проблема;
— вклад в ваш продукт должен быть поводом для гордости.

Время и внимание:
— в развитие сообщества придётся вкладывать много усилий.

Пример ClickHouse

Изначально разрабатывался в Яндексе.

Применяем на практике все указанные рекомендации :)

Работа с сообществом — существенная часть
должностных обязанностей моей команды.

Сейчас 46%* изменений — сообщество.

* методика расчёта: https://gh-api.clickhouse.tech/play?user=play# U0VMRUNUCiAgICBhY3Rvcl9sb2dpbiwKICAgIGNvdW50KCkKRlJPTSBnaXRodWJfZXZlbnRzCldIRVJFIChyZXBvX25 hbWUgSU4gKCdDbGlja0hvdXNlL0NsaWNrSG91c2UnLCAneWFuZGV4L0NsaWNrSG91c2UnKSkgQU5EIChldmVudF90eX BlID0gJ1B1bGxSZXF1ZXN0RXZlbnQnKSBBTkQgKGFjdGlvbiA9ICdvcGVuZWQnKSBBTkQgKGFjdG9yX2xvZ2luIE5PV CBJTiAoJ3JvYm90LWNsaWNraG91c2UnLCAnZGVwZW5kYWJvdC1wcmV2aWV3W2JvdF0nLCAnaW1nYm90W2JvdF0nKSkK R1JPVVAgQlkgYWN0b3JfbG9naW4KT1JERVIgQlkgY291bnQoKSBERVND

Сообщество ClickHouse

:) SELECT * FROM system.contributors

┌─name──────────────────────────────────┐
│ Olga Khvostikova                      │
│ abdrakhmanov                          │
│ Mikhail Filimonov                     │
│ Jason                                 │
│ achulkov2                             │
│ Veniamin Gvozdikov                    │
  ...
│ Artemeey                              │
│ ivanzhukov                            │
│ Ilya Khomutov                         │
└───────────────────────────────────────┘

855 rows in set.

?