● 前置き
Linux From Scratchというプロジェクトがあり、
https://www.linuxfromscratch.org/
イマドキのLinuxシステムで使うソフトウェア類をすべてソースコードからビルドして環境を構築する、というテーマの手順書を作るプロジェクトになっている。しかしLinux From Scratchでは「コンパイラをビルドするためのコンパイラ」問題が解決しない。
この、最初のコンパイラを用意することも含めて、イマドキのUNIX likeシステムを構築するところまで再現可能な手順を整える、というのがソフトウェアブートストラップという考え方になる。一般的には、自身のコードをビルドできるようなコンパイラを作る(セルフホスト)のがゴールとされるが、イマドキの環境をとなるとコンパイラを用意するだけでは成立しない。
● なぜブートストラップが必要なのか
Bootstrappable builds
https://bootstrappable.org/
に書いてあることをそのまま受け売りするだけなんだけど、
- もし世界中のソフトウェアが破壊されたとしても、ソースコードさえあれば元と同じ世界を再構築できるようにする
- 悪意あるコンパイラのバイナリが紛れ込むとバックドアがないことを証明できなくなる、そうならないようにする
あたりが主な目的になる。
● GNU Guix
GNUのツールを使ったUNIX環境をゼロから構築できることを構成として提供する。
https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/
特に、M2-Planet や Mes (MesCC) が、原始的なコンパイラとして重要になる
● live-bootstrap
さらに踏み込み、イマドキのLinuxシステムをゼロから構築する手順を網羅しメンテしている。
https://github.com/fosslinux/live-bootstrap/blob/master/parts.rst
流れを熟読してみると、主観ではあるもののキーとなるツールが見えてきておもしろい。
新しいバージョンを作るために同じツールの古いバージョンを必要とする、という例も多い。
- まずは、なんでもいいからプログラムをシェル的に動かせるようにして、
- 10 で M2-Planet(超原始的なCコンパイラ)を用意し、
- 19 で M2-Planet を使ってmes 0.27 (原始的なCコンパイラ)を作り、
- 20 で mes を使って tinycc 0.9.26 (古代的なCコンパイラ)を作り、
- 22 で tinycc を使って fiwix 1.5.0-lb1 (Linux 2.0ベースのクローン)を作って古代的なUNIXの構築を開始し、
- 40 で musl 1.1.24 (古いlibc)を作って古代的なUNIXのユーザランドを構築する足がかりにして、
- 56 gawk 3.0.4 や 57 perl 5.000 から、近代的な gcc をビルドするためのツールを満たしていき、
- 84 で gcc 4.0.4 を作って近代的なUNIXを構築するための一歩になって、
- 99 で Linux kernel 4.14.341-openela を作って近代的なUNIX環境を動かせるようにして、
- 145 で gcc 4.7.4 を作って現代的なツールをビルドするのに必須のまともな C++コンパイラを手に入れて、
- 148 で python 2.0.1 を作って pythonに依存したイマドキのツールもビルドできるようにしていき、
- 167 で gcc 10.5.0 を、169 で gcc 15.2.0 を、となって、このあたりでようやく Linux From Scratch の開始地点に到着する
● 余談1
gcc 4.6.4 や gcc 4.7.4 あたりが、イマドキのC++をビルドできるコンパイラだけど、コンパイルするのにC++コンパイラを必要としない、というキーポイントになっているらしい。RISC-Vは比較的新しいCPUアーキテクチャだが、gccのこれらバージョンの頃はまだRISC-Vをサポートしていなかったため、RISC-V環境はこのままでは同じ手順でブートストラップできない。だったら、gcc 4.6.4ベースでRISC-Vサポートを追加したらええやん、ということでメンテしてるらしい。
Collectively maintaining GCC 4.6.4
https://bootstrappable.org/projects/gcc-464.html
● 余談2
もし突然に現代科学の成果物がすべて失われてしまったと仮定して、知識だけを頼りに、元の現代科学の成果物を取り戻すにはどのような手順が必要か、というテーマで書かれたマンガ・アニメにDr.Stoneというのがある。見ていておもしろくはあるものの、いやそこはそう簡単にはいかんやろ、と突っ込みたくなるところもある。現代科学が失われたら、という社会実験を実際にやるのはほぼ不可能だけど、ソフトウェアのブートストラップは実際にやってみることができるので、そういうところがソフトウェアならではなのかなと思った。
