Профиль: Аноним (вход | регистрация) неRU opennet.me  
The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Проект SoLo развивает загрузчик системных so-библиотек для полностью статических Linux-программ

20.08.2026 16:59 (MSK)

Опубликован проект SoLo, позволяющий полностью статическим Linux-программам, собранным с musl, загружать через dlopen() установленные в системе glibc-библиотеки, в первую очередь GPU-драйверы. Обычно статическая сборка несовместима с драйверами Vulkan и OpenGL, которые дистрибутивы поставляют в виде разделяемых библиотек, собранных с glibc. SoLo снимает это ограничение при помощи встроенного в исполняемый файл загрузчика ELF и прослойки, транслирующей вызовы glibc в musl-рантайм процесса — сам glibc в процесс не загружается, второго libc в процессе не появляется. Код написан на C++ и распространяется под лицензией MIT.

В репозиторий входит наглядный пример: статический исполняемый файл, в котором нет ни интерпретатора, ни динамической секции, штатным для Vulkan способом находит установленный в системе драйвер, загружает его вместе с зависимостями, выполняет вычислительный шейдер и сохраняет результат в PNG. В рамках непрерывной интеграции пример проверяется на Alpine, Fedora и Ubuntu с пакетами Lavapipe из штатных репозиториев этих дистрибутивов. Подход уже используется на практике — им формируются релизные сборки эмулятора терминала Shitty.

  1. Главная ссылка к новости (https://github.com/pg83/solo...)
Автор новости: Аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/66103-solo
Ключевые слова: solo
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (26) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 17:08, 20/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    "Tested on AMD radv, radeonsi, Intel, and NVIDIA GPUs under Linux, on Apple M1 under Asahi Linux, on Android under Termux, and on WSL with Mesa's dzn driver over Direct3D 12" - это что, теперь можно 1 бинарь для всего этого барахла изготавливать?
     
     
  • 2.3, Malinovsky (?), 17:13, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ога, да, а еще он на несколько мегабайт может быть легче - превед glibc оверхеду и следственно пожиранию оперативной памяти.
     
     
  • 3.7, sage (??), 17:25, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Где оверхед от glibc? Оно в одном экземпляре хранится на диске, и в одном экземпляре в оперативке, на все загрузившие её процессы.
    Или у вас миллион контейнеров на одном хосте с разными системами? Ну тогда удачи весь софт пересобрать с musl, и грузите копии всего статического кода.
     
     
  • 4.11, Malinovsky (?), 17:30, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Вы наверное бинарники никогда не видели какой размер имеют без всякой статики бинарники glibc, отчего и сам Void musl меньше памяти требует. В общем и целом это в процентах довольно значительный объем когда цель - сделать рабочее окружение для сборки из исходников без лютого избытка оперативной памяти, прямо как в наши дни когда память уже скоро буквально будет на вес золота, а пока лишь половину от его стоимости имеет.
    Я со сборкой из исходников много лет опыта имею и Void musl прекрасно себя проявил. По крайней мере на моем компе с 12900K когда нет нужды делать вид что glibc хоть чем-то интересна на домашнем компе, кроме сборки OpenOffice. Когда я его трогал последний раз он был намертво приколочен к glibc. Это был спортивный интерес. Меня вполне устраивает LibreOffice.
     
     
  • 5.16, sage (??), 17:36, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Лень лезть смотреть сколько там занимают сошки от glibc, на какой-нибудь убунте. Слоп-машина такое выдает:

    > A standard compiled, unstripped libc.so shared library is roughly 10 MB to 12 MB, while a stripped, release-ready version drops down to about 2 MB to 3 MB. A full installation package (which bundles locales, international character converters, and timezone databases) generally requires between 20 MB and 45 MB of disk

    Вам символы и локали не нужны? Или даже 2-3 Мегабайта жалко?

     
  • 5.18, Аноним (18), 17:39, 20/08/2026 Скрыто ботом-модератором     [к модератору]
  • +/
     
  • 5.19, Аноним (19), 17:41, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Глибцы не настолько жирнее musl, чтобы на 8+ гигабайтных системах оверхед чувствовался. Это всё ещё экономия на спичках, пока в репозиториях валяются брёвна на Java, JS и Python.

    А вот если взять одноплатник с гигом памяти или печатную машинку на core2duo (или что там, днищебуки с впаянной рамой, где могут и 4 гига оставить?), тогда да.

    Днищебукам нужны решения с упором на -Os в CFLAGS, musl и, возможно, zram/zswap. Вроде, armbian таким занимался.

     
  • 4.12, Аноним (19), 17:31, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >Или у вас миллион контейнеров на одном хосте с разными системами?

    Вот это. Чтобы надёжно собирать софт под любой линукс, надо статическую либц, либо собирать на slackware. Собирают, как правило, на ubuntu. Результат сваливается с мисматчем глибцов - и тут придётся по манам LFS собирать глибцы, тулчейн, а потом ещё и либы.

    Так как глибцы нормально не пришпандорить, да потом ещё и с глибц мисматчем не прилинковаться к нужным либам, вот эта штука позволит собирать только бинарник, а сошки тянуть прилинкованные к глибцам.

    Можно будет раздавать софт вне контейнеров.

     
     
  • 5.20, sage (??), 17:42, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > надо статическую либц

    Это НИКОГДА не надо делать. Для сборки под старые системы нужно нормальный кросскомпилятор использовать, который грузит системную glibc, без использования новых функций. Если контейнер крутит софт, который от сишной либы не зависит, то с ней вообще линковаться не надо, ни динамически, ни статически.

    (но, конечно, from scratch лень делать - это же работать надо)

     
     
  • 6.22, Аноним (22), 17:49, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Это очень хорошо, когда под конкретную старую систему собираешь, а если просто хочешь, чтобы крутилось по возможности везде?
     
     
  • 7.26, sage (??), 17:57, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Оно и будет работать везде, что новее чем эта старая система. Если только сами не придумаете как себе сломать ABI. Смысл таргетиться на предыдущие версии ядра и glibc в том, что старые системные вызовы не удаляются и функции из glibc остаются. Да, их поддержка на новых системах будет работать через костыли совместимости (уже встроенные в систему), но альтернатива только поднимать требования к системе, и собирать под неё.
     
  • 3.25, Аноним (25), 17:56, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > превед glibc оверхеду

    Musl уже научился не тормозить софт так, что им пользоваться невозможно? Вот уж где оверхед.

     
  • 2.5, sage (??), 17:19, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Видимо, для всего что может загрузить твой бинарь, предоставить функции ядра, и с чем может работать musl.

    То есть винда и макось мимио, а для большей части линуксов это не слишком полезно.

    Точнее смысл не в том, чтобы запускать бинарь. А в том чтобы делать полностью статичную линковку, но с возможностью обращаться ко внешним so-шкам.

     
     
  • 3.14, Аноним (19), 17:33, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    >То есть винда и макось мимио

    В теории, musl как раз внутри APE живет на обоих. Если сделать эмулятор vcrt и что там в макоси, можно APE линковать одновременно и к линуксовым либам, и не к линуксовым.

     
     
  • 4.23, sage (??), 17:49, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    На винде не работают линусовые so-шки. Сабж предназначен как раз для загрузки их вулкана.

    Чтобы оно работало на винде нужно как минимум PE загрузчик DLL поддержать. И dyld-ов на маке.

     

  • 1.2, Malinovsky (?), 17:11, 20/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Shitty забавный терминал, хоть и немного нестабильный после сборки, но забавно как это выглядит. Чтобы уменьшить размер загружаемого файла можно собрать его с musl и при необходимости он заработает на glibc с со всеми подушечками где надо установленными, чтобы программа ни дай бог не грохнулась. На Musl все работает или падает и третьего не дано. Много раз приходилось чинить в musl версии Void исходники, чтобы все собралось и заработало. Вроде это все и прикол, но musl давно пора в массы и не только на роутерах с OpenWRT.
     
     
  • 2.4, pg83 (ok), 17:14, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > хоть и немного нестабильный после сборки

    Ну ты шли ишью в github, автор оперативно исправляет!

     
     
  • 3.8, Malinovsky (?), 17:26, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Никогда таким не занимался. Вот ежели баг с железом, тогда в багзиллу пишу, но это считанные разы было. Когда у тебя Gentoo или еще что-то из исходников собрано разработчики ядра тебя вежливо посылают лесом. И все. Потому что им нравится когда ядро собрал их местный Peter Phil, а всем остальным они не доверяют. Я даже драйвер не просил исправить для Creative AE-7, потому что там сходу - пришлите Creative AE-7 мне в США или изучите мега адовый дебаг.
    У меня есть эмуляторы терминала, которые работают. Вот если пойду мады гонять с tintin++ или вроде того, тогда ну может быть. Но меня устраивает скорость работы Wayfire 0.11 на вулкане с UHD770. Я просто чую что под капотом у shitty пачка багов крутится. Их и без меня должны распознать. Я уже на внутреннем ощущении определяю работает ли программа нормально и обычно все сходится. Ну потому что заедания в доли секунды даже на древних эмуляторах не бывает. А пока он не прикрутит нормальную опцию копирования текста как в konsole или lxterminal его shitty останется не у дел. Потому что мне что, заморачиваться с буфером обмена отдельно только ради копирования текста? Я не настолько упертый. Собрать из исходников могу, но упарываться не вижу смысла.
     
     
  • 4.10, pg83 (ok), 17:29, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну напиши мне сюда, я починю. А что не так с буфером обмена?
     
     
  • 5.13, Malinovsky (?), 17:32, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    Ну он работает только внутри терминалов через Ctrl+Insert, Shift+Insert. Вставить скажем в браузер или в kate не получится, а это основной пример когда буфер обмена работает. Большинство эмуляторов терминалов сломаны на деле. Я потыкаю может новую версию и скажу, но мне это без особой надобности. Просто буду иметь ввиду.
     
  • 2.9, sage (??), 17:27, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    > все работает или падает и третьего не дано

    А вам хочется чего-то промежуточного? Чтобы оно вроде запускалось, но потом в случайные моменты падало по непонятным причинам?

     
     
  • 3.24, Malinovsky (?), 17:56, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/
    По-моему и так понятно что подпорки от glibc это как раз оно. Меня вполне устраивает musl, который если падает, то падает, а не делает вид что все нормально. Это как винда, которая делает вид что ваша мышка работает когда на деле там идет дикий спам ошибок и мышь почти сдохла. На винде это выглядит как некоторые глюки мыши, а на линуксе курсор прыгает в разные стороны. Так и так мышка практически сдохла. Сенсор накрылся. Делать с ней что-то это все равно что потратить 200 тысяч рублей на уколы собачке, которой 16 лет и тогда она может быть поживет еще немножко. Я прекрасно понимаю что например кошечек выживает сколько-то на какую-то площадь, даже в городе, а не то что я злой, потому что не бегаю спасать кошечек целыми днями. Они плодятся с большим запасом. Это их стратегия выживания. У людей, точнее у человечества во главу угла был поставлен разум. Мне аргументы уровня девочек с большими наивными глазами, которые увидел хирурга за работой не очень хочется разбирать ан атомы, чтобы стало понятно, что вот это уже край и дальше начнется совсем деградация. И во этот плюшевый подход это glibc. Он нравится маленьким девочкам. А musl просто делает то как оно сказано ему делать и не выдумывает. Разработчик сказал - он сделал. Мне нравится отсутствие собственной жизни приложений. Это как раз то чего не должно быть, поэтому я всеми руками за musl.
     

  • 1.6, Аноним (6), 17:24, 20/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ещё один нейрослоп-проект, класс!
     
     
  • 2.15, pg83 (ok), 17:35, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +/



      ┌─────────────┐
      │             │
      │   ███ ███   │
      │  █████████  │
      │ ███████████ │
      │█████████████│
      │█████████████│
      │ ███████████ │
      │  █████████  │
      │   ███████   │
      │    █████    │
      │     ███     │
      │      █      │
      │             │
      └─────────────┘



     

  • 1.17, Xasd1 (?), 17:39, 20/08/2026 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Код написан на C++

    а на нормальном языке программирования (C) почему было не написать?

     
     
  • 2.21, pg83 (ok), 17:43, 20/08/2026 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Жизнь слишком коротка, чтобы писать еще одну хештаблицу для С. Вот завезут в стандарт - тогда поговорим.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2026 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру