Repolode
pg83

pg83/solo

Um carregador de .so no estilo dlfcn que permite a um binário Linux totalmente estático com musl carregar os drivers de GPU do host ligados à glibc, como Vulkan ICDs.

Estrelas
643
Forks
15
Issues abertas
15
Último commit
há 23 dias

O que é?

SoLo resolve um problema específico de implantação: um executável totalmente estático ligado à musl normalmente não consegue usar dlopen() para carregar os objetos compartilhados de drivers de GPU instalados no host, que geralmente são compilados com glibc. SoLo oferece uma API no estilo dlfcn, implementada com seu próprio carregador ELF para x86-64 e aarch64, além de uma ponte de ABI da glibc construída sobre o runtime musl do processo. O resultado continua sendo um único executável estático, capaz de usar o driver que já está na máquina.

O repositório inclui uma demonstração Vulkan de ponta a ponta que carrega o Vulkan ICD original do host, executa um compute shader incluído no repositório e grava a saída em um PNG. A glibc nunca é carregada como uma segunda libc; suas importações são direcionadas a adaptadores sobre a musl, e as funções não implementadas são stubs que abortam com o nome do símbolo e da versão. Exceções de C++, os quatro modelos de TLS e o versionamento de símbolos são tratados na fronteira entre as bibliotecas.

O projeto é exclusivo para Linux e carrega cada imagem uma única vez: dlclose tem êxito, mas não descarrega a imagem. A cobertura é testada no CI carregando as bibliotecas compartilhadas dos 1000 pacotes de bibliotecas Debian mais instalados nas duas arquiteturas.

Recursos principais

  • 01Oferece uma API dlopen/dlsym no estilo dlfcn para binários totalmente estáticos com musl.
  • 02Inclui seu próprio carregador ELF para x86-64 e aarch64.
  • 03Faz a ponte das importações da ABI da glibc para o runtime musl já existente no processo.
  • 04Carrega os drivers Vulkan ICD do host sem precisar de um container ou AppImage.
  • 05Inclui um binário pré-compilado de demonstração Vulkan que grava um PNG usando um compute shader.

Casos de uso

  • Distribuir um único binário Linux estático que precise do driver Vulkan ou OpenGL do host.
  • Executar cargas de trabalho de computação ou gráficos na GPU a partir de um aplicativo estático com musl.
  • Carregar bibliotecas compartilhadas compiladas com glibc em um programa estático com musl, sem incluir uma distribuição Linux.
  • Estudar a implementação de um carregador ELF em espaço de usuário e de uma ponte de ABI entre glibc e musl.

Início rápido

  1. 1

    Baixe o binário pré-compilado da demonstração Vulkan na página de releases

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

    Torne o binário executável

    chmod +x vulkan-x86_64
  3. 3

    Execute a demonstração para gerar um PNG de 512x512 usando o driver Vulkan do host

    ./vulkan-x86_64 hello.png

Antes de usar

  • Disponível apenas para Linux nas arquiteturas x86-64 e aarch64.
  • É necessário ter um driver Vulkan instalado no host para que a demonstração de GPU funcione.
  • Ainda é uma abordagem experimental e de nicho para carregar bibliotecas do host vinculadas à glibc.

Tópicos

Perguntas frequentes

O que é solo?
Um carregador de .so no estilo dlfcn que permite a um binário Linux totalmente estático com musl carregar os drivers de GPU do host ligados à glibc, como Vulkan ICDs. SoLo resolve um problema específico de implantação: um executável totalmente estático ligado à musl normalmente não consegue usar dlopen() para carregar os objetos compartilhados de drivers de GPU instalados no host, que geralmente são compilados com glibc. SoLo oferece uma API no estilo dlfcn, implementada com seu próprio carregador ELF para x86-64 e aarch64, além de uma ponte de ABI da glibc construída sobre o runtime musl do processo. O resultado continua sendo um único executável estático, capaz de usar o driver que já está na máquina.
solo é gratuito? Qual é a licença?
solo é open source sob a licença MIT. Confira os termos da licença antes de usá-lo em produtos comerciais.
solo ainda é mantido?
Manutenção ativa. O último commit de solo foi em 29 de set. de 2026.
Para que posso usar solo?
Distribuir um único binário Linux estático que precise do driver Vulkan ou OpenGL do host. Executar cargas de trabalho de computação ou gráficos na GPU a partir de um aplicativo estático com musl. Carregar bibliotecas compartilhadas compiladas com glibc em um programa estático com musl, sem incluir uma distribuição Linux. Estudar a implementação de um carregador ELF em espaço de usuário e de uma ponte de ABI entre glibc e musl.
Como instalar solo?
Baixe o binário pré-compilado da demonstração Vulkan na página de releases: curl -LO https://github.com/pg83/solo/releases/latest/download/vulkan-x86_64 Torne o binário executável: chmod +x vulkan-x86_64 Execute a demonstração para gerar um PNG de 512x512 usando o driver Vulkan do host: ./vulkan-x86_64 hello.png
Onde consigo solo?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/pg83/solo

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados