Repolode
pg83

pg83/solo

Un cargador de archivos .so al estilo de dlfcn que permite a un binario Linux totalmente estático con musl cargar los drivers de GPU del sistema anfitrión, como los ICD de Vulkan.

Estrellas
643
Forks
15
Issues abiertos
15
Último commit
hace 23 días

¿Qué es?

SoLo resuelve un problema concreto de despliegue: normalmente, un ejecutable totalmente estático enlazado con musl no puede usar dlopen() para cargar los objetos compartidos del driver de GPU instalados en el sistema anfitrión, que suelen estar compilados para glibc. SoLo ofrece una API al estilo de dlfcn respaldada por su propio cargador ELF para x86-64 y aarch64, además de un puente de ABI de glibc implementado sobre el runtime musl del proceso. El resultado sigue siendo un único ejecutable estático que puede usar el driver ya instalado en la máquina.

El repositorio incluye una demo de Vulkan de extremo a extremo que carga el ICD de Vulkan original del sistema anfitrión, ejecuta un shader de cómputo incluido en el repositorio y guarda el resultado en un PNG. glibc nunca se carga como una segunda libc: sus importaciones se asignan a adaptadores sobre musl, y las funciones no implementadas son stubs que abortan e indican el nombre y la versión del símbolo. También se gestionan las excepciones de C++, los cuatro modelos de TLS y el versionado de símbolos a través de esta frontera.

El proyecto solo funciona en Linux y carga cada imagen una sola vez: dlclose se ejecuta correctamente, pero no descarga la imagen. La cobertura se comprueba en CI cargando las bibliotecas compartidas de los 1000 paquetes de bibliotecas de Debian más instalados, en ambas arquitecturas.

Funciones clave

  • 01Ofrece una API dlopen/dlsym al estilo de dlfcn para binarios totalmente estáticos con musl.
  • 02Incluye su propio cargador ELF para x86-64 y aarch64.
  • 03Conecta las importaciones de la ABI de glibc con el runtime musl existente en el proceso.
  • 04Carga los drivers ICD de Vulkan del sistema anfitrión sin un contenedor ni AppImage.
  • 05Incluye un binario precompilado de demostración de Vulkan que genera un PNG mediante un shader de cómputo.

Casos de uso

  • Distribuir un único binario estático de Linux que necesite el driver de Vulkan o OpenGL del sistema anfitrión.
  • Ejecutar cargas de trabajo de cómputo o gráficos con GPU desde una aplicación estática con musl.
  • Cargar bibliotecas compartidas compiladas para glibc desde un programa estático con musl, sin incluir una distribución de Linux.
  • Estudiar la implementación de un cargador ELF en espacio de usuario y de un puente de ABI de glibc a musl.

Inicio rápido

  1. 1

    Descarga el binario precompilado de la demo de Vulkan desde la página de versiones

    curl -LO https://github.com/pg83/solo/releases/latest/download/vulkan-x86_64
  2. 2

    Dale permiso de ejecución al binario

    chmod +x vulkan-x86_64
  3. 3

    Ejecuta la demo para generar un PNG de 512x512 con el controlador Vulkan del host

    ./vulkan-x86_64 hello.png

Antes de usarlo

  • Solo para Linux en arquitecturas x86-64 y aarch64.
  • Para que funcione la demo de GPU, es necesario tener instalado un controlador Vulkan en el host.
  • Sigue siendo un enfoque experimental y de nicho para cargar bibliotecas del host enlazadas con glibc.

Temas

Preguntas frecuentes

¿Qué es solo?
Un cargador de archivos .so al estilo de dlfcn que permite a un binario Linux totalmente estático con musl cargar los drivers de GPU del sistema anfitrión, como los ICD de Vulkan. SoLo resuelve un problema concreto de despliegue: normalmente, un ejecutable totalmente estático enlazado con musl no puede usar dlopen() para cargar los objetos compartidos del driver de GPU instalados en el sistema anfitrión, que suelen estar compilados para glibc. SoLo ofrece una API al estilo de dlfcn respaldada por su propio cargador ELF para x86-64 y aarch64, además de un puente de ABI de glibc implementado sobre el runtime musl del proceso. El resultado sigue siendo un único ejecutable estático que puede usar el driver ya instalado en la máquina.
¿solo es gratuito? ¿Qué licencia tiene?
solo es open source bajo la licencia MIT. Revisa los términos de la licencia antes de usarlo en productos comerciales.
¿solo sigue mantenido?
Mantenimiento activo. El último commit de solo fue el 29 sept 2026.
¿Para qué puedo usar solo?
Distribuir un único binario estático de Linux que necesite el driver de Vulkan o OpenGL del sistema anfitrión. Ejecutar cargas de trabajo de cómputo o gráficos con GPU desde una aplicación estática con musl. Cargar bibliotecas compartidas compiladas para glibc desde un programa estático con musl, sin incluir una distribución de Linux. Estudiar la implementación de un cargador ELF en espacio de usuario y de un puente de ABI de glibc a musl.
¿Cómo se instala solo?
Descarga el binario precompilado de la demo de Vulkan desde la página de versiones: curl -LO https://github.com/pg83/solo/releases/latest/download/vulkan-x86_64 Dale permiso de ejecución al binario: chmod +x vulkan-x86_64 Ejecuta la demo para generar un PNG de 512x512 con el controlador Vulkan del host: ./vulkan-x86_64 hello.png
¿Dónde consigo solo?
El código fuente y las instrucciones de instalación están en GitHub: https://github.com/pg83/solo

Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.

Proyectos relacionados