10 月頭に Linux の [netdev メーリングリスト](https://lore.kernel.org/netdev/)に以下のメールが届きました。
- [netdev development stats for 6.1?](https://lore.kernel.org/netdev/20221004212721.069dd189@kernel.org/)
送信者は Jakub Kicinski で Networking subsystem のメンテナの一人です。元々 netdev は David S. Miller (DaveM) が一人でメンテナンスしており、 Jakub は [DaveM の次の世代のメンテナ](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bda6a35505e28b70d48096c933d5949c9b6caf9a)で、このメールの他にも [peer feedback](https://lore.kernel.org/netdev/20221020183031.1245964-1-kuba@kernel.org/) の文化を netdev に持ち込んだり、積極的にコミュニティを良くしようと活動しています。
メールの内容は v5.19 から v6.1 までの開発サイクルに関する統計で、その範囲は netdev に限定されているようでした。この手の統計は LWN.net が各サイクル毎に出しているものの、 Linux 全体の統計はほとんど自分に縁のないものだったので、このメールを見つけた時は少しわくわくしました。
まず最初は内容を読む前に Ctrl + f を押して自分の名前を検索してみました。すると Top 10 authors の欄に二つ自分の名前を見つけました。少し喜んでいたところ、すぐ下にもう一つ自分の名前を見つけました。
```
Top 10 authors (thr): Top 10 authors (msg):
1. [ 84] ... 1. [287] ...
2. [ 52] ... 2. [232] ...
3. [ 43] ... 3. [166] ...
4. [ 28] ... 4. [156] Kuniyuki Iwashima
5. [ 28] ... 5. [134] ...
6. [ 23] ... 6. [122] ...
7. [ 23] ... 7. [106] ...
8. [ 20] ... 8. [ 93] ...
9. [ 20] Kuniyuki Iwashima 9. [ 93] ...
10. [ 20] ... 10. [ 86] ...
```
どうやら negative なスコアで 2 位を叩き出してしまったようで、ここでメールを最初から読み始めました。
```
Top 10 scores (positive): Top 10 scores (negative):
1. [4102] ... 1. [397] ...
2. [1848] ... 2. [116] Kuniyuki Iwashima
3. [737] ... 3. [105] ...
4. [620] ... 4. [ 93] ...
5. [611] ... 5. [ 82] ...
6. [588] ... 6. [ 82] ...
7. [429] ... 7. [ 77] ...
8. [418] ... 8. [ 68] ...
9. [406] ... 9. [ 67] ...
10. [344] ... 10. [ 64] ...
```
## Who is helping ?
メールの冒頭にあるように、この統計は「誰が助けになるか」、つまり、「誰がパッチのレビューを多くしているか」に焦点を当てたものでした。また、 LWN.net の統計がコミットメッセージに含まれる Signed-off-by や Reviewed-by の数に基づく一方で、この統計ではメーリングリストに送信されたメール数も考慮されているようでした。
```
For a while now I had been curious if we can squeeze any interesting
stats from the ML traffic. In particular I was curious "who is helping",
who is reviewing the most patches (but based on the emails sent not just
review tags).
```
メールの最初には Top 10 reviewers のランキングがあり、二つ目のランキングが Top 10 authors でした。さらにその下では**パッチを多く書いた人のほとんどがレビューを行っていない**と苦言が呈されていました。
```
most of the authors are not making the top reviewer list :(
```
そこから先ほどの Top 10 scores (negative) のランキングが記載されており、各人のスコアは `10 * reviews - 3 * authorship` で算出されていました。このスコアが *good citizen* としての指標であることから、メンテナにとってパッチのレビューがどれほど負荷になっているか、そしてその負荷を軽減する *citizen* がどれだけありがたがられる存在かが汲んで取れます。
```
And here is the part that I was most curious about.
Calculate a "score" which is roughly:
10 * reviews - 3 * authorship,
to see who is a "good citizen":
```
そんな中、他のパッチのレビューをほとんどせずに自分のパッチばかり出していた私は *bad citizen* として 2 位にランクインしてしまいました。
さらに続く企業別ランキングでも同様の結果となっていました。メッセージの数から分かるように Amazon からのメールのうち 156/157 が私のメールで、 netdev においては自分の活動がほとんどそのまま Amazon の印象として反映されていました。
```
Top 8 authors (thr): Top 7 authors (msg):
... ...
... 7. [157] Amazon
... ...
Top 12 scores (positive): Top 12 scores (negative):
... ...
... 4. [ 95] Amazon
... ...
... Amazon also seem
to send a lot more code than they help to review.
```
AWS に入社できたおかげでカーネル開発者として働く機会を得られたのもあって、自分が関わるコミュニティでは Amazon の OSS に関する印象を良くできればと思っていました。それだけにこの結果は残念に感じました。一方で少なくとも Amazon が全く OSS に貢献していないという印象は変えられたようにも思えました。それでも会社の印象を悪くしてしまったのは事実なので、この統計についてマネージャーに共有したところ、優しい言葉に救われました。
> You are an amazing engineer and great contributor. YOU ARE helping to change the narrative and help Amazon have a positive image in the community.. It will take some time and work with XXX and YYY (Pr. と Sr. のチームメイト) to help you with any review you are unsure of - I am so impressed with you and your approach and awareness here.. keep up the great work!! You are doing great! Keep in mind that the path to being a technical leader is hard, and you may stumble, but that is the path you are on - The path to being a great technical leader inside Amazon and in the Linux Kernel community -- keep pushing, ask for help when needed..
## The path to being a good citizen
カーネル開発を始めた頃から夢はメンテナと口にしていました。毎日メーリングリストを追いかける中、読んでも分からないパッチがほとんどで、メンテナはまだまだ遠い存在に感じていました。そのせいもあって以前から人のパッチをレビューするにはまだ早いと思い込んでいて、 Jakub のメールを見てもなお自分がレビューに参加できるものかと悩んでいました。そんな時背中を押してくれたのが同じ時期に公開された [Martin KaFai Lau のインタビュー記事](https://developers.facebook.com/blog/post/2022/10/06/meet-the-developers-linux-kernel-team-martin-lau/)でした。
Martin と最初にやりとりしたのは一昨年に [SO_REUSEPORT に関するパッチセット](https://lore.kernel.org/netdev/20201117094023.3685-1-kuniyu@amazon.co.jp/)を投稿した時でした。 Martin は最初にパッチセットに興味を持ってくれて、その後に何度もプライベートでレビューを重ねてくれました。おかげで最終的にパッチセットはマージされ、昨年の [Linux Plumbers Conference](https://lpc.events/event/11/contributions/946/) での登壇まで叶いました。当時 BPF レビュアーだった Martin は「TCP はコードリーディングの練習にいい」と言っていて、これまた遠い存在でした。
しかし記事を読むと、そんな彼が少しだけ近い存在にも思えました。 Martin でさえも最初は分からないことの方が多く、狭い領域での貢献を繰り返すことで徐々に知識の幅を広げていったようです。そんな Martin は最近 [BPF のいくつかの領域でメンテナになっていて](https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=32df6fe110c443763d6749a758f33a7117ec1270)、それを踏まえるとなんとも勇気付けられる内容でした。
> **What are some of the misconceptions about kernel or OSS development that you have encountered in your career?**
>
> ... It is impossible to get a grip on everything in the kernel. I shrink the scope, focus on one piece and fix something to gain credibility in the upstream. Then, I repeat the process to expand my knowledge space.
よくよく思い返すと、自分にも狭い範囲でなら自信のある領域はありました。今まで出したパッチの多くはソケットに関するもので、その範囲に限定すればある程度レビューは出来ると思えました。
それまで netdev に参加しつつもどこか距離を感じていたのですが、この時に自分もコミュニティを形成する一人なのだと考えを改めて、積極的にレビューに参加するよう心掛けました。
そしてレビューを始めた頃、 Jakub からプライベートで 1 通のメールを受け取りました。どうもその時だけ `git send-email` でタイトルに `Re: ` と付け忘れていたようで、統計に正しく反映されないことを親切に指摘してくれました。
```
> Acked-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Thanks for the review. FWIW I noticed that your mail client / script
does not add 'Re: ' to the subject which may be mildly confusing,
for example to scripts generating review statistics :)
```
指摘についてありがとうと返信しつつ、最後に統計に触れてレビューに参加していくことを宣言しました。すると Jakub から期待していると返信がきたので益々頑張ろうと思えました。
```
> BTW, the statistics helped me justify spending more time on reviewing :)
Awesome! :)
> I'm not so knowledgeable but will try to broaden expertise and join reviewing.
Great, looking forward!
```
そして遂に先週、 v6.2 の開発サイクルの統計が出ました。
- [[ANN] netdev development stats for 6.2](https://lore.kernel.org/netdev/20221215180608.04441356@kernel.org/)
この 2 ヶ月は個人的に [Open Source Summit Japan](https://www.youtube.com/watch?v=EB71gr1MZSg) の準備で忙しくしていたせいもあり、あまりパッチを出せていませんでした。またソケットに関するパッチはさして多くないので、レビューする機会もあまり多くはありませんでした。今回はランキングにも載らないだろうと思いつつも一応自分の名前を検索してみると、一箇所ヒットしました。
```
Kuniyuki has become an active reviewer of the socket layer (thanks!!)
therefore taking Amazon off the negative scores.
```
とても嬉しかったです。 Amazon の悪い印象を払拭できたのもそうですが、メンテナの Jakub にソケットレイヤのレビュアーとして認識されていたことが特に嬉しかったです。 [MAINTAINERS ファイル](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/MAINTAINERS)にソケットレイヤ単体のエントリはないので正式なレビュアーになった訳ではないですが、コミュニティ内での立ち位置を確かなものに出来たように思いました。
とはいえ *good citizen* には程遠いのでこれからも頑張ろうと思います。最後に Jakub の[スクリプト](https://github.com/kuba-moo/ml-stat)を使ってメンテナと自分の遠さを確認して終わろうと思います。
```
$ python3 ./ml-stat.py --db db.json.sample --email-count 18000 --top-extra 90
Tue, 04 Oct 2022 17:55:42 -0700
...
Top 100 reviewers (thr):
1. [354] Jakub Kicinski
2. [171] ...
3. [140] ...
4. [ 87] Paolo Abeni
5. [ 85] Eric Dumazet
...
32. [ 18] Kuniyuki Iwashima
...
Top 100 reviewers (msg):
1. [583] Jakub Kicinski
2. [325] ...
3. [264] ...
4. [162] ...
5. [148] Eric Dumazet
...
58. [ 21] Kuniyuki Iwashima
...
Top 105 authors (thr):
1. [ 65] ...
2. [ 57] ...
3. [ 56] Jakub Kicinski
4. [ 30] ...
5. [ 29] ...
6. [ 29] Eric Dumazet
...
12. [ 24] Kuniyuki Iwashima
...
Top 100 authors (msg):
1. [234] ...
2. [182] ...
3. [148] Jakub Kicinski
4. [146] ...
5. [125] ...
...
17. [ 77] Kuniyuki Iwashima
...
Top 105 scores (positive):
1. [4462] Jakub Kicinski
2. [2355] ...
3. [1810] ...
4. [1057] Paolo Abeni
5. [1028] Eric Dumazet
...
68. [110] Kuniyuki Iwashima
```