M1 MacBook Airを買いました. これは私が持ってる一番速いコンピュータで, 私は長年の
GNOME/GNU/Linux ユーザーでもあります. ここから, Apple Silicon でLinux
デスクトップ環境が必要であるという明らかな結論が導かれます.
幸いにも, Linux は Apple Silicon で既に動作します. しかし 実用性 はどうでしょうか?
- 2つのネイティブの移植があります.
- Corellium. これは古くなっています. https://corellium.com/blog/linux-m1
- Asahi Linux. 大幅に改善されており, 場合によっては実用的と言えます. しかし,
今のところグラフィックスアクセラレーションなどが欠けています.
https://asahilinux.org
- QEMU は CPU上でコードをネイティブ動作させることが可能です. しかし GPU
についてはどうでしょう? また, 残念ながら, QEMU は macOS 向けにあまり最適化されていません.
私は Linux デスクトップが直ちに必要だったので, QEMU をハックすることにしました.
最大の困難は当然グラフィックスアクセラレーションですが, このために用いることができる,
Virgil 3D という, ホストの OpenGL をゲストに見せるブリッジが存在します.
https://virgil3d.github.io
残念ながらこれは macOS ホスト上で動きませんでした. そういうわけで 動くようにしました. 以上!
以下は Apple Silicon/M1 上での OpenGL を実演する動画です.
https://www.youtube.com/watch?v=k0bVlVQU2JQ&list=PLesZxBYUPr3wdU3sONUv4Q7UDOg1Dn_Ue&index=4
- OpenGL サポートを追加.
- Pixel by pixel 表示を実装.
- カーソルの合成を追加.
- キーマッピングを改善 (日本語 IME キーなど, 2021-06-17)
- デバイスの変更処理を修正 (2022-02-26)
OpenGL ES サポートを改善
独自に保守されているため少し古いかもしれませんが, 便利かもしれません.
https://github.com/knazarov/homebrew-qemu-virgl
1. ターミナルを開く.
2. GLib, Meson, Pixman, pkg-config, そして spice-protocol を Homebrew
でインストールする.
brew install glib meson pixman pkg-config spice-protocol
3. 空のディレクトリを作って working directory をそれに変更する.
4.
curl -L https://gist.github.com/akihikodaki/87df4149e7ca87f18dc56807ec5a1bc5/raw/20710825a7fbcae64d55e7ddf37d870e55622174/run.sh | bash -
5.
bin/qemu-img create var/virtio.raw 64G
データが記録されるまで物理領域を消費しないため, イメージをかなり大きくできます.
ただし, 物理ディスクが許容する以上のデータを書き込むとおかしな挙動が現れます.
6.
curl -LO https://download.fedoraproject.org/pub/fedora/linux/releases/41/Silverblue/aarch64/iso/Fedora-Silverblue-ostree-aarch64-41-1.4.iso
7.
./run -cdrom Fedora-Silverblue-ostree-aarch64-41-1.4.iso
インストールプロセスを進めてください. ./run を実行することで Fedora
を起動できるようになるはずです.
注: Linux が起動するまでキーボードは利用できません。これは、この構成で利用している virtio-keyboard に UEFI ファームウェアの TianoCore が対応していないためです。
単に最新の run.sh をダウンロードしてワークスペースディレクトリで実行して
ください.
run を編集してください.
gl=offは Virgil 3D GPU を無効にします. 安定していますがラグいです.gl=coreは OpenGL.framework を有効にします. 不安定です.gl=esは ANGLE を有効にします. 安定していて速いです.
アップストリーミングが進行中です. 願わくば将来は私が実装した機能が
brew install qemu とするだけで動作するようになるはずです.
この QEMU の改変は セキュアではありません .
グラフィックスアクセラレーションのコードが仮想マシンの他のあらゆるもの全てと同じプロセスに存在していて,
そのコードは巨大です. グラフィックススタックはシェーダコンパイルのために LLVM を含んでおり,
その中の簡単な不具合1つでゲストの完全な乗っ取りが可能です.
vhost-user-gpu はグラフィックスアクセラレーションの分離を提供しますが,
Linux 以外で動作するように修正が必要です.
- 歴史的には, vhost-user は Linux カーネルの vhost インターフェイスの再実装となっていて,
インターフェイス定義のためにカーネルヘッダに依存しています. - vhost-user は Linux でしか利用できない eventfd を利用しています.
これは難しくないでしょうが, プロセス分離がなくても満足してるのでやりません.
やってもグラフィックスアクセラレーションプロセスは共有されたままになるでしょうし,
単独のグラフィカルプロセスの攻撃がグラフィックス出力全体の暴露につながるのは変わりないでしょう.
先に説明したとおり, このような仮想化ソフトウェアは Linux デスクトップを実行する
実用的で効率的な方法です. 性能上のオーバーヘッドも日常的な利用には許容できる範囲で, Linux と
macOS のよりよい統合を提供しさえします. 例えば, macOS と Linux
をトラックパッド上の3本指ジェスチャーで切り替えられます. VirtFS も使えます.
しかし, 仮想化による複雑さもあります. 要は1つのハードウェアを2つのシステムで
共有することになるので, 資源を適切に割り当てなければユーザー体験を悪化させます.
この問題はあらゆる場面でおきます (キーボードのような HID, CPU のような計算資源,
電力管理などなど). この方法は 効率的 ですが 最善 ではありません.
長期的には ネイティブの Linux 移植が最善でしょう. Asahi Linux は期待できます.
今でも利用法によっては私が改変した QEMU よりよいかもしれません.
