M4 Mac Mini に Linux GPU ドライバを作成するまで、たった 1 カ月

2026/09/16 4:30

M4 Mac Mini に Linux GPU ドライバを作成するまで、たった 1 カ月

RSS: https://news.ycombinator.com/rss

要約

Japanese 翻訳:

Niklas と Cody は、LLM ベースのエージェントを活用して約 1 ヶ月で、M4 Mac Mini および MacBook Neo 向けに完全な OpenGL ES 3.0 準拠の GPU ドライバを構築し、Apple のバイナリにアクセスせずに高度なハードウェア制御が可能であることを実証しました。自前のハイパーバイザを通じて AGX ファームウェア ABI とユーザー空間コンポーネントをリバースエンジニアリングし、ハードウェアトレイルを取得・再生することで、新しい IR/シェーダーコンパイラ、コマンドストリームビルダ、完全な Linux カーネルドライバ、および完全なユーザー空間グラフィックススタック(Gallium 翻訳と NIR から AGX ISA へのコンバージョンを含む)を実装しました。M1/M2 より ABI に構造体数が 1.5 倍、ポインタ数が 2 倍、ワーク提交プロセスがより複雑である A18 Pro アーキテクチャの重大な障壁を克服するため、レンダリング ACK だが実行されていない問題を解決(早期の状態キャプチャ)、計算によるブロックを解消(Metal が利用可能な LaunchDaemon を持つシングルユーザーモードと純粋な計算トレイルの再生)、およびタイルド Vertex Buffer の制限による部分的なレンダリングに対処(セーブ/リザームロジック)を行いました。

エージェントは Metal に含まれていないハードウェア支援機能を発見しました。これには、ネイティブ単命令 64 ビット加算、最大 128×のアノトロピー(Metal は 16×まで)、新しい行列ユニットモード、および uniform_mov 向けの 7 ビット即時値サポートが含まれます。「Mesa 優先」の反復アプローチは、ハードウェア優先仕様の記述アプローチと比較して進捗を加速させました。チームは drm-shim を Rust で書き換え、フロントエンドを非同期化し、バッチワーク提交などの手軽な最適化を追加しました。Codex は既知の良質なサンプルと完全アドレス空間キャプチャを比較することでデバッグを行いました。

このドライバは M4 Mac Mini で Minecraft を 200 FPS で動作させ、Chrome および Firefox で WebGL をサポートし、コンポジティングも正常に動作しています。アップストリーム化には課題が存在します:Mesa への提出の前に大規模なテスト、人間によるレビュー、そしてリファクタリングが必要であり、これは完全に LLM が書かれた GPU ドライバであるため懐疑論が予想されます。一方、Linux カーネルのアップストリーム화는 Asahi M1/M2 ドライバーがアップストリーム化されるまでブロックされています。今後の目標には Vulkan 1.4、OpenGL 4.6、OpenGL ES 3.2、OpenCL 3.1、Direct3D 12(Proton 経由)、およびレイトレーシングが含まれます。ファームウェア ABI は顕著に異なります:A18 Pro の第 2 RTKit コプロセッサは M5 に M4 よりも近い特性をもたらします。M5 ユーザー空間 ISA は主にスーパーセットですが、テクスチャ記述子など他の部分で差異があります。公開リリースは予想よりも早期に行われる可能性があり、ディスカッションのためにコミュニティは Discord を通じて招待されます。

本文

私たちの取り組み:M4 GPU ドライバー開発の要約

📌 TL;DR(要約)

  • プロジェクト概要:ニクラスと私は、通常数年かかる作業を約 1 ヶ月という短期間で完了しました。
    • 対象製品:Apple M4 チップ搭載の「Mac Mini」と「MacBook Neo」。
    • 達成目標:完全なOpenGL ES 3.0 準拠の GPU ドライバーを構築。
  • 動作確認
    • Chrome や Firefox で WebGL が正常に動作。
    • コンポーザート(画面合成)が機能していることを確認。
    • Minecraft を 200 フレーム/秒という高画質で動作させるパフォーマンスを達成。
  • 開発手法
    • Apple の複雑なファームウェア ABI とユーザー空間コンポーネントを、クリーンルーム環境下でリバースエンジニアリング。
    • 確立された手法を用いて、透明性と検証性を確保。

💡 注釈:コードはまだ一般公開リリースには至っていませんが、早期提供に向けて努めています。


🛠️ 取り組みの詳細

背景と目標

  • 目的:macOS リバースエンジニアリングの成果を実践的な GPU ドライバーへ応用。
  • 重要性:GPU は現代システムの必須要素。GPU なしでは描画処理が CPU に負荷がかかり、性能低下と電力効率悪化を招く。
  • ターゲット規格:M4 Mac Mini と MacBook Neo 向けに OpenGL(将来的には Vulkan)ドライバを実装。

開発期間の短縮

通常数年以上かかるプロジェクトを**「数日」〜「数週間」**に圧縮。以下の成果を達成しました:

  1. ハードウェア発見
    • 生体プローブ(Live Probing)のみで M4、A18 Pro、M5 のユーザー空間をリバースエンジニアリング。
    • Apple ドライバが出力していないハードウェア対応機能と命令を発見。
  2. ユーザー空間ドライバー開発
    • カスタム IR/シェーダコンパイラ、コマンドストリームビルダーなどを内蔵した完全動作の実装を完成。
  3. ファームウェア ABI リバースエンジニアリング
    • 自作ハイパーバイザーからのハードウェアトレースを用いて、AGX ファームウェア ABI をゼロから完全に解明。
  4. カーネルドライバ実装
    • 上記 ABI に完全に準拠する Linux カーネルドライバを実装。

クリーンルームアプローチ

  • Apple バイナリ不使用:Apple のバイナリは一切使用せず、ハイパーバイザーからのトレースと自製シェーダーのみを使用。
  • 仕様書の作成:友人に依頼し、不透明な Apple blobs の仕様書を作成。
  • 完全な検証性:全ての実験結果を公開し、成果物は
    twin agx-re
    リポジトリで確認可能。

アーキテクチャ構成

現代の GPU ドライバー構造(カーネル空間とユーザー空間)に従います:

  • カーネル空間:ファームウェアとのインターフェース、バッファー割り当て、スケジューリングを担当。
  • ユーザー空間:GPU の動作原理を理解し、実際にデータを充填する役割。

⚙️ カーネル空間開発

Apple シリコンでは、カーネルドライバは直接ハードウェアと通信せず、カスタム RTOS「RTKit」を介して GPU ファームウェアと通信します。そのため、第一歩はファームウェア ABI の解明です。

ABI の複雑さ

Apple は合理的なインターフェースを採用せず、既存のカーネルドライバを分割して片方を「ファームウェア」と呼び、残りをホストドライバとして共有構造体で通信させる方式を採用しています。これにより以下の課題が発生しました:

  • 構造体の増加:M1/M2 に比べて A18 Pro では構造体が 50% 増大。
  • ポインタの増加:ポインタ数が 2 倍に膨張。
  • 提出プロセスの複雑化:ワークの提出手順が劇的に複雑化。

レバースエンジニアリング手法

LLM(Codex)を用い、「観察 → 再生(リプレイ) → 再現」というアプローチを徹底しました。

  1. ファームウェア可視化イベント(kicks)を検知。
  2. その時の GPU メモリ全体のコピー保存。
  3. システム再起動後にメモリ書き戻し、出力ページ変化を確認。
  4. コード上でオブジェクトを再構築し、全てのポインタを追跡して解釈。

LLM は実験を重ねるごとに「再生対象ページの数を減らし」、最終的に全てをソースから構築するまで進化しました。

発生した課題と解決策

課題問題の内容解決の鍵
1. レンダリングワークファームウェア起動後に提出されたワークが ACK(確認応答)されて破棄され、実際には実行されない。動的な状態キャプチャが困難。「ファームウェア起動直後の最初のキャプッチ」を特定し、単なる 1 バイトのディスクリプター欠落を発見して修正。
2. コンピュートワーク大量のレンダリングワーク実行後スケジューリングされるため、クリーンなキャプチャが困難(336MB のデータも失敗)。無駄な情報過多で処理に失敗。シングルユーザーモード起動 + Metal 利用時即時 LaunchDaemon 設置により、純粋なコンピュート・トレースの成功捕捉。
3. 部分的レンダリングタイル化頂点バッファー (TVB) が不足した場合の処理。再ロードと部分実行が必要で極めて不安定。1 つのトランザクション再生から学習し、Metal シェーダー改変を介して複数の部分レンダリングを実行可能に。

Python プロトタイプから Linux ドライバへ

  • 移行期間:約 3 日(そのうち 1 日は無駄)。
  • 課題:LLM が最も難しい「部分的なレンダリング」から着手し、スムーズな進捗を妨げた。
    • 解決:指示を「まずはコンピュートから」と変更すると、全てがスムーズに進む。

ドライバ構築の工程(高級層)

  1. drm-shim
    を Rust で書き直し(同期型)。
  2. フロントエンド非同期化しつつ、GPU 提出は同期のまま維持。
  3. GPU 提出部分も非同期化。ポーリングではなくファームウェアイベント監視へ再ファクタリング。
  4. バッチワーク提出などの低レベル最適化を実装。

LLM の強み:コードが動作しない理由をハイパーバイザーを利用して全アドレス空間をキャプチャし、既知サンプルと比較する体系的デバッグが可能。


🎨 ユーザー空間開発

A18 Pro のユーザー空間は M1/M2 と大きく異なるため(新しいディスクリプター形式・ISA など)、完全なリバースエンジニアリングが必須でした。

リバースエンジニアリングのプロセス

  • 手法:小さな Metal プログラムを実行 → コンパイル → 変更箇所確認 → ビット操作による解釈という反復プロセス。
  • フェーズ 1(Claude): 形式の理解と列挙に成功したが、デコンパイル済みのコードから再構築する実装能力は低かった。
  • フェーズ 2(ニクラス参画):
    drm-shim
    を完成させ、M4 Mac Mini 向けユーザー空間 RE を担当。

アプローチの比較

私のアプローチニクラスのアプローチ
方針ハードウェア RE を最優先し、原理理解から仕様書作成へ移行。LLM に実装させる。まず Mesa(ドライバー)を構築。機能追加時にのみ RE を実施。
時間配分大半をハードウェア実験に費やす。実装コードには割かない。Mesa のビルディング・テストと RE の両方にバランスよく割く。
結果「完全性」の名の下に些細な任務で時間を浪費する傾向あり。実際の構築必要性により拘束され、効率的に進捗。未解明動作を自ら検証。

⚠️ LLM の限界:「堅実(Pedantic)」であることが一部では利点だが、場合によっては全体目標から逸脱し無関係な枝葉に時間を費やす傾向がある。

発見された独自機能

ハードウェアではサポートされているが Metal ではサポートされていない機能を直接ビット操作で実現しました(Alyssa Rosenzweig の手法)。

  • ネイティブ単命令 64 ビット加算
  • アニソトロピー(異方性フィルタリング)を 128 倍へ拡張(Metal 上限は 16 倍)
  • マトリクスユニットの新しいモード
  • uniform_mov
    のための 7 ビット直値サポート

Mesa 開発と Khronos CTS

  • Khronos 互換性テストスイート (CTS):既に網羅的なテストコーパスが存在するため、LLM を導くのが容易。
  • 内部構造:Gallium(内部 API)と Mesa 内部 IR が既に整っているため、翻訳のみが必要。
    • NIR(LLVM IR に似る)から AGX プロプライエタリ ISA へのコンパイルを実装。
    • このコンパイラーは将来的な Vulkan ドライバーにも再利用可能。

成果:Niels のアプローチが優先され、段階的な改善でOpenGL ES 3.0 準拠を達成(未対応はオプション拡張のみ)。


📦 成果物 (Deliverables)

以下のリポジトリからコードを検証・利用できます:


🚀 残りの作業と将来展望

対応規格の範囲

我々のドライバーは以下の規格を全てカバーする予定です:

  • Vulkan (1.4)
  • OpenGL (4.6) / OpenGL ES (3.2)
  • OpenCL (3.1)
  • Direct3D 12 (Proton 経由)
  • レイトレーシング

上流化 (Upstreaming) の課題

  • Mesa: ポリシー上の問題は解決済みですが、多くのテスト、人間によるレビュー、PR の再ファクタリングが必要です。
  • LLM コードの評価:世界初の完全に LLM で書かれた GPU ドライバーであるため、人間のコードよりも高い基準で厳しく評価される可能性があります。

Linux カーネルドライバの上流化

  • M1/M2 ドライバの上流化がまだ完了しておらず、現状では待つしかありません。
  • 計画:M1/M2 ドライバが上流化した後に、必要に応じて再ファクタリングとレビューを完了させ、我々のドライバーも上流化させる予定。

📅 使用開始時期について

  • コードの手元用意に向けて努力しています。
  • 予想より短い期間でリリースできるでしょう(リンゴは木から離れることはありません)。

💬 ご参加方法

アイデアの議論、チャット、単なる交流など、Discord サーバーへの参加をお待ちしております!


📝 付録:技術的な補足情報

Sam (Summer) とは?

  • カーネル RE タスクに使用した LLM はCodex(GPT-5.6 Sol / GPT-6 Astra)。
  • 最大の課題:過剰なサイバーセキュリティ制限(Trust Access 登録なし)。
    • /goal resume
      などの単純指示では再開できない場合がある。
    • 解決策:1 分ごとのスクリーンショット差分比較を行い、進捗がない場合は自動的に
      /goal resume
      を送信するデモンを構築(グループチャットに流出した愚かだが有効なハック)。

M4 vs A18 Pro vs M5 の違い

  • M4 vs A18 Pro:ユーザー空間実装は実質同一。主な違いは M4 のコア数により整合する値がわずかに大きいことのみ。
    • ABI は著しく異なり、A18 Pro は第 2 の RTKit コプロセッサを持つため複雑化(M5 に類似)。
  • M5:M4 と共通点は多いが、テクスチャディスクリプターなどは完全に異なる。
    • ユーザー空間は部分的に RE 済み、ファームウェア ABI は完全 RE 済み。
    • プロトタイプ
      drm-shim
      が構築・テスト済みであり、Rust ドライバへの移行も比較的容易と考えられる。

ターゲット:引き続き M4 Mac Mini と MacBook Neo を主目標としています。

同じ日のほかのニュース

一覧に戻る →

2026/09/16 4:25

「System One モデルと Jev」の紹介

## Japanese Translation: TypeSafe AI は、即座で誤りのない自動意思決定のために設計された画期的な「System One」モデルである **Jev** を発表しました。従来の言語モデルが単なるテキスト文字列を生成するのに対し、Jev は型安全構造化値を出力し、データの一貫性を確保しながらハルシネーションを排除します。このアーキテクチャ変更は並列サンプラにより支えられており、すべての応答を同時に処理して結果を 70ms から 500ms の範囲で提供可能にしています。これにより既存のツールと比較して最大 200 倍高速化されながら、著しく低いコスト(入力トークンあたり約 0.042 ドルで出力コストはほぼゼロ)を実現しています。システムは、標準的なアライメント手法に依存せず、検証可能な報酬を最優先する「Calibrated Decisions」用の強化学習を用いた専門的なトレーニングを受けました。 カハニーマンの快思考といった認知科学の概念に触発された Jev は、現在のフロンティアモデルと対比して顕著な効率性でベンチマークされています。Jev は、高速ゲームインタラクションや迅速なビッグデータ処理といったリアルタイムアプリケーションを可能にしており、既存のツールに対して最大 200 倍高速化されながらコストは大幅に削減されています。その結果、リアルタイムインテリジェンスに依存する業界では、一貫した信頼スコアと近乎ゼロのレイテンシを提供するシステムへの転換が期待でき、これにより現在の大規模言語モデル展開におけるボトルネックを効果的に解決します。

2026/09/15 21:31

Show HN: 鳥の声に反応して、19 世紀の挿絵風に描く電子ペーパーフレーム

## Japanese Translation: 「Fugleramme」プロジェクトは、ノルウェー・ベルゲンの厨房の窓を、ローカル AI と歴史的自然史のアートを組み合わせることでリアルタイムデジタルバードウォッチングキオスクへと変えます。BirdNET-Go を使用してデバイス上で鳴き声を検出し、公有ドメインソースからの手切りされた 1800 年代の図版として一致結果を Inky Impression e-ink パネルに表示します(アート作品は AI で生成されておらず、一部のものは補正されています)。800 枚以上の切り抜きがあり、400 種以上をカバーし、主にスキャンディナヴィア、英国、中欧の種を対象とし、より広いカバレッジが計画されています。検出された種は背景除去処理され、体格サイズに合わせたテクスチャ付きページに配置され、空のスロットには裸の枝が表示されます。システムは Raspberry Pi 5(推奨)、Inky Impression 13.3 インチディスプレイ、マイク、A4 フレームでローカルで動作しますが、Web キオスクまたは Docker(`ghcr.io/arnegiacomo/fugleramme`)または `install.sh` を通じても動作します。また、ローカルまたはリモートの BirdNET-Go インスタンスをターゲットとすることも可能です。現在は初期開発段階であり、コミュニティからの貢献(修正、ドキュメント、アート作品)を歓迎しており、バグ報告には Discussions を使用し、コード・アート・ドキュメントの変更には PR を使用します。WWF のポスター(Axel Thorenfeldt 氏)や AvianVisitors に着想を得た Fugleramme は、アクセシブルなハードウェアが厳選された公有ドメインのアートを通じて複雑なオーディオデータを可視化する方法を示しています。コードは MIT ライセンス、検出および画像は適切な CC ライセンス(適用可能な場合、非商用制限を含む)の下にあります。 ## Text to translate: The "Fugleramme" project turns a kitchen window in Bergen, Norway, into a real-time digital bird-watching kiosk by combining local AI with historical natural history art. Using BirdNET-Go, it detects bird calls on-device and displays matches as hand-cut 1800s illustrations from public-domain sources on an Inky Impression e-ink panel; no artwork is AI-generated (some is retouched). Over 800 cut-outs cover more than 400 species, primarily Scandinavian, British, and central European, with broader coverage planned. Detected species are background-removed and packed onto a textured page sized by body mass; empty slots show a bare perch. The system runs locally on a Raspberry Pi 5 (recommended), an Inky Impression 13.3" display, a microphone, and an A4 frame, but can also run as a web-only kiosk or via Docker (`ghcr.io/arnegiacomo/fugleramme`) or `install.sh`. It supports pointing at local or remote BirdNET-Go instances. Currently in early development, the project invites community contributions (fixes, docs, artwork) and uses Discussions for bug reports while PRs are for code/art/docs changes. Inspired by a WWF poster by Axel Thorenfeldt and AvianVisitors, Fugleramme demonstrates how accessible hardware can visualize complex audio data through curated public-domain art, with code under MIT and detection/images under appropriate CC licenses (including non-commercial constraints where applicable).

2026/09/16 6:07

ドイツのライネメタルが戦術システム接続用武器プロトコルのオープンソース化を発表

## Japanese Translation: The onboardapi ライブラリは、Object Management Group (OMG) から Data Distribution Service (DDS) によるデータ交換の標準化を通じて、センサーシステムとソフトウェア間の通信を簡素化します。ddkit ツールキットを基盤とし、この C++ ベースのソリューションは OMG の XTypes および XCDR2 エンコーディングを活用してシームレスな相互運用性を確保し、データモデルが進化するに連れて完全な後方互換性を保証します。Java、Python、C#、および .NET 向けのラッパーを通じて多言語統合をサポートし、クライアント/サービスアーキテクチャに関するドキュメント、セットアップガイド、コード例、変更ログ、 browsable データモデルインターフェースを含む豊富なリソースを提供します。このライブラリは、堅牢なクロスプラットフォーム接続を維持することでスケール可能な産業用アプリケーションを可能にします。そのインターフェースは EPL v2.0 ライセンスに基づき、ランタイムライブラリは EULA-RME-SDK-1.0 ライセンスに従います。 ## Text to translate: The onboardapi library streamlines communication between sensor systems and software by standardizing data exchange through the Data Distribution Service (DDS) from the Object Management Group (OMG). Built on the ddkit toolkit, this C++-based solution ensures seamless interoperability via OMG's XTypes and XCDR2 encoding, guaranteeing full backward compatibility as the data model evolves. It supports multi-language integration through wrappers for Java, Python, C#, and .NET, with extensive resources including documentation on Client/Service architecture, setup guides, code examples, a changelog, and browsable Data Model interfaces. The library facilitates scalable industrial applications by maintaining robust cross-platform connectivity; its interfaces are licensed under EPL v2.0, while runtime libraries adhere to the EULA-RME-SDK-1.0 license.

M4 Mac Mini に Linux GPU ドライバを作成するまで、たった 1 カ月 | そっか~ニュース