Solo – un cargador .so para binarios estáticos de Linux
Un nuevo proyecto, Solo, incorpora su propio cargador ELF en binarios Linux enlazados estáticamente para que puedan hacer `dlopen()` de controladores de GPU y otros controladores solo para glibc del host incluso cuando están compilados contra musl. Los comentaristas sopesan el atractivo de binarios portables, en su mayor parte estáticos, frente a los riesgos de reimplementar partes de la ABI de glibc y la semántica del cargador, advirtiendo sobre la compatibilidad futura, la seguridad y la fragilidad del comportamiento no documentado. El hilo se amplía hacia una crítica del fragmentado panorama de la ABI de espacio de usuario y del empaquetado en Linux, contraponiendo contenedores, AppImage y estrategias de “compilar contra una glibc antigua” con ideas más radicales como un espacio de usuario freestanding, sin libc.
Propósito y enfoque del proyecto
- Solo busca permitir que binarios Linux totalmente estáticos enlazados con musl carguen dinámicamente controladores
.soproporcionados por el host (en particular, controladores de GPU compilados contra glibc) mediante la incorporación de:- Un cargador ELF personalizado (x86‑64, aarch64).
- Un “puente de ABI de glibc” que adapta símbolos de glibc sobre musl.
- El objetivo son binarios portables que se ejecuten sin modificaciones en distribuciones con glibc, distribuciones con musl (p. ej. Alpine) y, eventualmente, Android/bionic, manteniendo la sensación de ser “estáticos” desde la perspectiva de la aplicación.
Preocupaciones de seguridad y corrección
- Varios comentarios advierten que implementar un cargador ELF personalizado y un adaptador de ABI es frágil:
- Cualquier error al mapear y ejecutar código es un posible vector de RCE, especialmente si se usa en contextos privilegiados.
- La ABI SysV/ELF tiene sutilezas no documentadas (p. ej., AT_SECURE) que son fáciles de implementar mal.
- El autor responde que:
- ld.so ya hace un mapeo similar.
- El proyecto tiene pruebas extensas, 100% de cobertura, y se ejecuta contra ~1000 paquetes de Debian, con planes de fuzzing.
Entrelazado de glibc, musl y la ABI
- Larga discusión sobre que en Linux:
ld.so,libc.so, libstdc++, TLS, átomos, unwinding y los globals de C++ están profundamente entrelazados y en parte no documentados.- Las bibliotecas compartidas compiladas para glibc dependen efectivamente de esa glibc exacta junto con su cargador.
- Algunos sostienen que este diseño convierte a las libc alternativas (musl, bionic) en opciones de segunda clase y obliga a trucos como Solo.
- Otros responden que, para C, la ABI es en gran medida estable y glibc suele mantener compatibilidad hacia atrás, especialmente si compilas contra una glibc antigua.
Enlace estático frente a dinámico y distribución
- Bando pro-estático:
- Quiere binarios totalmente autocontenidos, desconfía de glibc y de la inestabilidad de las distribuciones, y prefiere C/Rust sin dependencias o syscalls directas.
- Señala problemas con controladores propietarios o solo para glibc, GPU, NSS, Mesa, etc. en sistemas musl.
- Bando escéptico:
- Argumenta que Solo introduce riesgos de compatibilidad futura: controladores futuros podrían requerir símbolos de glibc nuevos o versionados que el puente embebido no soporte.
- Sugiere enfoques más simples: enlazar dinámicamente contra una glibc antigua, usar contenedores (Docker/Flatpak), o baselines estilo AppImage/manylinux.
¿Es un problema de nicho?
- Algunos dicen que esto solo importa para distribuciones basadas en musl o controladores propietarios; la mayoría de las distros están bien con el enlace dinámico estándar.
- Otros insisten en que es un dolor real para desarrolladores pequeños e independientes que no pueden compilar/empaquetar por distribución, pero quieren binarios únicos que “simplemente funcionen” en glibc, musl y Android.
Código y documentación generados por LLM
- El autor usa abiertamente LLMs para el código y la documentación y lo defiende como una forma de alta productividad, con revisión humana.
- Algunos lectores desconfían mucho de los README escritos por LLM, los perciben como “slop” y los asocian con proyectos de poco esfuerzo.
- Otros argumentan que el prejuicio estilístico no es lo importante y que la calidad técnica y las pruebas importan más que si el texto “suena” a LLM.