pg83/solo
Portable Linux binaries, solved
解決する問題
SoLo は完全に静的 Linux バイナリ(musl でビルド)が実行時に glibc リンクされた共有オブジェクト(GPU ドライバなど)をロード・使用できるようにします。これにより、コンテナや AppImage、またはプロセス内に別の C ライブラリを同梱する必要がなくなり、単一の実行可能ファイルとして配布できるまま、ホストシステムにインストールされたハードウェア固有のドライバにアクセスできます。
動作方法
SoLo は x86-64 および aarch64 用の独自の ELF ローダーを実装し、glibc ABI ブリッジを提供します。glibc 自体をロードするのではなく、ELF セグメントをマップし、バージョン付きシンボルを解決し、glibc のインポートを ABI に準拠したアダプタに変換して既存の musl ランタイム上で実行します。TLS(スレッドローカルストレージ)モデル、C++ の例外、遅延 PLT バインディングなどの複雑な低レベル処理を処理し、システムローダーを必要とせずに外部コードが正しく動作することを保証します。
対象ユーザー
GPUアクセラレーション(Vulkan、OpenGL)やその他のシステム共有ライブラリにアクセスしたいが、単一ファイル配布のポータビリティを損ないたくない、静的 Linux バイナリを開発する開発者。
特徴
- 単一バイナリ配布: 実行時にホストの GPU ドライバをロードできる musl リンクされた単一実行ファイルを配布可能。
- glibc ABI ブリッジ: プロセス内に第二の libc をロードせずに glibc 呼び出しを musl に変換。
- 包括的な TLS サポート: 静的 TLS に専用の余剰アリーナを使用して、すべての4つの TLS モデル(初期実行型を含む)をサポート。
- クロスワールド互換性: 静的コンパイルと glibc コンパイルのフレーム間で C++ 例外のアンワインディングを可能に。
- 広範なハードウェアテスト: AMD、Intel、NVIDIA GPU、Apple M1(Asahi Linux)、Android(Termux)、WSL で検証済み。
- 高い準拠性: CI で Debian パッケージ上位1,000件から2,100以上の共有オブジェクトのロードをテスト。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト