U-root: A Go-based, firmware embeddable root file system with on-demand compilation
これもATC15かな。
ここで言うファイルシステムというのはファイルシステム自体の話ではなくて、もいっこ上の、ファイルツリーの話。いわゆる/
ですね。組み込みLinuxの/
だとbusyboxを使ったりするけど、ここではそこをGolangで書いてみた、という話。
Golangでそれを書いたからってどうなるわけでもあるまい、と思うでしょ?
それをいい意味で裏切ってくれる内容だった。
このroot fs、バイナリとしてはinitとgoのコンパイラしか含んでいない。あとはソースの形で持っている。コマンドを実行したときに、未コンパイルであればその場でコンパイルされ、実行される。バイナリはキャッシュされる。以前はPerl LinuxてのがあってPerlの処理系とスクリプトで動かすやつがあったらしい。あともちろん主流の、普通のBusyboxベースのやつもある。前者は効率は悪いが柔軟性があって、後者は柔軟性はないが効率が良い。U-rootはその中間を狙った。Golangは動作も高速だしコンパイルも速いからね。マルチプラットフォームへの対応も割と楽。Busyboxは割とLinuxべったりな作りだけど、GolangであればLinuxからの脱出も楽だろう。
U-rootはgithubにリポジトリがあり、お試し用にdocker imageも公開している。楽しそうだね。tiny core linux(私も時折使う軽量Linux)ベースで拡張できるようにしたりしている。
ためしにdocker runしてみると、けっこうでかいイメージを引っ張ってきまくっているんだけど、ホントに組み込み向けなのかこれ?? 普通に流通しているCentOSのイメージよりでかい印象なんだけど…まあこういう、研究者による実装の完成度は高くないことが多いので、実際はそんなもんかもしれない。とは言えこれって理論は割とどうでもいい話なので、この完成度の低さは萎える。