GitHub Planet 2021

Author: Alexey Milovidov, 2021-02-16.

How to Build a Thriving Community
Around an Open-Source Product

About the Speaker

What is GitHub?

1. Git repository hosting.

2. Project management system.

3. Social network for developers.

Levels of Open-Source

Level 0: archival and museum code.

Source code is publicly available under one of the open-source
or «source-available» licenses.

Product development is not expected.
Community participation is not required.

Examples:

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

Important for preserving cultural heritage.

Levels of Open-Source

Level 0: archival and museum code.

Examples:

— abandoned projects;

— projects with completed development cycle;

— demonstration code within research;

— forced open-source for license compliance;

— projects for preserving cultural heritage,
  of historical interest;

Levels of Open-Source

Level 1: «cathedral development».

Source code is publicly available.
Product is developed without community participation.

Example 1:

SQLite: developed by a small team;
  patches are accepted in exceptional cases
  and usually rewritten.

Example 2:

— development within corporations
  with periodic publication of code snapshots.

Levels of Open-Source

Level 2:

Source code is publicly available.
Patches from community are accepted.
Closed development processes.

Development processes:

— contribution guidelines;
— task tracker;
— code review system;
— development roadmap;
— testing and CI system;
— release cycle;
— user support;
— documentation;

Levels of Open-Source

Level 3:

Source code is publicly available.
Patches from community are accepted.
Open development processes.
Maximum encouragement and community involvement.

GitHub — is a social network for developers.

Question: can GitHub contain all development processes,
to maximize its advantages?

GitHub for Development Processes

Example 1: torvalds/linux

Possibly the largest and most developed community.

Recently started using GitHub for code hosting.

Changes are accepted through mailing lists,
pull requests on GitHub are not used
(as if they are used, but in fact, contain garbage).

For issue tracker, Bugzilla is used,
Issues on GitHub are not provided.

For CI, a separate product kernelci.org is used.

No processes are integrated with GitHub.

GitHub for Development Processes

Example 2: llvm/llvm-project

One of the most active open-source C++ products.

Recently migrated from SVN and self-hosting to Git and GitHub.

All pull requests on GitHub are automatically closed by a bot.

Patches are reviewed in Phabricator: https://reviews.llvm.org/

For issue tracker, Bugzilla is used: https://bugs.llvm.org/

No processes are integrated with GitHub.

GitHub for Development Processes

Example 3: mongodb/mongo

JIRA is used as issue tracker

Changes are published as pull requests.

Code review and merge are done outside GitHub.

Community participation in development is minimal.

For CI system, their own development Evergreen is used: https://evergreen.mongodb.com/

Only test results are publicly available, but not logs and artifacts.

GitHub for Development Processes

Example 4: arangodb/arangodb

Issues and pull requests on GitHub are used.

Active discussions and code review within GitHub.

Closed CI: links lead to inaccessible pages.

GitHub for Development Processes

Example 5: tensorflow/tensorflow

Issues and pull requests on GitHub are used.

Active discussions and code review within GitHub.

Open CI: their own system is used,
logs and artifacts are publicly available.

Ways to Engage Community

Low barrier to entry:
— simplicity and clarity of code, presence of design docs;
— well-documented code — like a textbook.

Open not only code, but also processes:
— open-source product development can be a reality show!

Core developers use the same tools as external ones:
— send pull requests and merge them according to the same rules.

Discussions and plans are accessible from outside:
— a contributor can choose a large task to implement,
and discuss ways to implement it.

Ways to Engage Community

Minimal effort to make changes:
— presence of code style and guidelines;
— no need to register on external service;
— no need to fill complex forms;
— simplest possible process for agreeing to CLA or DCO.

Fast feedback in pull requests:
— publicly available, automated CI system:
  quickly reports errors that the author can fix themselves.
— builds, linters, code formatting, static analysis,
  tests and test coverage, fuzzing...

Friendly code review process:
— quick assignment of reviewers;
— collaborative work on code and bringing it to merge.

Ways to Engage Community

Involvement and encouragement of contributors:
— mandatory credits in changelog, list of authors;
— contests and hackathons; souvenirs, gifts;
— involvement in conferences and events;
— educational projects and interaction with institutes;
— technical articles, interesting for developers;

Never blame contributors for anything:
— if you accepted incomplete code — it's your problem;
— contribution to your product should be a source of pride.

Time and attention:
— developing a community will require a lot of effort.

ClickHouse Example

Originally developed at Yandex.

We apply all the mentioned recommendations in practice :)

Working with the community — is a significant part
of my team's job responsibilities.

Currently 46%* of changes — from the community.

* calculation methodology: https://play.clickhouse.com/play?user=play# U0VMRUNUCiAgICBhY3Rvcl9sb2dpbiwKICAgIGNvdW50KCkKRlJPTSBnaXRodWJfZXZlbnRzCldIRVJFIChyZXBvX25 hbWUgSU4gKCdDbGlja0hvdXNlL0NsaWNrSG91c2UnLCAneWFuZGV4L0NsaWNrSG91c2UnKSkgQU5EIChldmVudF90eX BlID0gJ1B1bGxSZXF1ZXN0RXZlbnQnKSBBTkQgKGFjdGlvbiA9ICdvcGVuZWQnKSBBTkQgKGFjdG9yX2xvZ2luIE5PV CBJTiAoJ3JvYm90LWNsaWNraG91c2UnLCAnZGVwZW5kYWJvdC1wcmV2aWV3W2JvdF0nLCAnaW1nYm90W2JvdF0nKSkK R1JPVVAgQlkgYWN0b3JfbG9naW4KT1JERVIgQlkgY291bnQoKSBERVND

ClickHouse Community

:) SELECT * FROM system.contributors

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

855 rows in set.

?