pg83/solo

Portable Linux binaries, solved

解決的問題

SoLo 讓完全靜態的 Linux 二進位檔(以 musl 編譯)能在執行時期載入並使用 glibc 連結的共用物件(如 GPU 驅動程式)。這消除了對容器、AppImage 或在程序中攜帶第二個 C 庫的需求,讓開發者能以單一可執行檔分發,同時仍可存取主機系統上安裝的硬體特定驅動程式。

工作原理

SoLo 為 x86-64 和 aarch64 實作自有的 ELF 加載器,並提供 glibc ABI 橋接。它不載入 glibc 本身,而是映射 ELF 段、解析版本化符號,並將 glibc 的匯入轉譯為在現有 musl 執行時上運行的 ABI 正確的適配器。它處理 TLS(執行緒本地儲存)模型、C++ 異常、延遲 PLT 繫結等複雜的底層細節,確保外來程式碼在無需系統載入器的情況下仍能正確運作。

適用對象

需要存取 GPU 加速(Vulkan、OpenGL)或其他系統共用函式庫,但又不願犧牲單一檔案部署可攜性的靜態 Linux 二進位檔開發者。

主要亮點

  • 單一二進位檔部署:分發一個 musl 連結的可執行檔,可在執行時期載入主機 GPU 驅動程式。
  • glibc ABI 橋接:無需在程序中載入第二個 libc,即可將 glibc 呼叫轉譯為 musl 兼容形式。
  • 全面的 TLS 支援:使用靜態 TLS 中的專用剩餘區塊,支援所有四種 TLS 模型(含初始執行模型)。
  • 跨世界相容性:支援在靜態編譯與 glibc 編譯的框架之間進行 C++ 異常回溯。
  • 廣泛的硬體測試:已在 AMD、Intel、NVIDIA GPU、Apple M1(Asahi Linux)、Android(Termux)及 WSL 上驗證。
  • 高相容性:CI 測試了來自 Debian 最受安裝的 1,000 個套件中超過 2,100 個共用物件的載入。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案