Repolode
pg83

pg83/solo

完全静的な musl Linux バイナリから、Vulkan ICD などホストの glibc 依存 GPU ドライバーを読み込める、dlfcn 形式の .so ローダー。

スター
643
フォーク
15
未解決の Issue
15
最終コミット
23 日前

これは何?

SoLo は、完全静的な musl リンクの実行ファイルから、通常は glibc 向けにビルドされているホスト上の GPU ドライバー共有オブジェクトを dlopen() できないという、特定のデプロイ上の課題を解決します。SoLo は、x86-64 と aarch64 に対応した独自の ELF ローダーと、プロセスの musl ランタイム上に実装された glibc ABI ブリッジを使って、dlfcn 形式の API を提供します。その結果、単一の静的実行ファイルのまま、マシンにインストール済みのドライバーを利用できます。

リポジトリには、ホスト上の改変されていない Vulkan ICD を読み込み、同梱の計算シェーダーを実行して、出力を PNG に書き出す Vulkan の一連の動作を示すデモが含まれています。glibc を 2 つ目の libc として読み込むことはありません。glibc のインポートは musl 上のアダプターに割り当てられ、未実装の関数はシンボル名とバージョン名を示して異常終了するスタブになります。C++ 例外、4 種類の TLS モデル、シンボルバージョニングにも境界を越えて対応しています。

このプロジェクトは Linux 専用で、読み込みは一度限りです。dlclose は成功しますが、イメージはアンロードされません。対応状況は、両アーキテクチャで、インストール数上位 1000 件の Debian ライブラリパッケージの共有ライブラリを読み込む CI テストによって確認されています。

主な機能

  • 01完全静的な musl バイナリ向けに、dlfcn 形式の dlopen/dlsym API を提供します。
  • 02x86-64 と aarch64 に対応した独自の ELF ローダーを備えています。
  • 03glibc ABI のインポートを、プロセスが使用する既存の musl ランタイムに橋渡しします。
  • 04コンテナや AppImage を使わずに、ホストの Vulkan ICD ドライバーを読み込みます。
  • 05計算シェーダーを使って PNG を書き出す、ビルド済みの Vulkan デモバイナリが付属します。

ユースケース

  • ホストの Vulkan または OpenGL ドライバーを必要とする、単一の静的 Linux バイナリを配布する。
  • 静的 musl アプリケーションから GPU 計算やグラフィックスの処理を実行する。
  • ディストリビューション環境を同梱せずに、musl 静的プログラムから glibc 向け共有ライブラリを読み込む。
  • ユーザー空間 ELF ローダーと glibc-to-musl ABI ブリッジの実装を学ぶ。

クイックスタート

  1. 1

    リリースページからビルド済みの Vulkan デモバイナリをダウンロードします

    curl -LO https://github.com/pg83/solo/releases/latest/download/vulkan-x86_64
  2. 2

    バイナリに実行権限を付与します

    chmod +x vulkan-x86_64
  3. 3

    デモを実行して、ホストの Vulkan ドライバーを使い 512x512 の PNG を書き出します

    ./vulkan-x86_64 hello.png

使う前に知っておきたいこと

  • x86-64 および aarch64 アーキテクチャの Linux のみ対応しています。
  • GPU デモを動作させるには、ホストに Vulkan ドライバーがインストールされている必要があります。
  • glibc にリンクされたホストライブラリを読み込むための、まだニッチで実験的なアプローチです。

トピック

よくある質問

solo とは?
完全静的な musl Linux バイナリから、Vulkan ICD などホストの glibc 依存 GPU ドライバーを読み込める、dlfcn 形式の .so ローダー。 SoLo は、完全静的な musl リンクの実行ファイルから、通常は glibc 向けにビルドされているホスト上の GPU ドライバー共有オブジェクトを dlopen() できないという、特定のデプロイ上の課題を解決します。SoLo は、x86-64 と aarch64 に対応した独自の ELF ローダーと、プロセスの musl ランタイム上に実装された glibc ABI ブリッジを使って、dlfcn 形式の API を提供します。その結果、単一の静的実行ファイルのまま、マシンにインストール済みのドライバーを利用できます。
solo は無料で使えますか?ライセンスは?
solo は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
solo は今もメンテナンスされていますか?
活発にメンテナンス中。solo の最終コミットは 2026年9月29日 です。
solo は何に使えますか?
ホストの Vulkan または OpenGL ドライバーを必要とする、単一の静的 Linux バイナリを配布する。 静的 musl アプリケーションから GPU 計算やグラフィックスの処理を実行する。 ディストリビューション環境を同梱せずに、musl 静的プログラムから glibc 向け共有ライブラリを読み込む。 ユーザー空間 ELF ローダーと glibc-to-musl ABI ブリッジの実装を学ぶ。
solo のインストール方法は?
リリースページからビルド済みの Vulkan デモバイナリをダウンロードします: curl -LO https://github.com/pg83/solo/releases/latest/download/vulkan-x86_64 バイナリに実行権限を付与します: chmod +x vulkan-x86_64 デモを実行して、ホストの Vulkan ドライバーを使い 512x512 の PNG を書き出します: ./vulkan-x86_64 hello.png
solo はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/pg83/solo

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト