7月1日、James Calligerosが「Progress Report: Linux 7.1」と題した記事を公開した。Asahi LinuxのM3対応の急進展、macOS 27互換性問題の修正、そして自作ファームウェアによるApple製ハードウェアビデオデコーダーの動作など、複数の重要トピックが詳述されている。
Asahi LinuxはApple Silicon(M1以降)上でLinuxを動かすことを目指すプロジェクトだ。Appleがハードウェア仕様を非公開にしているため、リバースエンジニアリングによってドライバーを一から開発するという困難な取り組みを続けている。今回の進捗報告は、その最前線を伝える内容だ。特に「Appleのファームウェアを使わず、自分たちで書く」という判断は、プロジェクトの本質的なアプローチを象徴している。
自作ファームウェアでAppleのビデオデコーダーを動かす
今回の記事で最も技術的に読み応えがあるのが、Apple Video Decoder(AVD)への自作ファームウェアによるアプローチだ。
AVDはApple Silicon内蔵のハードウェアビデオデコーダーで、AVC(H.264)・HEVC(H.265)・VP9・AV1に対応した固定機能ハードウェアをARM Cortex-M3コアが制御する構成になっている。問題は、AppleがAVDのファームウェアと大量の設定データをAVD kext(カーネル拡張)の中にバンドルしており、かつSoCごとにAVDのバリアントが微妙に異なることだ。
通常のアプローチであれば、Asahi InstallerはAppleがkextを更新するたびにファームウェアデータのオフセットを追跡・更新し続ける必要がある。これを避けるため、開発チームは別の方向を選んだ。「Appleのファームウェアを使わず、自分たちで書く」という判断だ。
AVDのCortex-M3はリセットベクタから無検証で実行を開始する。つまり、正規のAppleファームウェアでなくても、割り込みハンドラを正しくセットアップした最小限のファームウェアがあれば十分だ。ハードウェア自体の動作さえ理解できれば、デコーダーの制御はLinuxドライバー側で行える。
ハードウェアのリバースエンジニアリングにはAVDファームウェアをQEMU上でエミュレートし、バス・レジスタ操作をシングルステップで追跡する手法が使われた。AVC・VP9デコーダーの命令・データフォーマットの解析はJamie、R、Eileenの3名が数年前に基礎を作っており、今回は新コントリビューターのsofusがその成果を引き継いで実装を完成させた。
結果として、最大4K・10ビットのAVCビデオをデコードできるV4L2ドライバーが動作するようになった。ファームウェアをステートレスに保ち、ビデオデータの解析とデコーダー制御はすべてユーザースペースとカーネルが担う設計で、将来的なVA-APIやVulkan Videoへの対応も容易になる。VP9・HEVC・AV1のサポートや一部デバイスへの細かな対応はまだ残っているが、出荷に向けた準備は着実に進んでいる。
macOS 27でAsahiが起動できなくなった問題
macOS 27(Golden Gate)開発者ベータへのアップグレード後、LinuxのブートオプションがStartup Diskおよびブートピッカーから消えるという問題が報告された。macOS 27はAppleが2026年に開発中のmacOSの次期メジャーバージョン(macOS 26の後継)で、ブートローダー周りに仕様変更が加えられた。
調査の結果、パーティション自体は消えておらず、旧バージョンのブートツールからは起動可能であることが判明した。原因はAPFSメタデータの「ブータブルフラグ」で、macOS 27以前のブートツールはこのフラグを無視していたが、macOS 27からはフラグが設定されていないボリュームをブート対象として表示しなくなった。
対策として以下が提供されている:
- 新規インストール:Asahi Installerが自動的にフラグを設定するよう更新済み
- 既存インストール:Installerを再実行し「Fix macOS 27 boot picker compatibility」オプションを選択
- Linuxから修正するツール:asahi-fix27リポジトリで公開中(テスト協力者を募集中)
なお、macOS 27のSMCファームウェア更新により、バッテリー管理インターフェースが32ビット整数から1バイトに変更された副作用で、条件によっては緊急シャットダウンが発生するバグも確認されている。こちらはAsahi Linuxバージョン7.0.12で修正済みだ。
M3シリーズのサポートが急進展
M3シリーズへの対応が大きく前進した。Appleがオーディオ関連のIC(I2Sコントローラー、NCO)やスピーカー・ヘッドセットアンプをM1から変更していないため、M3マシンへの高品質オーディオ出力対応はDevicetreeの追加と設定ファイルの修正だけで実現できた。
CPUの周波数スイッチングと、効率コア・性能コアにタスクを適切に振り分けるbig.LITTLEスケジューリングもM2ベースから変更がなく、Devicetreeの変更のみで動作するようになった。省エネと性能の両立が期待できる。
PCIe・WiFi・Bluetooth・NVMe・キーボード・トラックパッドといった主要ドライバーも動作しており、多くはYurekaの貢献によるものだ。Asahi Installerでの正式サポート開始にはまだ工程が残っているが、進捗は速い。
m1n1 1.6.0リリース:Rust必須化
m1n1(Apple SiliconのブートローダーでありLinuxへの橋渡し役)のバージョン1.6.0がタグ付けされた。ディストリビューターにとって重要な変更は、Stage 2ビルドにRustが必須になったことだ。
GPUの初期化処理をm1n1に移した判断が背景にある。これにより、Linuxカーネルドライバーが浮動小数点数を含むAppleのハードウェア初期化データを扱う必要がなくなり、Devicetreeバインディングも大幅にシンプルになった。no_std Rustで実装されており、ターゲットはaarch64-none-softfloat。フルのsoftfloatツールチェーンなしにビルドするにはBUILDSTD=1をmakeに渡せばよい。
また、M4およびA18 Proサポートに向けた準備も開始されており、今後の進捗も注目される。
詳細はProgress Report: Linux 7.1を参照していただきたい。