
2026/07/03 3:36
NetBSD で Vulkan を動作させるための私の試み
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
本プロジェクトは、NetBSD 10.1 に Lavapipe Vulkan ドライバを成功裏に統合したことでマイルストーンに到達し、これがグラフィックスタックが主要な BSD オペレーティングシステムでサポートされた初となることを意味しています。この画期的な成果により、Mesa を LLVM 19.1.7 と対向させて設定し、約 17 MB の
libvulkan_lvp.so ドライバおよびその ICD マニフェストをインストールするまでのビルドプロセス全体が自動化されます。ツールの重要な特徴は回復力であり、ビルドがクラッシュした場合でもコマンドを再度実行することでスクリプトが既存のビルドを検出し、自動的に再開できます。ユーザーはまもなくプリビルトバイナリにアクセスできるようになり、インストールを簡素化できますが、現時点では完全なグラフィックパフォーマンスを得るには Vulkan ロードアの今後の統合が必要です。本プロジェクトは、GCC の警告(Mesa の形式指定子に関するもの)などに関するコンパイラ互換性の問題を解決するための回避策を施しつつ、アップストリーム側の修復を待っています。この取り組みは、オープンソースのグラフィック API と BSD エコシステムの間をつなぐことを目指し、NetBSD がアップストリームのバグフィックスを受け取り、最終的に「ネイティブ Vulkan サポートがない唯一の主要な BSD」という地位を解消することを可能にします。本文
Vulkan ソフトウェアスタック導入プロジェクト (NetBSD)
プロジェクト概要
この取り組みは、Vulkan ソフトウェアスタック(Mesa/Lavapipe)を NetBSD に導入することを目的としています。プロセスの文書化と自動化を行うことで、再現性と維持性の確保を目指しています。
現状のステータス
- 状態: ベータ版
- 完了した作業:
- NetBSD 10.1 (amd64) 向けに、LLVM 19.1.7 を用いた Mesa の構成・コンパイル・リンカー記・インストールを完了。
- Lavapipe ソフトウェア型 Vulkan ドライバー(
)を登録済み。libvulkan_lvp.so
インストール結果
- ドライバファイル:
(約 17MB) がlibvulkan_lvp.so
にインストール。/usr/pkg/lib - ICD マニフェスト: Vulkan API バージョン 1.4 を宣伝するマニフェストが
にインストールされ、システムが正しく発見可能。/usr/pkg/share/vulkan/icd.d/ - 依存関係: 全依存関係を
コマンドで確認済み(問題なし)。ldd - 自動化: 環境セットアップからビルド・インストールまでをエンドツーエンドの自動スクリプトで実行可能。
今後の方向性:プレビルトバイナリ
- 現在: ソースコードからのビルドが必要。
- 将来: プレビルトバイナリの提供とダウンロードのみでのインストールが予定されています。
- ビルドマシンによる公開準備中。
- 将来的には「ダウンロード+インストール」で済み、数時間のビルド工程が不要になる予定です。
現時点での制限事項
- ロードアビリティの不足:
- ドライバー(Lavapipe ICD)は導入済ですが、アプリケーション実行に必要なVulkan ロードアビリティ(
)はまだ整備されていません。libvulkan.so.1 - 実行時動作の確認は完了しておりません。
- ドライバー(Lavapipe ICD)は導入済ですが、アプリケーション実行に必要なVulkan ロードアビリティ(
- ビルド警告:
- GCC が NetBSD 上の Mesa において
フォーマット指定子を却下する問題を回避するため、%m
フラグを適用しています。-Wno-error=format - 適切なアップストリーム化可能な修正(
の使用など)は保留中です。strerror(errno)
- GCC が NetBSD 上の Mesa において
目標
NetBSD は現在、主要な BSD システムの中でVulkan サポートを欠いている唯一の OSです。本プロジェクトが目指すのは以下のことです:
- NetBSD 上で Vulkan ソフトウェアスタック(CPU 動作/Mesa Lavapipe ドライバー)を構築。
- すべてのステップ(行き止まりも含む)を文書化し、プロセスを再現可能にすること。
- セットアップを自動化し、新規マシンをビルド準備状態へ導くスクリプトを提供。
- 将来的には上ストリーム(Mesa, pkgsrc)へのフィードバックにより、プレビルトバイナリまたはパッケージ化された導入を実現。
対象環境と範囲
| 項目 | 詳細 |
|---|---|
| 対象 OS | NetBSD 10.1 (amd64)、ミニマル ISO インストール |
| ホスト | VirtualBox VM(リアルタイム GPU アクセラレーション不可) |
| ビルド目標 | Vulkan スタックのコンパイル・リンカー記のみ ※ソフトウェアドライバ(Lavapipe) |
リポジトリ構成
vulkan-netbsd/ ├── docs/ │ ├── 01-environment-setup.md # ベースシステム、pkgsrc、ビルド依存関係 │ ├── 02-source-dependencies.md # pkgsrc に含まれない依存関係(ソース構築) │ ├── 03-mesa-build.md # Mesa(Lavapipe) の構成・コンパイルノート │ └── 04-prebuilt-artifacts.md # 再利用可能なプレビルトバイナリの情報 └── scripts/ ├── setup-env.sh # 環境セットアップの自動化 ├── build-glslang.sh # pkgsrc なし glslang の構築 ├── build-mesa.sh # Mesa(Lavapipe) のクローン・構成・コンパイル ├── install-mesa.sh # ドライバ/ICD マニフェストのインストールと検証 ├── lib-artifacts.sh # フィンガープリント・プレビルトフェッチヘルパー └── package-artifacts.sh # リリース用 tarball へのパッケージ化
スタート方法(手順)
新しいミニマルな NetBSD 10.1 (amd64) インストール上で、ルートユーザーとして以下のコマンドを実行します。
cd /root # 環境セットアップスクリプトのダウンロードと実行 ftp https://raw.githubusercontent.com/segaboy/vulkan-netbsd/main/scripts/setup-env.sh sh setup-env.sh . /root/.profile # glslang の構築(Mesa 用依存項) ftp https://raw.githubusercontent.com/segaboy/vulkan-netbsd/main/scripts/build-glslang.sh sh build-glslang.sh # Mesa と Lavapipe ドライバーのビルド ftp https://raw.githubusercontent.com/segaboy/vulkan-netbsd/main/scripts/build-mesa.sh sh build-mesa.sh --build # ドライバと ICD マニフェストのインストールと登録検証 ftp https://raw.githubusercontent.com/segaboy/vulkan-netbsd/main/scripts/install-mesa.sh sh install-mesa.sh
再試行について
は Mesa をクローン・構成・コンパイルし、build-mesa.sh --build
を生成します。libvulkan_lvp.so
でインストールと登録が行われます。install-mesa.sh- 中断対応: ビルドが中断した場合でも、同一コマンドを再実行するだけで、スクリプトは既存のビルド状態を検知して自動再開します。
- 詳細な解説や SSH 環境からの実行については
を参照してください。docs/01-environment-setup.md
ライセンスと注意
このリポジトリ内のスクリプト、ドキュメント、パッチはすべて MIT ライセンス(LICENSE ファイル参照)の下で公開されています。
関連ソフトウェアのライセンス
本プロジェクトでは第三者ソフトウェアを構築・インストール(オプションでの再配布)しますが、これらは以下の独自ライセンスに従います:
- Mesa: 主に MIT ライセンス(一部コンポーネントは他)。
- glslang: 寛容なライセンス(BSD 風、Apache 2.0、Khronos 条項など)。
- LLVM: Apache 2.0 ライセンス(LLVM 例外条項付き)。
- ※ LLVM は pkgsrc を通じて別途インストールしており、本プロジェクトでは再配布していません。
プレビルトアートの注意点
scripts/package-artifacts.sh で生成するプレビルトアートは、各プロジェクトの帰属を保持するため、関連するライセンス文章(share/licenses/ 内)をバンドルします。公開時にはこれらのファイルをそのまま維持してください。