INFRA Signal 506
Solo enables static Linux binaries to load host GPU drivers via custom .so loader
Solo provides a custom ELF loader and glibc-ABI bridge that lets fully static musl executables dlopen host GPU drivers.
It allows developers to ship a single-file static binary while still using the host’s installed graphics driver, avoiding containers or AppImage. The solution works on both x86-64 and aarch64 systems and has been validated with AMD, Intel, NVIDIA and Apple M1 GPUs. Continuous integration tests load the shared objects of the 1,000 most-installed Debian packages on every commit to ensure broad compatibility.
Written by elseif from the cluster below · every claim links back to a sourceThe three things worth knowing
Solo implements its own ELF loader and glibc-ABI bridge to load glibc-linked .so files from a musl static binary.
The tool supports x86-64 and aarch64 architectures and has been tested with AMD radv, radeonsi, Intel, NVIDIA drivers and Apple M1 under Asahi Linux.
CI validates compatibility by loading the host libraries of the top 1,000 Debian packages on each commit.
THE READ
What the cluster adds up to.
Solo introduces a custom ELF loader and glibc-ABI bridge that enables a fully static musl binary to dlopen host-installed GPU drivers. This removes the usual need for containers, AppImage, or a second libc in the process when graphics acceleration is required. The result is a single file executable that can still use the host’s Vulkan or OpenGL driver.
To use Solo, developers must link their static build against the Solo library (or run the provided prebuilt demo) and compile with a static toolchain such as IX. The build process requires a C/C++ compiler and Python 3 for the demo, but no additional runtime dependencies. Code must avoid glibc symbols not covered by the shim, because unsupported functions generate explicit stub failures instead of silent corruption.
Solo’s ELF loader currently handles only x86-64 and aarch64 binaries, leaving other architectures unsupported. The glibc-ABI bridge implements a subset of the glibc interface; calls to missing symbols trigger generated stubs that abort with the exact symbol and version. Consequently, any driver or library that depends on an unsupported glibc function will cause the loader to fail at runtime.
If a host GPU driver or its indirect dependencies rely on glibc features absent from the shim, Solo cannot load them and the executable will fail to initialize graphics. The approach also assumes that the host’s driver ABI remains compatible with the musl runtime via the bridge; future glibc changes could break this compatibility. In such cases developers would need to revert to a dynamic build or containerized deployment to regain GPU access.
Written by elseif from the cluster below · checked for specifics the sources never containedTHE CLUSTER