目次

はじめに
第1章 Not Amiga - AROS Research Operating System
第2章 Google第3のOS Fuchsia
第3章 GenodeフレームワークとSculpt OS
第4章 BeOS最後の末裔 Haiku
第5章 マクロカーネルの新しい実装HelenOS
第6章 ネットの海に消えたRTOS Jaluna-1/ChorusOS
第7章 商用RTOS LynxOS(試用版)
第8章 海外HobbyOSの雄 MikeOS
第9章 帰ってきたMINIX MINIX3
第10章 Amiga互換商用OS MorphOS
第11章 独自言語OberonOS BlueBottle
第12章 歴史ある組み込みRTOS OS9000/80386 DemoFloppy
第13章 クラウド超軽量OS OSv
第14章 紆余曲折の果てに復活 QNX6 Neutrino
第15章 Windowsのクローンを目指す独自OS ReactOS
第16章 Rustによる新しいOSの潮流 Redox
第17章 海外独自コミュニティーOS SerenityOS
第18章 国産汎用クラスタOS SSS-PC
第19章 電子の世界の第三神殿TempleOS
第20章 とあるマイナーOSのtoaruOS
第21章 QNXの落し子。VSTa
第22章 ゲーム機用Linux PS2 Linux
第23章 任天堂DSでもLinux DSLinux
第24章 マイニング専用Linux 「Miner」OS各種
第25章 CISCOのUnix系OS用エミュレーター CISCO IOU/IOL
第26章 Historical Unix色々
第27章 商用Unixの現在
第28章 マイナーOS パッケージ&メディアコレクション
第29章 変り種HWあれこれ
第30章 マイナーOS駆け足レビュー
執筆を終えて

はじめに

本書の内容について

 本書は2006年から2018年に発行した同人誌「Opearating System Maniacs」の総集編として2018年に発行されたものを、2022年度までの状況を踏まえて一部削除、補筆、追加したものです。

 入手、インストール、起動、使用感などについてレポートした記録を中心に、マイナーなOSについての記事を取りまとめています。

 なるべく更新、修正していますが、周辺環境やOSの導入試験を実施している環境について、一部2006~2018年当時の情報で記載されているものもありますので、その点についてはご了承下さい。

表記関係について

 本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。

第1章 Not Amiga - AROS Research Operating System

1.1 イントロダクション

 AROS Research Operating System(AROS、アロス)は、AmigaOS 3.1 APIのオープンソースかつフリーソフトウェアの実装です。

 オープンソース系のOSとしてはかなりの達成度であり、かつ現在も開発が進んでいます。

 当方が初めて知ったときは、まだAmiga Research Operating Systemという名前でした。

 Amigaという名称が商標だかに触れるので、OS名からは削除したということでした。以下のURLが参考情報として引っかかりました。

 http://amigann.com/?id=3309

 基本的にはバイナリ互換ではなく、ソースコード互換を目指していて、AmigaOS上のソフトウェアであっても再コンパイルが必要になるようです。当方は正直に言って、Amiga自体を触ったことがありませんし、一番ホットだった時期のことはあまりよく知らないのですが、現状でもRegend的に語られることが多く、気にはなるOSです。正直Amigaを知っていたらもっと熱を入れて触ってたんでしょうけれどもね…

1.2 メインサイトとディストリビューション

 メインサイトは以下になります。

 http://aros.sourceforge.net/

 ディストリビューションは複数あり、ざっと見た感じでは以下のように分類されるようです。

 ・Linux/FreeBSD上で動くもの

 ・Windows上で動くもの(Windows上の仮想マシン)

 ・Live-DVD/CD

 ・Nativeインストール

 64bit環境もサポートしており、実機はPPC、x86、IA64、x86-64あたりをサポートしています。

 ことにWindows上/Live-DVDで動く「ICAROS」というディストリビューションに、現在は力を入れているように見えます。

1.3 入手とインストール

 本来的には、ISOからCDで起動⇒ツールを使用してインストールの流れで行います。

 単純にインストールを行うだけであればまったく難しいことはないので、簡単に記載します。

1.3.1 データの入手

 AROSのオフィシャルサイトに行って、必要なファイルをダウンロードします。

 上記で記載したとおり、AROSは現状は「ICAROS Desktop」というWindows上での仮想イメージ上で動くディストリビューションに力を入れているように見えます。

 なので、わかりやすい形でのダウンロードは「ICAROS」のみなのですが、そこから下にたどると、各種ディストリビューションのNightly Buildがダウンロードできます。

 使用したい環境、アーキテクチャにあったものをダウンロードします。なお、必ずすべてのものが毎回Buildされているわけではないので、必要なものの最新のものをダウンロードしてテストします。

 今回はAROS-20100728-pc-i386-boot-isoをダウンロードしました。

1.3.2 起動

図1.1: Boot

 ISOイメージを読み込ませ、CD-ROMから起動すると、上記のようにおなじみのGrubのBootローダ画面が起動してきます。

 よく見るとわかりますが、読み込むディスプレイドライバを指定できるようです。

図1.2: VMWareSVGA Boot

 今回はVMWareなので、(VMWareSVGA graphics)で起動します。また、他のものを選んでもうまく表示されませんでした。実機の場合は、VESAの各種画面サイズに合うようなものを選択すればよいのかなと思います。

図1.3: Command

 上記が起動画面です。グラフィカルで美しいのですが、実は1024x768くらいの領域を確保されたうちの画面左上にちょこっと表示されるような形になってしまっています。

図1.4: Install AROS

 デスクトップ上にある「Install AROS」というアイコンをクリックすると、上記のようなプログラムが立ち上がります。

図1.5: インストール中画面

 Proceedを押下して、インストールを実行していきます。

 多少時間がかかりますが、各種ファイルが転送されて、再起動します。

 CD-ROMイメージをはずしてHDDから起動すれば、AROSが立ち上がるかと思います。

1.3.3 テスト等

 今回はこれ以上のテストがままなりませんでした。スペック的なことよりも、まず画面が小さすぎて触りにくいのです。

 実機でVESAが使用できるもので、もう少し広い画面でテストができれば、ポテンシャルは高いOSだと思いますので、いろいろな遊び方はできると思います。

 なお、現時点では特に日本語対応はされていないようです。マルチバイトも対応していないようです。

2018/8現在の補足

 本家のサイトのニュース欄は2016年11月が最新ですが、AROS用ソフトウェアが投稿されている http://archives.aros-exec.org/index.php では直近でもソフトウェアが投稿されているようなので、一応まだまだユーザーもいるようです。

2022年の状況

 2022年現在も複数のディストリビューションが一応はあるようですが、ちょっと触ってみようといった場合には「Icaros Desktop LIVE!」ディストリビューションを選ぶしかなさそうです。

図1.6: AROS_Boot_2022

 BOOTさせると、まずはこれまで同様Grubで起動してきます。そのままLive起動してみます。

 VirtualBox仮想マシンでメモリー2GB、HDDなしで起動させてみましたが、起動自体は一瞬でした。

図1.7: Live起動画面

 以前は仮想マシンの画面4分の1にしか表示されていませんでしたが、2022年度に起動させてみた際には、問題なく画面いっぱいに表示されました。

 右クリックをすると、様々なアプリケーションの起動を選択できます。スタートメニューがデスクトップでの右クリックのようなイメージです。

 「InstallAROS」を選択することで、ハードディスクにインストールが可能なようです(今回は試していません)

図1.8: OWBブラウザー

 右クリック->Program->OWB を選ぶと、ブラウザーを起動できます。

 「Odeyssey Web Browser」というのはWebkitベースのブラウザーで、元はフランスのSand-labs/Pleyoという会社が開発した「Origyn Web Browser」という名前だったようです。

 もともと開発していたSand-labsが消滅した後に、別項でも扱う「Morphos」というOSの開発者が後を継いだ際に改名したようです。

図1.9: OWBブラウザー2

 WebkitベースであるためかGoogleのトップページだけですが、問題なく表示できました。日本語のフォントはどういう扱いになっているのかまで、突っ込んで調査していません。

図1.10: テキストエディター

 同じように、右クリックからエディターも立ち上げられます。

図1.11: その他アプリケーション

 いわゆるファイラーのようなものをふたつ、ディレクトリーブラウザーとエクスプローラ的なファイラー、入出力設定画面などを起動してみたところです。

 元がAmigaの代替OSというのが出発点というのもありますが、相変わらずアジア圏の言語の入力方法はなさそうです。

図1.12: 右クリックメニュー

 右クリックした際の表示は、上記のようになっています。

 「Programs」のところを見ると、ビューワー、エディター、ミュージックプレイヤー等のアプリケーションは一通りあるようです。

 日本語の入力方法がないので、現状日本で何かしら使うというのは難しそうですが、Amigaの系譜ということでグラフィックやオーディオビジュアル関連のアプリケーションはそろっているようです。

 このくらいまで完成度が高まってくるといろんなことができそうなので、腰を据えて今後、もう少し突っ込んだ使用感なども試せればと思っています。

1.4 総評

 繰り返しになりますが、どうしてもAmigaに直接的には触れていないこともあって、Amiga資産を使うなどの有用な試験ができていないのが残念なところです。

 OSとしての完成度は高いので、日本語が必要ではない画像、映像、音楽などのデータを扱うアプリケーションを試すなどの方向性で使ってみるのが面白いかもしれません。

第2章 Google第3のOS Fuchsia

2.1 イントロダクション

 「Fuchsia」は、数年前に開始され、最近になって明示的にサイト開設がされたことなどで若干の話題になっているGoogleの「第3の」OSと呼ばれているものです。

 みんな大好きWikipediaによると、カーネルはZirconというマイクロカーネルなのだそうですが、この開発者が(別項で取り扱っている)Haiku OSが採用している「NewOSカーネル」の作成者と同じ方なのだそうです(そもそもからしてBeOSのカーネル開発者であったようですが)。

 というわけで、出自からも、また現在進行形で進められているプロジェクトということもあり、マイナーOS本としても、技術書的な視点からも非常に面白そうです。

 Fuchsiaが発表されたのは2016年頃で、当方も2017年頃から気にはなっていたのですが、正直敷居が高く、触れるにはどうにも二の足を踏んでいました。

 ですが、2019年の6月ごろに、開発者向けの公式Webサイトが立ち上げられ(元々ある程度ビルド方法などはまとめられていたようですが)情報が取りまとめられ、とりあえず触れてみるためのハードルは少しだけ下がったように思います。

 今回はいい機会なので、Fuchsiaのビルドと動作確認、最終的には実機での起動確認をしてみたいと思います。

 なお、実機としてはChrome PixelbookやInte NUC(6/7)などに対応しているとのことです。実機での動作確認身はIntel NUCを購入して進めたいと考えています。

 ※対応しているハードウェアであれば、GUI及び各種デモ動作なども確認できるようなので、なんとか試してみたいと思っています。

2.2 メインサイト(開発者向け)

 https://fuchsia.dev/

 2019年6月に公開された開発者向けのWebサイトです。

 今回の原稿は基本的に、このサイトに記載されている情報に基づいて書かれています。

 情報量はかなりのもので、また、比較的丁寧にそれぞれのツールの情報、コマンドのオプション、実際のターゲット別のビルド手順などもまとめられていますので、もしご興味があれば是非ご覧になってみてください。

 実際にやろうとすると多少原文を読まないと意味が分からんところもありますが、流し読みするならGoogle等のオンライン翻訳でも十分に内容を追えると思います。

2.3 Fuchsiaのビルドと実行

 それでは、Fuchsiaのビルドと実行に進みます。

2.3.1 ビルド環境の構築

 現状では、macOS環境とUbuntu Linux環境で実施することが想定されているようです。本稿では検証用の仮想マシン環境を構築します。OSはUbuntu 20.04 LTSを用います。仮想マシンは以下のスペックです。

 ・CPU:4

 ・メモリー:16GB

 ・ディスク:200GB

 念のため

  VBoxManage modifyvm "【仮想マシン名】" --nested-hw-virt on

 で、仮想化のネスト設定も有効にしておきます。

 作成した仮想マシンにUbuntu 20.04 Server LTSをインストールします。

 注意点としてビルドの際に容量を結構食うので、余裕のあるディスク容量を確保したほうがいいようです。前述通り200GBを確保していますが、実は最初うっかりデフォルトの50GBで進めてしまい、ビルド中に空き容量が0になってしまい、失敗しています。

 最低でも200GB、可能ならもっと容量を確保しておいたほうがいいかと思います。

 インストールが終了したら、お決まりではありますが、最新版へのアップデートを忘れないようにしましょう。

  $ sudo apt update

  $ sudo apt upgrade

2.3.2 必須ツールのインストール

 ここから、具体的な環境構築手順に入ります。

 まずは、必要なツール類をインストールします。オフィシャルサイトの記載通りに、以下ソフトウェアをインストールします。

  $ sudo apt-get install build-essential curl git python unzip

2.3.3 Fuchsiaのソースをダウンロード

 準備ができたので、Fuchsiaのソースコードをダウンロードします。こちらも、オフィシャルサイトに記載があるスクリプトを実行すると、自動でディレクトリーの作成とソースコードのダウンロードを行ってくれます(curl以降を1行で入力します)。

  $ cd ~

  $ curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap? format=TEXT"   | base64 --decode | bash

 ダウンロード後、一部が認証エラーでダウンロードできなかった旨が表示されるので、指示されたコマンドを実行します。【User名】は、実際は実行したユーザー名が表示されます。

  WARN: Some packages are skipped by cipd due to lack of access, you might want to run "/home/【User名】/fuchsia/.jiri_root/bin/cipd auth-login" and try again

  Visit the following URL to get the authorization code and copy-paste it below.

  https://accounts.google.com/o/oauth2/【非常に長い認証用のURL文字列が表示されます】

  Authorization code:

 やたら長いURLが表示されるので、ブラウザーのアドレスバーにコピペします。接続先でGoogleアカウントでのログインを要求されますので、Googleアカウントが必要です。

 ログインを実施するとAuthorization codeが表示されるので、それを上記の「Authorization code:」のところにコピペします。

  Scopes:

  https://www.googleapis.com/auth/userinfo.email

  openid

 認証に成功したら、ダウンロードスクリプトを再実行します。

$ curl -s "https://fuchsia.googlesource.com/fuchsia/+/HEAD/scripts/bootstrap?format=TEXT" | base64 --decode | bash


Updating all projects

Done creating a Platform Source Tree at "/home/【User名】/fuchsia".

Recommended: export PATH="/home/【User名】/fuchsia/.jiri_root/bin:$PATH"

 パスの追加を指示されるので、実行します。※/binにシンボリックリンクを作成するなどしてパスを追加しないで進めることもできますが、普通に追加しておいたほうが楽なので、記載のコマンドを実行するか、ホームディレクトリーの ~/.bashrc にパスの追加を記載します。また、この際に、fuchsiaの各種操作を行うコマンドを実行できるように「fx-env.sh」というスクリプトも有効になるようにしておきます。

  $ vi .bashrc

  ~以下を追記~

  export PATH=~/fuchsia/.jiri_root/bin:$PATH

  source ~/fuchsia/scripts/fx-env.sh


  $ source ~/.bashrc

 パスが通ったことを確認するために、パッケージの取得ツールである「jiri」とFuchsiaのビルドのためのツールである「fx」のヘルプを表示してみます。

 以下、「jiri」のヘルプです。

  $ jiri help

  Command jiri is a multi-purpose tool for multi-repo development.

  Usage:

     jiri [flags] <command>

  The jiri commands are:

~以下省略~

以下jiriコマンドについての詳細な情報が多数表示されます。

 以下「fx」のヘルプです。

  $ fx help

  usage: fx [--dir BUILD_DIR] [-d DEVICE_NAME] [-i] [-x] COMMAND [...]

  Run Fuchsia development commands. Must be run either from a directory

  that is contained in a Platform Source Tree or with the FUCHSIA_DIR

  environment variable set to the root of a Platform Source Tree.

  host shell extensions: (requires "source scripts/fx-env.sh")

  fx-update-path        add useful tools to the PATH

  fx-set-prompt         display the current configuration in the shell prompt

~以下省略~

以下fxコマンドについての詳細な情報が多数表示されます。

 Pathが通ったのを確認したところで、いよいよFuchsiaをビルドしていきます。

2.3.4 FUCHSIAのビルド

 基本的なビルド手順は

  $ fx set

 コマンドで、ビルド対象のプロダクトとターゲットアーキテクチャ、モード等の設定を行い、

  $ fx build

 コマンドでfuchsiaのビルドを行います。

 fx setの後に必ず指定する必要のあるオプションは

  $ fx set 【プロダクト名】.【ターゲットアーキテクチャ名】

 になります。

 ・【プロダクト名】

 プロダクト名には./productsディレクトリー以下の.gniファイル名を指定可能です。

 ・コマンド

  $ fx list-products

 でも確認することができます。

 デフォルトで用意されているものは、以下のものがあります。

 ・bringup

 Zirconカーネルと最低限のドライバ

 ・core

 bringupにさらにネットワークの機能やシステムサービスを追加したもの。

 ・terminal

 coreに基づきさらにコマンドライン端末を備えたシンプルなグラフィカルユーザーインターフェイスを備えたシステム。

 ・workstation

 GUI付きのパッケージを追加したもの。

 「ソフトウェア開発者が仕事を成し遂げるために使用できるシステム」という表現がされています。実際の動作確認や開発などは、このプロダクトで構築する必要がありそうです。

 さらに、./productsディレクトリーの中のREADMEを見ると、以下のような記述があります。

 ・speaker

 オーディオ入力と出力を備えたデバイス用のモジュール式のエフェメラルシステム(GUIなし)。

 ・router

 ワイヤレスネットワークを介してネットワークトラフィックをルーティングするためのシステム。

 ただこれらふたつについての.gniファイルは存在しません。今後追加されるものを例示しているのではないかと思います。

 ・【ターゲットアーキテクチャ名】

 ターゲットとするアーキテクチャの指定です。

  $ fx list-boards

 で、詳細な情報を得ることができます。

  arm64

  as370

  c18

  chromebook-x64

  cleo

  *

  kirin970

  msm8998

  msm8x53-som

  mt8167s_ref

  qemu-arm64

  qemu-x64

  toulouse

  vim2

  vim3

  vs680

  x64

  x64-reduced-perf-variation

 2020年12月現在だと、上記のようなものが用意されているようです。*は未指定の場合のエイリアスか何かなのでしょうか。現在の完成度だと、上記のボード情報として存在するものでないと動かないようです。

 特にarmの場合、ボードの正しい指定が非常に重要になるようです。

 今回は、まずは動かすことを優先し、グラフィックスを用いない「core」プロダクトを仮想マシン用にセットアップします。

 ※ちなみにエミュレーター環境で動かす場合、qemuではGUIとして採用されているVulkanに対応していないので、そもそもグラフィックスが正常動作しないそうです。

 以上を踏まえ、セットアップ/ビルドを進めていきます。

 なお、最初の--dirオプションは、セットアップの際に出力する際のディレクトリーを個別に指定するためのものです。これで同じセットアップ情報でも、別々にビルドすることも可能です。

  $ fx --dir out/qemucore set core.qemu-x64

  $ fx build

 「qemucoreというディレクトリーをoutディレクトリー配下に作成し、coreプロダクトのx64アーキテクチャ版をqemuボードサポートでセットアップ」という意味になります。問題なくセットアップが完了したら、buildします。

 ※なお、buildに関してオプションを何も指定していませんが、この場合デバッグビルドになるそうです。

  --release

 オプションを付けると、リリースビルドになります。

 また、fx set-deviceコマンドを用いて設定することで、同じディレクトリーから別々のデバイス向けのbuildを出力することもできるようです。

 今回はシンプルにbuildします。ビルドには結構な時間がかかります。説明にも「最大90分かかるんで覚悟しろや」と書いてあります。coreプロダクトであればそれほどでもありませんが、workstationだとかなりかかるので、注意しましょう。

2.4 起動

 まずはqemuで起動してみます。

  $ fx qemu

 非常に長いログが出力されます。自動でイメージを構成して起動するようです。

  Creating disk image...

  done

  CMDLINE: TERM=xterm kernel.serial=legacy kernel.entropy-mixin=84fce1c1a4c2fb7644c48aef0efe30f0a7cb04f32062c04fcfa4b05e9b1f901f kernel.halt-on-panic=true

+ exec /home/【User名】/fuchsia/prebuilt/third_party/qemu/linux-x64/bin/qemu-system-x86_64 -kernel /home/【User名】/fuchsia/out/qemucore/multiboot.bin -initrd /home/【User名】/fuchsia/out/qemucore/tmp.XbN/fuchsia-ssh.zbi -m 8192 -nographic -drive file=/home/【User名】/fuchsia/out/qemucore/tmp.XbN/fvm_raw.blk,format=raw,if=none, id=mydisk -device ich9-ahci,id=ahci -device ide-hd,drive=mydisk,bus=ahci.0 -nic none -smp 4,threads=2 -machine q35 -device isa-debug-exit,iobase=0xf4,iosize=0x04 -fw_cfg name=etc/sercon-port,string=0 -cpu Haswell,+smap,-check,-fsgsbase -append 'TERM=xterm kernel.serial=legacy kernel.entropy-mixin=84fce1c1a4c2fb7644c48aef0efe30f0a7cb04f32062c04fcfa4b05e9b1f901f kernel.halt-on-panic=true '

qemu-system-x86_64: -fw_cfg name=etc/sercon-port,string=0: warning: externally provided fw_cfg item names should be prefixed with "opt/"

[00000.000] 00000:00000> printing enabled

[00000.000] 00000:00000> Data ZBI: @ 0xffffff8001088000 (16268224 bytes)

[00000.000] 00000:00000> UART: enabled with FIFO depth 16

[00000.000] 00000:00000> ACPI LITE: Found RSDP at physical address 0xf5860.

[00000.000] 00000:00000> ACPI LITE: Found valid RSDT table at physical address 0x7ffe2204

[00000.000] 00000:00000> PMM: boot reserve add [0x100000, 0x3e9fff]

[00000.000] 00000:00000> PMM: boot reserve add [0x1088000, 0x200bfff]

[00000.000] 00000:00000> PMM: adding arena 0xffffffff003e4f00 name 'memory' base 0x100000 size 0x7fedf000

[00000.000] 00000:00000> PMM: adding arena 0xffffffff003e4f00 name 'memory' base 0x100000000 size 0x180000000

[00000.000] 00000:00000> PMM: boot reserve marking WIRED [0x100000, 0x3e9fff]

[00000.000] 00000:00000> PMM: boot reserve marking WIRED [0x1088000, 0x200bfff]

[00000.000] 00000:00000> INIT: cpu 0, calling hook 0xffffffff00147360 (global_prng_seed) at level 0x20001, flags 0x1

[00000.000] 00000:00000> INIT: cpu 0, calling hook 0xffffffff002c96c0 (intel_rng_init) at level 0x20001, flags 0x1

[00000.000] 00000:00000>

[00000.000] 00000:00000> welcome to Zircon

※この後もしばらくログ出力が続きます※

 しばらくしてコンソールが戻ってきたら、簡単なコマンドを投入してみます。

 dm helpで投入可能なコマンドが表示されます。

$ dm help

dump                 - dump device tree

poweroff             - power off the system

shutdown             - power off the system

suspend              - suspend the system to RAM

reboot               - reboot the system

reboot-bootloader/rb - reboot the system into bootloader

reboot-recovery/rr   - reboot the system into recovery

kerneldebug          - send a command to the kernel

ktraceoff            - stop kernel tracing

ktraceon             - start kernel tracing

devprops             - dump published devices and their binding properties

drivers              - list discovered drivers and their properties

 dm drivesで現在のドライバー適用状況が表示されます。こちらはちょっと出力が長いので、割愛します。

 dm dumpでデバイスの認識状況がツリー表示されます。

$ dm dump

[root]

   <root> pid=3519

      [null] pid=3519 /boot/driver/builtin.so

      [zero] pid=3519 /boot/driver/builtin.so

   [misc]

      <misc> pid=3606

         [ramctl] pid=3606 /boot/driver/ramdisk.so

   [sys]

      <sys> pid=3401 /boot/driver/platform-bus.so

         [platform] pid=3401 /boot/driver/platform-bus.so

            [acpi] pid=3401 /boot/driver/platform-bus-x86.so

               [acpi-pwrbtn] pid=3401 /boot/driver/platform-bus-x86.so

                  [hid-device-000] pid=3401 /boot/driver/hid.so

               [rtc] pid=3401 /boot/driver/platform-bus-x86.so

                  [rtc] pid=3401 /boot/driver/intel-rtc.so

               [i8042] pid=3401 /boot/driver/platform-bus-x86.so

                  [i8042-keyboard] pid=3401 /boot/driver/pc-ps2.so

                     [hid-device-001] pid=3401 /boot/driver/hid.so

                        [InputReport] pid=3401 /boot/driver/hid-input-report.so

                  [i8042-mouse] pid=3401 /boot/driver/pc-ps2.so

                     [hid-device-002] pid=3401 /boot/driver/hid.so

                        [InputReport] pid=3401 /boot/driver/hid-input-report.so

               [serial] pid=3401 /boot/driver/platform-bus-x86.so

               [serial] pid=3401 /boot/driver/platform-bus-x86.so

                  [uart16550] pid=3401 /boot/driver/uart16550.so

                     [serial] pid=3401 /boot/driver/serial.so

                        [ppp] pid=3401 /system/driver/serial-ppp.so

            [00:00:1b] pid=3401 /boot/driver/platform-bus.so

               [sysmem] pid=3401 /boot/driver/sysmem.so

         [cpu-trace] pid=3401 /boot/driver/platform-bus.so

         [pci] pid=3401 /boot/driver/platform-bus-x86.so

            [00:00.0] pid=3401 /boot/driver/bus-pci.so

            [00:01.0] pid=3401 /boot/driver/bus-pci.so

               <00:01.0> pid=4341 /boot/driver/bus-pci.proxy.so

                  [bochs_vbe] pid=4341 /boot/driver/simple.bochs.so

                     [display-controller] pid=4341 /boot/driver/display.so

            [00:02.0] pid=3401 /boot/driver/bus-pci.so

               <00:02.0> pid=4432 /boot/driver/bus-pci.proxy.so

                  [ahci] pid=4432 /boot/driver/ahci.so

                     [sata0] pid=4432 /boot/driver/ahci.so

                        [block] pid=4432 /boot/driver/block.core.so

                           [fvm] pid=4432 /boot/driver/fvm.so

                              [blobfs-p-1] pid=4432 /boot/driver/fvm.so

                                 [block] pid=4432 /boot/driver/block.core.so

                              [minfs-p-2] pid=4432 /boot/driver/fvm.so

                                 [block] pid=4432 /boot/driver/block.core.so

                                    [zxcrypt] pid=4432 /boot/driver/zxcrypt.so

                                       [unsealed] pid=4432 /boot/driver/zxcrypt.so

                                          [block] pid=4432 /boot/driver/block.core.so

            [00:1f.0] pid=3401 /boot/driver/bus-pci.so

            [00:1f.2] pid=3401 /boot/driver/bus-pci.so

               <00:1f.2> pid=4562 /boot/driver/bus-pci.proxy.so

                  [ahci] pid=4562 /boot/driver/ahci.so

            [00:1f.3] pid=3401 /boot/driver/bus-pci.so

   [test]

      <test> pid=3459

         [test] pid=3459 /boot/driver/test.so

         [virtual_audio] pid=3459 /system/driver/virtual_audio_driver.so

 helpに表示されていますが、「poweroff」または「shutdown」でシステムOFFできます。

$ dm poweroff

[00687.713] 12757:12759> [shutdown-shim]: checking power_manager liveness

[00687.807] 12757:12759> [shutdown-shim]: trying to forward command

[00688.171] 02104:02106> [driver_manager.cm] INFO: [system_state_manager.cc(55)] Setting shutdown system state to 5

 ※この後も非常に長いログが表示されますが、誌面の都合上、割愛します。

 というわけで、前半ではコンソールでのビルドおよび、カーネル周りのコマンドを少し触った程度でした。後半では実機導入、GUI操作をやっていきます。

補足

・ccacheでビルドをスピードアップ

  $ sudo apt-get install ccache

 デフォルトのディレクトリーでfuchsiaのセットアップディレクトリーを準備している場合、CCACHE_DIR環境変数が自動的に有効になるので、常に使われる状態になるようです。

・コードの最新化

  $ jiri update

 コマンドでプロジェクト全体を最新に保つことができます。

 なお、qemuおよび専用のエミュレーター(qemuベースのようですが)用にBuild可能なように作られていますが、Intel NUCや、Google Pixelbookで動作させる手順のガイドも発表されており、Youtubeに動画も上げられています。

2.5 前半のまとめ

 というわけで、Googleが開発中の「第3のOS」Fuchsiaについて触れてみました。稼働可能な実機が限定されているのでお手軽に実験というわけにはいきませんが、入手がそこまで困難なハードウェアでなければ、むしろ動作させるためのハードルは若干低くなるという面もある(少なくとも動作させるエビデンスがしっかりしている)というのはあるかもしれません。いくつかネットにも動作させた記事等が出回っていますし、非常に新しいOSであること、天下の?Googleが開発しているOSですので、今後もなるべくトレースしていきたいと考えています。

2.6 Google「Fuchsia OS」を実機にインストールする

 後半ではFuchsia OSを実機で動かしてみます。

 2021年の5月頃位には、搭載したデバイスが発売されるとかなんとかといった記事も出てきているようです。

 https://cloud.watch.impress.co.jp/docs/column/infostand/1328053.html

 後半では前半でも少しコメントした通り、実機へのFuchsiaのインストールをやっていきます。

2.7 Fuchsiaをインストールするハードウェア

 今回導入するのはオフィシャルサイト内の各種資料内でインストール可能なデバイスとしてあげられている、Intel NUC6にインストールを行います。SSDはありものの流用、メモリーは新規に購入しました。

図2.1: zedboot

2.8 実機向けのFuchsiaのビルドと実行

 一部前半と重複する内容も記載されています。

 基本的なビルド手順は

$ fx set

 コマンドで、ビルド対象のプロダクトとターゲットアーキテクチャ、モード等の設定を行い、

  $ fx build

 コマンドでfuchsiaのビルドを行います。

 fx setの後に必ず指定する必要のあるオプションは

  $ fx set 【プロダクト名】.【ターゲットアーキテクチャ名】

 になります。

2.8.1 【プロダクト名】

 プロダクト名には./productsディレクトリー以下の.gniファイル名を指定可能です。コマンド

  $ fx list-products

 で確認することができます。

 デフォルトで用意されているものは、以下のものがあります。

 ・bringup Zirconカーネルと最低限のドライバ

 ・core bringupにさらにネットワークの機能やシステムサービスを追加したもの。

 ・terminal coreに基づき、さらにコマンドライン端末を備えたシンプルなグラフィカルユーザーインターフェイスを備えたシステム。

 ・workstation GUI付きのパッケージを追加したもの。

2.8.2 【ターゲットアーキテクチャ名】

 ターゲットとするアーキテクチャの指定です。

  $ fx list-boards

 で詳細な情報を得ることができます。なお、アップデート時に削られたのか、前半で行った際の表示からずいぶんと減っています。

  arm64

  chromebook-x64

  *

  qemu-arm64

  qemu-x64

  toulouse

  vim2

  vim3

  x64

  x64-reduced-perf-variation

 今回はIntel NUCで動かしますので、「workstasion.x64」を使ってビルドします。

 最初の--dirオプションは、セットアップの際に出力する際のディレクトリーを個別に指定するためのものです。これで同じセットアップ情報でも、別々にビルドすることも可能です。

  $ fx --dir out/NUC set core.workstation.x64

  $ fx build

 セットはそれなりにすぐ完了しますが、セットアップ後のbuildはかなり時間がかかりますので、しばし待ちます。

 その他オプション等:

  --release

 オプションを付けると、リリースビルドになります。つけていない場合はデバッグビルドです。

fx set-device

 を用いて設定することで、同じディレクトリーから別々のデバイス向けのbuildを出力することもできるようです。

2.8.3 インストール用USBメモリーの作成

 ビルドが完了したら、開発側マシンにUSBメモリーを認識させて、そこにブートローダーを構成します。

 今回はVirtualBoxで開発環境を構築していますので、仮想マシンでUSBメモリーが認識されていることを確認します。通常は「USB」メニューのデバイスフィルターに表示されていれば問題ないはずです。ただ、仮想マシン起動後にUSBメモリーを母艦に接続した場合、一度仮想マシンの再起動が必要かもしれません。

 起動可能なUSBメモリーを作成するため、まずはUSBメモリーのパスを特定します。

  $ fx list-usb-disks

  $ /dev/sdb

 ビルドしたイメージ用のZedboot USBドライブを作成します。

$ fx mkzedboot /dev/sdb

 以下のようなログが表示されます。

  Creating disk image...

  /dev/sdb - Flash Disk

  INFO: Changing ownership of /dev/sdb to makoyuki

  [sudo] password for makoyuki:

  INFO: Opening device...

  INFO: Create new GPT partition table...

  WARNING: Primary GPT header is invalid

  WARNING: Secondary GPT header is invalid

  20676E69-7973-7473-656D-000000637B9A

  INFO: done

  INFO: Create new partitions...

  INFO: done

  INFO: Writing zedboot for EFI

  56720+0 records in

  56720+0 records out

  29040640 bytes (29 MB, 28 MiB) copied, 133.559 s, 217 kB/s

  INFO: done

  INFO: Closing device.

  done

 「done」と表示されて正常終了が確認できたら、Intel NUCでのBootを行います。

2.8.4 INTEL NUCをUSBメモリーで起動

 Intel NUCを先ほど作成したUSBメモリーで起動します。

 Intel NUCにUSBメモリーを接続して、電源を入れます。

 起動作業の前に、INTEL NUC側の設定をします。起動時にF2を押下して「Visual BIOS」画面を開きます。

図2.2: Visual BIOS1

 「Legacy」タブをクリックして「Legacy Boot」のチェックを外します。

図2.3: Visual BIOS2

 次に「Advanced」を選択して、「Boot」を選択、「UEFI Boot Priority」でUSBメモリーの起動順序を最優先に変更します。

 この状態で設定を保存し、再起動します。

図2.4: zedboot

 USBメモリーから起動し。zedbootが正常に起動し、上記のような画面になります。Alt+F3を押下し、ターミナル画面に遷移します。zedbootから見たSSDのブロックデバイス名を「lsblk」コマンドで表示させて、パーティションをいったん削除/新規にパーティションを作成し、そこにイメージをインストールします。コマンドとしてはIntel NUC側のターミナルで以下を実行します。

  $ lsblk

  $ install-disk-image wipe-partition-tables --block-device /dev/pci-00:17.0/ahci/sata2/block

  $ install-disk-image init-partition-tables --block-device /dev/pci-00:17.0/ahci/sata2/block

 これでパーティションが作成されましたので、インストールを行います。

 今度は、fuchsiaの開発環境を構築したマシンに戻り、ターゲットマシンにFuchsiaをインストールします。

  $ fx pave

 それなりにインストールの進捗が表示されて、以下のように表示されればインストールは完了です。USBメモリーは抜いてしまって問題ありません。

   [bootserver] Transfer ends successfully.

   [bootserver] Issued boot command to [fe80::96c6:91ff:fe13:b9c5]:33330

 ちょっとわかりづらいので簡単にまとめると

 ・開発環境でイメージ作成

 ・起動用USBメモリーを作成

 ・デバイスをUSBメモリーで起動

 ・起動したデバイスに、開発環境からイメージを転送

 ということをやっています。

 起動画面は以下のような感じです。映り込みが見えるかもしれませんがご容赦ください。

図2.5: Fuchsia GUI

 「Timezone」がUTCになっていますが、これはクリック、もしくはキーボードで選択して「Asia/Tokyo」を選択することで変更できます。

 アプリケーションの類があまりないようですが、一応「Simple Browser」を選択することでインターネットに接続できます。

図2.6: Simple Blowser

 フォントがないためと思われますが、日本語で表示されている部分がいわゆる「トーフ」状態になっています。

 フォント自体は準備されているはずなので、将来的には「日本語フォント追加⇒Google 日本語入力」でなんとかなったりするのでは?と思っています。

2.9 総評

 というわけで、FuchsiaOSを実機に導入する記事でした。

 キーボード、マウスの認識は問題なく、操作もできましたが、マウスに関しては操作が効かなくなることがしばしばありました。

 また、現状は日本語フォントが入らずブラウザーで文字化けが見られたりと、もう一歩なところもあります。

 そろそろ実際のデバイスにも搭載され始めているので、どこまで素人の遊びが通用するかわかりませんが、注視はしていきたいと思います。

 なお、一応オフィシャルサイトにあるHello Worldのテストとかもやったんですが、結果が超絶地味なので掲載してません。もう少しビジュアル的にイケてるテストやデモがありそうであれば、またやってみたいと思います。

2.10 マイナーOS駆け足レビュー番外編

 オマケです。

 レビューというほどではないんですが、FuchsiaとLinuxのハイブリッドみたいなOSがリリースされているとのことなので、それだけちょっと試してみます。

2.10.1 dahliaOS

 基本的にはLinuxのいちディストリビューションです。Pangolinデスクトップという独自のGUIを備えています。Flutterを用いてアプリケーションが書かれています。

 dahliaOS上の仮想マシンとコンテナーを管理するツールがあり、これにより既存のOSの古いアプリケーションをそのまま使ったり、FlutterアプリケーションをFuchsia用にポーティングするための環境もあったりするようです。

2.10.2 メインサイトURL

 https://dahliaos.io/

2.10.3 ダウンロードとインストール

 https://dahliaos.io/downloadsISOイメージが提供されているので、こちらをダウンロードしてインストールします。

 仮想マシンの場合、最低2GBのメモリーでいいようです。

 一応仮想ディスクも設定しますが、実際にはライブ動作しているようで、HDDへのインストール等はありません。

 以下はLinux部分が起動した直後のスプラッシュスクリーンです。

図2.7: Boot

 起動後の画面です。

図2.8: 起動後画面

 右上の「DEBUG」は、Fuchsia OSをデバッグモードでビルドした際に表示されるものと同じです。

図2.9: Application

 見た目もよく動作も軽快ですが、アプリケーションの類はまだ十分に(デモ版のようなリリースなので)実装されていないようで、電卓やテキストエディター、コンソール等が使えるのみです。

 上記はよくある電卓とテキストエディターです。

図2.10: Gtaft

 ウリであるGtaftという仮想マシン、コンテナ管理のアプリケーションも現状では動作せず、こちらもデモ版のような扱いのようです。Graftは起動させてもデモ画面的に表示されているだけで、実際に仮想マシンが動いているわけではありません。

 画面右は右下をクリックした際に表示される設定パネルですが、こちらもすべてが動作するというわけではありません。

 正直に言うと現状でFuchsia OSらしさがよくわからないのですが、Flutterで実装しているので GUI(Pangolin Desktop)はディストリビューションを選ばず使用可能、という話なので、まだまだこれからのOSなのかなと思います。

 あとは当方が開発畑でないので、FImageを使ってのFuchsiaへのFluttreアプリのポーティングというのがどのくらいの有用なのかがわかっていないというのもありますが。

 アプリケーションに見える部分はほかにもありますが「pre-Buildリリースなんで実装されてないもんもいっぱいあるでよ」のようなコメントが多く記載されているので、本当にこれからのOSですね。

 Fuchsiaとのハイブリッド、あるいは既存OS、レガシーアプリケーションの実行が同時に可能な環境となれば非常に興味深いですが、売りのGtaft、Fimageあたりを触れたらまたトライしてみたいと思います。

試し読みはここまでです。
この続きは、製品版でお楽しみください。