Framework de UI multiplataforma en C++17, con backends de ventana GLFW/SDL2 y renderizado OpenGL/Vulkan, basado en un DSL declarativo.
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
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
Dale permiso de ejecución al binario
chmod +x vulkan-x86_64 - 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
Motor de videojuegos de código abierto con licencia MIT, escrito en C++20, con renderizador para Vulkan/Metal/WebGPU, ECS, editor multiplataforma y compilación WebGPU para el navegador.
Aplicación de escritorio gratuita y de código abierto que amplía y mejora imágenes de baja resolución con modelos de escalado mediante IA, en Linux, macOS y Windows.
Un motor de inferencia escrito íntegramente en C que ejecuta modelos MoE muy grandes en hardware convencional mediante la carga de expertos desde el disco según se necesitan.
Framework de inferencia de redes neuronales de alto rendimiento en C++ para ejecutar modelos de deep learning en dispositivos móviles, integrados y de escritorio.
Motor de renderizado en tiempo real basado en física para Android, iOS, Linux, macOS, Windows y WebGL2, diseñado para ser pequeño y eficiente en Android.