pg83/solo
Portable Linux binaries, solved
What it solves
SoLo allows fully static Linux binaries (built with musl) to load and use glibc-linked shared objects (like GPU drivers) at runtime. This eliminates the need for containers, AppImages, or shipping a second C library within the process, allowing developers to ship a single executable that remains portable while still accessing hardware-specific drivers installed on the host system.
How it works
SoLo implements its own ELF loader for x86-64 and aarch64 and provides a glibc ABI bridge. Instead of loading glibc itself, it maps ELF segments, resolves versioned symbols, and translates glibc imports into ABI-correct adapters that run on top of the existing musl runtime. It handles complex low-level details like TLS (Thread Local Storage) models, C++ exceptions, and lazy PLT binding to ensure that foreign code behaves correctly without needing a system loader.
Who it’s for
Developers building static Linux binaries who need to access GPU acceleration (Vulkan, OpenGL) or other system-shared libraries without sacrificing the portability of a single-file deployment.
Highlights
- Single Binary Deployment: Ship one musl-linked executable that can load host GPU drivers at runtime.
- glibc ABI Bridge: Translates glibc calls to musl without loading a second libc into the process.
- Comprehensive TLS Support: Supports all four TLS models (including initial-exec) using a dedicated surplus arena in the static TLS.
- Cross-World Compatibility: Enables C++ exceptions to unwind across the boundary between static and glibc-compiled frames.
- Broad Hardware Testing: Verified on AMD, Intel, NVIDIA GPUs, Apple M1 (Asahi Linux), Android (Termux), and WSL.
- High Conformance: CI tests the loading of over 2,100 shared objects from the top 1,000 most-installed Debian packages.
Related
- Project
- Project
- Project
- Project
- Project