Linuxカーネル、その29年の歴史レポート

2020/08/25、[Linux Foundation](https://www.linuxfoundation.org/)が[2020 Linux Kernel History Report](https://www.linuxfoundation.org/blog/2020/08/download-the-2020-linux-kernel-history-report/)というレポートを発表しました。
1991年9月17日の最初のリリースから、2020年8月2日にリリースされたLinux5.8まで、29年におよぶLinuxカーネルの歴史をまとめたものです。

ということでざっくり斜め読みしてみました。
ていうかコピペできないPDFなのどうにかしてくれ。


# Linux Kernel History Report

このレポートは、Linuxの全ての歴史を調査したものである。
1991年9月17日に最初のカーネルがリリースされてから、最新の5.8カーネルがリリースされた2020年8月2日までには、BitKeeperとgitに100万件以上のcommit履歴が記録されている。

## Kernel Archeology

最初のリリースは88ファイル1万行、2964トークンしかなかった。
当初の痕跡はごくわずかしか残っていないが、`vsprintf.c`には1991/09/17のLinus自身によるファーストコミットが今も存在する。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/03b10840-b303-057f-101a-1ae2a75dc958.png "ファーストコミット")


Linux5.8のカーネルの半分以上はこの7年以内に書かれたコードである。

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/c37af6e2-d67a-2f12-374d-73f69dc2a223.png "年毎のコード量")


## Impact of Development Process Best Practices

開発のベストプラクティスを推進するため、CIIは2015年に[ベストプラクティスバッジ](https://github.com/coreinfrastructure/best-practices-badge)制度を作った。
Linuxコアは最初期にこのバッジを取得したプロジェクトのひとつで、2020年6月には最高級称号であるゴールドバッジを取得した。

とか書いてあるんだけど、CIIはLinuxFoundation内の組織なのでどうにもマッチポンプ感が拭えない。

## Adoption of Maintainer Hierarchy

1996年の1.3.68で初めて`MAINTAINERS`ファイルがコミットされた。
わずか107行で、メンテナは僅か3人。
Alan Cox、Jon Naylor、そしてLinus Torvalds。

```text:MAINTAINERS
REST:
P: Linus Torvalds
S: Buried alive in email
```

Linuxカーネル開発の初期の議論は複数のMLでなされていたので、1997年以前の議論については断片的にしか存在していない。
集められた一部については[http://lkml.iu.edu/hypermail/linux/](http://lkml.iu.edu/hypermail/linux/)で公開されているが、これにも抜けがあるので、当時のログを持っている人がいたら提供してほしい。

翻って5.8の`MAINTAINERS`は19033行もあり、そして1501人のメンテナがリストされている。

```text:MAINTAINERS
THE REST
M: Linus Torvalds <torvalds@linux-foundation.org>
L: linux-kernel@vger.kernel.org
S: Buried alive in reporters
Q: http://patchwork.kernel.org/project/LKML/list/
T: git git://git.kernel.org/pub/scm/linux/
kernel/git/torvalds/linux.git
F: *
F: */
```

## Version Control Systems

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/8e4fe46d-234f-7097-a54b-9c5dabd9044a.png "2002年以降のコミット数遷移")


BitKeeper以前は、誰がどれくらい貢献していたかについてはあまりはっきりとしていない。
きちんとした履歴は2002年ごろにはじまっていて、それ以前については各文献に残された履歴から推測している。

2005年に[色々あって](https://www.itmedia.co.jp/enterprise/articles/0504/20/news075.html)BitKeeperが使えなくなったので、Linusが一からGitを作ってそっちに移行した。

開発者の確保は永遠の課題であり、Linux FoundationもOutreachyやLKMPプログラムといった支援を続けている。
女性コントリビュータを増やす取り組みも行ってきた。

![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/103b0721-7957-d64e-e878-0c3194f645f7.png "女性コントリビュータの割合")


## Removing Unused Code

使用していないコードを削除する取り組みは継続していて、たとえば2018年の4.17では8アーキテクチャ18000行を削除した。

ということらしいのだけど増加量に比べたら微々たる量でしかないな。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/5bb68567-8a88-6f54-91c4-a6371896d1c4.png "全コード+コメントの行数")


## Highly Diversified Corporate Contributors

Linuxカーネルは多くの企業から貢献を受けている。
2007年から2019年まで、1730の企業から780048のコミットがあった。
そのうちトップ20企業が68%を占めている。

![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/8584885e-59c4-dbbf-60b0-e7a0a4b16d2a.png "コミット数トップ20の企業")

この10年では、毎年400社程度からのコントリビュートがある。

![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/23a98052-4a3b-124f-c226-2d02280caa37.png "年毎のコミット社数")


## Release Model with Predictable Release Cycle Cadence

Linuxのリリースモデルは4種類に分類される。
・Prepatch (RC)
・Mainline
・Stable
・Long Term Stable

最新のカーネルは[https://www.kernel.org/](https://www.kernel.org/)で見ることができる。

リリースサイクルについては多くの議論がなされたが、2011年以降概ね機能するリリースモデルが構築された。
まず2週間の`merge window`から始まり、新機能はテストされてgitリポジトリに導入される。
`RC1`のタグが振られると結合テスト、デバッグ、最適化のサイクルに入り、品質と安定性が確保されるまで`RC`が毎週更新される。
新機能がリリースされると、ふたたび次の`merge window`が始まる。

![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/570ff689-c1e1-bb70-3cf0-973f3023bacc.png "年毎のリリース数")



## Improving Automated Testing the Kernel

カーネルのテストはコミュニティの努力によって成り立っている。
自動テストBOTとしてSparse、Smatch、coccicheck、ファジングテストとしてTrinity、syzbotなどが走っている。
これらによって多くのバグが発見されている。

![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/8eeb11f1-5ed4-925c-ca03-68a5061e75fd.png "年毎のバグ発見数")


## Stable Release Process

安定版へのリリースはおよそ週1で行われる。

Linux5.7.9を例に取ると、まずリリース候補`RC`がMLにメールでアナウンスされる。
このRFには166のパッチがあり、それらは全て個別にMLで通知される。
各開発者および自動テストツールがそれらのリリース工法をテストし、結果をメールに返信する。
RCに問題があればRC2、RC3と後続が作成されるが、RC2が作られることはあまり多くない。

自動ビルドBOTは30種以上のアーキテクチャに対してビルドを実行する。
安定版では31アーキテクチャ、56コンフィグに対してビルドが行われる。
そしてLKFT、LTP、Linux Kernel Selftests、Linux Perfなど多くのテストが行われる。
テストが十分に果たされるとリリースされ、その通知がMLに送られる。


## Longterm Release Kernels

長期サポートを導入したことにより、組込製品などにおいてLinux人気がさらに高まった。
SUSE、Ubuntu、Red Hatなどのディストリビューションが先駆けて導入して有用性を証明したことで、カーネルにもこの概念が導入されることになった。

安定版カーネルで発見されたバグはまず安定版に適用されるが、LTSにも適用可能であると判断された場合はバックポートされる。
安定版の修正をLTSも適用可能であるかの判定は、Sasha Levinによる機械学習ツールの開発などによって年々改善されている。
2019年には18668件のバックポートが行われたが、これは15年前の安定版カーネルへの変更より多い件数である。

LTSよりさらに長い超長期サポートSLTSを求めている市場もあり、一部の開発者はLinux4.4と4.19をSLTSとしてサポートすることにしている。

## Conclusion

現在のLinuxカーネルは、医療機器から宇宙船に至るまで、セキュリティと安全性が必要なあらゆる分野で使用されている。
Linuxを使う前に、適切なセキュリティと安全性を確保できるようインフラを改善していくことが、次の取り組んでいる大きな課題のひとつである。

Linuxカーネルには、OSS業界全体を改善していくためのベストプラクティスを作成し、世界をリードし続けるための素晴らしい基盤が存在している。

## Thanks

なんか見切れてるんだけど。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/56ff4533-4c35-ceb8-0684-176f6702e3ba.png "読めない")



# 感想

もはや世界的に無くてはならない存在であるLinuxですが、その成長の軌跡がざっくりわかる興味深い資料でした。
コミッター数もコミット数もコード量も、近年のその飛躍的な増加も、このプロジェクトの重要性をよく示していますね。

ただまあ公的に近い資料だけあって表沙汰にできるような内容しかありません。
[裏](https://linux.srad.jp/story/13/06/12/0422226/)[側](https://linux.srad.jp/story/17/11/30/0726251/)[の](https://linux.srad.jp/story/14/04/04/0635221/)[歴](https://linux.srad.jp/story/18/01/23/078252/)[史](https://linux.srad.jp/story/18/11/02/0642259/)の集まったレポートとかもあると楽しそうです。


最近はクラウドだーサーバレスだーと、低レベルOSの存在は裏に隠そう隠そうと躍起になっていますが、何かあるとすぐコマンドとかログとか掘り返さないといけなくなって結局Linuxの知識が必要となるのは今でもあまり変わりません。
OSの存在や種類など気にしなくていいような世界は、本当にいつの日かやってくるのでしょうか。