« All posts

SoLo Lets Static musl Binaries Load glibc GPU Drivers

SoLo lets fully static musl Linux binaries dlopen glibc GPU drivers at runtime — no container, no AppImage, one file.

SoLo is an open-source tool that lets fully static, musl-linked Linux binaries dynamically load glibc-based shared objects at runtime — most notably GPU drivers — without a container, AppImage, or a second libc in the process. Normally a fully static musl binary can't dlopen() a glibc-linked .so; SoLo bridges that gap with its own ELF loader (x86-64 and aarch64) and a glibc ABI shim implemented on top of musl.

The project ships an end-to-end Vulkan proof: a single static executable loads the host's unmodified Vulkan driver, runs a compute shader, and writes the output to a PNG. It's been verified on AMD (radv, radeonsi), Intel, and NVIDIA GPUs under Linux, and on Apple M1 under Asahi Linux. On every commit, CI loads the shared libraries of the 1,000 most-installed Debian packages — over 2,100 host objects — through SoLo on both architectures.

Beyond a basic dlsym shim, SoLo handles the parts that make foreign code actually work: C++ exceptions unwind correctly across the static/dynamic boundary, all four TLS models are supported without wrappers, and ld.so's binding semantics — global-scope interposition, RTLD_DEEPBIND, symbol versioning — are implemented precisely rather than approximated. For engineers, this means true single-binary distribution on Linux without sacrificing access to the host's GPU stack.