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 个共享对象的加载。
相关
- 项目
- 项目
- 项目
- 项目
- 项目