私は現在Chromebookを1台所有しています。
日本では発売していませんが、SamsungのGalaxy Chromebookと呼ばれるLaptopです。
こいつはChromebookにしては少々お高いですが、十分なスペック、素晴らしいビルドクオリティ、コンテンツ消費に最適な美しい4K AMOLEDディスプレイ、ペン内蔵など、日本でも売ればいいのに!と思うほど素晴らしいものです。
が、私がこいつを何に使っているかというと、主にはChrome OSでのLinux環境で遊ぶということがほとんどです。
宝の持ち腐れ感がすごいですし、キーボードはいまいちなのでおすすめの使い方ではないのですが、今日はChrome OSでのLinux環境について話をしたいと思います。
Chrome OSはLinuxベース
これは皆さん知っているところだと思います。
そして、Linuxカーネルで動作していることを活用し、Chrome OSはLinux開発機として弄繰り回すことが可能です。
このあたりの使い方は歴史的にも色々と変遷があるのですが、現在はChrome OSの設定からLinux機能をオンにするだけでLinux Terminalを起こすことが可能です。
https://support.google.com/chromebook/answer/9145439?hl=ja
システムコンテナによるLinux環境
ここで提供されるLinux環境は、LXC/LXDと呼ばれるシステムコンテナを用いた環境です。
コンテナって何?と思われる方はググってもらえればと思いますが、Chrome OSがLinuxベースで動作していることを活用し、カーネルと呼ばれるOSの中枢部を共有した別のシステムを立ち上げることを可能とする技術です。
コンテナというとDockerが有名ですが、これはアプリケーションコンテナと呼ばれ、1つのコンテナ内でアプリケーションを1つ起動することがベストプラクティスとされているコンテナです。
システムコンテナというのは、システム全体をコンテナ化し、永続化されることを前提としたものになります。いうなれば、カーネルだけを共有し、OSをまるごともう一つ動かすようなイメージになります。
最近、開発環境を立ち上げる際に何も考えずにDockerを使う人も多い気がしますが、このあたりの違いを理解したうえで利用したほうが良いと思います。
話は戻りますが、Chrome OS上のLinux環境というのは、上記のシステムコンテナとして立ち上げられるDebian Linux環境になります。
カーネルは共有しており、コンテナから様々なデバイスにも接続することが可能ですが、OSとしてはChrome OSとは独立したシステムとしてDebianが立ち上がっています。
なので、aptを用いたパッケージ管理が可能で、Chrome OSとは独立した開発環境構築が可能となります。
一方で、Chrome OS側のLinuxとの融合も見事なもので、アプリケーションランチャーにはLinuxのアプリが表示されますし、GUIも見事に融合してウィンドウを操作することが可能です。
ちなみに、GUIではX11ではなくWaylandが使われているようです。(https://chromium.googlesource.com/chromiumos/docs/+/HEAD/containers_and_vms.md)
唯一、IME周りはうまく融合できていませんが、これは日本人だから気になるところなのかもしれません。
コンテナによって実現されていることもあり環境の破棄・再構築も非常に簡単ですし、ChromebookとしてOS/HWが組み合わさって販売されているためシステムとしての安定性も十分です。
市販のLaptopにLinuxを入れようとすると、謎の苦しみが発生することが多いですしね・・・
また、最近はMicrosoftもWindows上でLinuxを動かす(Windows Subsystem for Linux)ことに必死になっていますが、あくまでLinux互換のカーネルインターフェースによるものであり、完全なLinuxではなく、ここでも苦しみが発生することがあります。
そんなわけで、Chrome OSをLinuxの開発環境として利用することは結構おすすめです。
その他、このあたりの技術について知りたい方は以下を読んでみるとよいと思います。
https://chromium.googlesource.com/chromiumos/docs/+/HEAD/crostini_developer_guide.md