コンシューマ機器における主流のOSといえば、何を思いつくだろうか。製品単位での区分では、macOSやiOS、Windowsあたりがすぐに思い浮かぶことだろうが、より大まかな区分でいえば「UNIX系OS」が挙がるはず。macOSとその派生のiOSはBSD UNIXの系譜に連なるOSであり、組み込みの分野ではUNIX互換として登場したLinuxが大きなシェアを占めている。Android OSもカーネルはLinuxであり、広義のUNIX系OSに分類することができる。
その「UNIX系OS」はCPUなどハードウェアの急速な技術進化に支えられ、スマートフォンや家電に当たり前のように採用されている。90年代はUNIX系OSといえば負荷の面でもコストの面でも"重い"もの、家電に組み込むなど夢物語と認識されていたものだが(だからNetBSDがトースターに組み込まれたという2005年頃のニュースには希望を感じた)、いまや小型音楽プレイヤーにも当たり前のようにLinuxが入っている。Linuxがオープンソースをけん引し、macOS/iOSも少なからずその恩恵に浴している。
しかし、そんなUNIX系OSもいくつかの"制度疲労"を抱えている。Linuxを例に挙げれば、多機能化の一方肥大化傾向が著しいカーネル(小型機器など軽量/リアルタイム性が指向される分野もある)、商業利用にはなにかと面倒を伴うオープンソースライセンスのGPLなど、今後ますます増える小型ネットワーク機器(いわゆるIoTデバイス)にとっては扱いにくい部分があることは否定できないだろう。
前置きが長くなったが、今回のテーマ「Fuchsia(フクシア)」は、GoogleがAndoroid OS/Chrome OSに続き開発中の"第3のOS"。コアはZircon(ジルコン)というIoTを意識したカーネルであり、POSIX一部互換の環境を備えることを踏まえると、「BSDでもLinuxでもない、第3の(UNIXテイストの)OS」として見ることもできそう。ざっと眺めたかぎりでは、ライセンスにGPLは含まれないようだ。実際のところどうなのか確かめるために、取りあげてみたい。
Fuchsiaのビルド
Fuchsiaはオープンソースソフトウェアであり、カーネル部分(Zircon)のソースコードはMITライセンスのもと公開されている。他の部分も修正BSDやApache 2.0などGPL 3以外のライセンスを適用しており、Linuxベースのシステムに比べ開発/再配布の自由度を高める狙いがうかがえる。
macOSへのインストールには、最新版のXcode(コマンドラインツール含む)とHomebrewが必要。具体的な手順は公式ドキュメントを参照いただくとして、念のため筆者が実行したコマンドラインを順に掲載しておく。
注意点は、30GB以上のディスクスペースを用意しておくことと、x86プラットフォーム向けビルドを準備するためのコマンド「fx set...」を実行するとき、「--release」オプションを付けたほうがいいことの2点。オプションなしではバイナリにデバッグ用のシンボルが含まれるため、空きが30GBでも足りなくなる。なお、ビルドが完了するまでは数時間かかるため、余裕があるときに実行したほうがいいだろう。
$ xcode-select --install
$ brew update
$ brew install go autoconf automake glib libtool pkg-config wget
$ curl -s "https://fuchsia.googlesource.com/scripts/+/master/bootstrap?format=TEXT" | base64 --decode | bash -s topaz
$ cd topaz
$ export PATH=`pwd`/.jiri_root/bin:$PATH
$ fx set x86-64 --release
$ fx full-build
FuchsiaにはCPUエミュレータ「QEMU」のビルド済バイナリが同梱されているため、fxコマンドでかんたんに起動できる。ただし、最新のFuchsiaは描画にVULKAN(新世代の3DグラフィックスAPI)を使用するため、VULKANをサポートしない現在のmacOSではグラフィック機能を利用できない。以下のとおり、コンソールモードで起動することになる。
$ fx run
CUIから見たFuchsia
Fuchsiaを起動すると気付くのは、「UNIX系OSのテイストがありつつもいろいろ違う」こと。シェルがありファイルシステムの基底にはルート(/)があるが、「/bin」や「/sbin」、「/usr」といったディレクトリは存在しない。「/boot」にはOSの基礎部分をなす構成要素が集められており、基本的なコマンドは「/boot/bin」、ドライバは「/boot/driver」、ライブラリは「/boot/lib」といった具合だ。
「/dev」以下にはデバイスファイルが用意されており、眺めたところ「/dev/class」がブロックデバイスや描画関連、「/dev/sys」がPCIやACPIといった高速I/O、「/dev/misc」がシステムコンソールやキーボード/マウスなどとなっている。/dev/nullと/dev/zeroも用意されているので、設計思想はUNIXに通じるところが多そうだ。
標準装備されているコマンドは、cpにmv、echoにcatなどなど、一般的なUNIX系OSに収録されているものがひと通り揃っている。SSH(scpやsshdを含む)もあればvimもあり、ちょっとしたOSディストリビューションの雰囲気だ。
なお、シェル(/boot/bin/sh)はFuchsia独自のものだが、機能や操作性はbashなどUNIX系OSのものとよく似ており、ヒストリー機能や入力補完機能も利用できる。パイプやリダイレクトもサポートされているなど、UNIX系OSで蓄えたノウハウは引き続き利用できることだろう。
ただし、前述したとおり最新のFuchsiaはVULKANベースの描画環境を必要とするため、macOSのQEMUではGUIをテストできない。話によると、明らかにスマートフォン/タブレットでの利用を意識したGUI(Armadillo)が用意されているらしいのだが……macOS/iOSにとっても無視できない存在になりそうなこのOS、引き続きウォッチしていきたい。