Repolode
pg83

pg83/solo

Загрузчик .so в стиле dlfcn, позволяющий полностью статическому бинарному файлу для Linux на musl загружать драйверы GPU хоста, собранные с glibc, например Vulkan ICD.

Звёзды
643
Форки
15
Открытые issues
15
Последний коммит
23 дня назад

Что это?

SoLo решает конкретную проблему развёртывания: исполняемый файл, полностью статически слинкованный с musl, обычно не может вызвать dlopen() для общих объектов драйверов GPU, установленных на хосте и, как правило, собранных с glibc. SoLo предоставляет API в стиле dlfcn на основе собственного ELF-загрузчика для x86-64 и aarch64, а также мост glibc ABI, реализованный поверх musl, уже работающей в процессе. В результате программа остаётся одним статическим исполняемым файлом и может использовать драйвер, уже установленный на машине.

В репозитории есть демонстрационный проект с полным циклом работы Vulkan: он загружает неизменённый Vulkan ICD хоста, запускает включённый в репозиторий вычислительный шейдер и записывает результат в PNG. glibc не загружается как вторая libc: её импорты перенаправляются на адаптеры для musl, а для нереализованных функций предусмотрены заглушки, которые аварийно завершают работу и выводят имя символа и версии. Поддерживаются исключения C++, все четыре модели TLS и версионирование символов при взаимодействии между средами.

Проект работает только в Linux и загружает библиотеки однократно: dlclose завершается успешно, но не выгружает образ. В CI проверяется совместимость: на обеих архитектурах загружаются общие библиотеки из 1000 Debian-пакетов, которые устанавливают чаще всего.

Ключевые возможности

  • 01Предоставляет API dlopen/dlsym в стиле dlfcn для полностью статических бинарных файлов на musl.
  • 02Включает собственный ELF-загрузчик для x86-64 и aarch64.
  • 03Связывает импорты glibc ABI с уже работающей в процессе средой musl.
  • 04Загружает драйверы Vulkan ICD хоста без контейнера или AppImage.
  • 05Поставляется с готовым бинарным файлом демонстрации Vulkan, который записывает PNG с помощью вычислительного шейдера.

Сценарии использования

  • Поставка одного статического бинарного файла Linux, которому нужен установленный на хосте драйвер Vulkan или OpenGL.
  • Запуск задач GPU-вычислений или графики из статического приложения на musl.
  • Загрузка общих библиотек, собранных с glibc, из статической программы на musl без включения дистрибутива в поставку.
  • Изучение устройства пользовательского ELF-загрузчика и моста glibc-to-musl ABI.

Быстрый старт

  1. 1

    Скачайте готовый бинарный файл демонстрации Vulkan со страницы релизов

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

    Сделайте бинарный файл исполняемым

    chmod +x vulkan-x86_64
  3. 3

    Запустите демонстрацию, чтобы создать PNG размером 512x512 с помощью драйвера Vulkan на хосте

    ./vulkan-x86_64 hello.png

Что важно знать

  • Поддерживается только Linux на архитектурах x86-64 и aarch64.
  • Для работы демонстрации GPU на хосте должен быть установлен драйвер Vulkan.
  • Это всё ещё нишевый экспериментальный подход к загрузке библиотек хоста, связанных с glibc.

Темы

Частые вопросы

Что такое solo?
Загрузчик .so в стиле dlfcn, позволяющий полностью статическому бинарному файлу для Linux на musl загружать драйверы GPU хоста, собранные с glibc, например Vulkan ICD. SoLo решает конкретную проблему развёртывания: исполняемый файл, полностью статически слинкованный с musl, обычно не может вызвать dlopen() для общих объектов драйверов GPU, установленных на хосте и, как правило, собранных с glibc. SoLo предоставляет API в стиле dlfcn на основе собственного ELF-загрузчика для x86-64 и aarch64, а также мост glibc ABI, реализованный поверх musl, уже работающей в процессе. В результате программа остаётся одним статическим исполняемым файлом и может использовать драйвер, уже установленный на машине.
solo можно использовать бесплатно? Какая у него лицензия?
solo распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
solo всё ещё поддерживается?
Активно поддерживается. Последний коммит в solo — 29 сент. 2026 г..
Для чего можно использовать solo?
Поставка одного статического бинарного файла Linux, которому нужен установленный на хосте драйвер Vulkan или OpenGL. Запуск задач GPU-вычислений или графики из статического приложения на musl. Загрузка общих библиотек, собранных с glibc, из статической программы на musl без включения дистрибутива в поставку. Изучение устройства пользовательского ELF-загрузчика и моста glibc-to-musl ABI.
Как установить solo?
Скачайте готовый бинарный файл демонстрации Vulkan со страницы релизов: curl -LO https://github.com/pg83/solo/releases/latest/download/vulkan-x86_64 Сделайте бинарный файл исполняемым: chmod +x vulkan-x86_64 Запустите демонстрацию, чтобы создать PNG размером 512x512 с помощью драйвера Vulkan на хосте: ./vulkan-x86_64 hello.png
Где скачать solo?
Исходный код и инструкции по установке — на GitHub: https://github.com/pg83/solo

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Движок физически корректного рендеринга в реальном времени для Android, iOS, Linux, macOS, Windows и WebGL2, рассчитанный на компактность и эффективность на Android.

20,6 тыс.2,3 тыс.C++Apache-2.0Обновлён 21 минуту назад