Вместо введения
В феврале 2021 года, я купил себе новый ноутбук. Ну и как это обычно бывает, разумеется я решил поставить на него основной ОС Linux. Почему не Windows? Потому что. Узкоспециализированным софтом по типу фотошопа не пользуюсь, минимум что мне нужно от системы - скорость и наличие в ней IDE и браузера с эксплорером, ну и чтобы от батареи долго работало. Если винда и подходит по первым пунктам, то вот с последним беда. Поэтому я приступил к поиску дистрибутива.
Выбирал долго. Искал такой дистр, чтобы его поставить, настроить и забыть. Спустя 2 дня усердного гуглинга, выбор пал на Arch, все пакеты, нужные мне там были, единственно смущала systemd, но я на тот момент из альтернатив знал только Gentoo, поэтому просто смирился, да и работа не ждет, пора ставить систему.
Вечером я просто пролистывал ленту и случайно наткнулся на neofetch Void`a. Тогда я вообще не знал об этом дистре, а неофетч понравился, картинка красивая, зеленая. Загуглил (лучше бы я этого не делал).
Почему Void
Читая описание я прям воодушевился! Просто не верил своим глазам: разработан с нуля, с супер-быстрым пакетным менеджером xbps (тоже с нуля), система инициализации runit, rolling release - одним словом супер. Прям то, что доктор прописал, все для меня подходит, подумал я перешел на вкладку Downloads. Arch уже был благополучно забыт...
Но вот незадача, что выбрать, неизвестную (мне тогда) musl libc или старую добрую glibc. Я смутился и опять полез в вики, благо там была отдельная ссылка про эту библиотеку.
musl is lightweight, fast, simple, free, and strives to be correct in the sense of standards-conformance and safety.
Прочитал я, и забыв обо всем скачал base версию дистрибутива на musl, заодно прихватив с собой lxde версию, чисто по приколу с лайв режима пощупать.
Первые "звоночки"
Запустившись с лайв режима в lxde я увидел это:
Не знаю честно говоря, что это был за баг и баг ли это был вообще, но это меня даже не насторожило. Дальше все было нормально, загрузил терминал, потыкал xbps, понял что немного неудобно для операции поиска вводить xbps-query, а для установки xbps-install. В последствии уже привыкаешь, чуть ли не на автоматизме этой утилитой пользуешься.
Накатил базовую систему, сделал памятное фото tty и начал настраивать линукс.
В качестве оконного менеджера выбрал i3wm, ведь тайлинг, да еще и на ноутбуке - удобно! Плюс, что он много есть не просит и после всех настроек, из 8 гигов оперативки, система, с запущенным firefox'ом (25 вкладок) съедает всего 2.7 гигабайта. По итогу получилось вот так:
А теперь те самые звоночки. Захотел запустить Visual Studio Code (он у меня уже был установлен, и при установке ошибок не было), до необходимости его не открывал, а расширения решил потом поставить. Но надо бы доделать проект, я открываю rofi, нахожу там code-oss, запускаю и...ничего. Думал, что надо чуть-чуть подождать..подождал минуту, две...десять минут. Посмотрел логи, а там странная ошибка: Warning: 'app' is not in the list of known options, but still passed to Electron/Chromium. Пошел гуглить, вроде ничего страшного, это даже не особо, то и ошибка, он должен загрузиться. Но я проверил, он даже на милисекунду не открывался. Тогда то я и решил воспользоваться xbps-src. Этот скрипт позволяет, как я понял, собрать пакет из исходников для моей системы. Собирал долго, в конце концов получив тонну непонятных ошибок. А время идет, пришлось поискать альтернативу вскоду, потому что, как позже выяснилось, он не может быть собран для musl. Atom к слову вообще отсутствовал в репозитории. Из 10 предложенных альтернатив, загрузился только codelite, но это уже совсем не то..
И такая история - это капля в море ошибок несовместимости, как следствие, я чувствовал себя словно в клетке. Захотел Google Chrome? Он не может быть собран для musl, пользуйся Chromium'ом, без гугл-аккаунта. Как альтернатива - firefox. Захотел Github-Desktop? Он не работает. Что делать? Бежать искать альтернативу. Раз за разом наблюдая пустой вывод команды xbps-query -Rs <название-искомого-пакета>, надеясь, что следующие поиски дадут хоть какой-нибудь результат...
В таком адском режиме я провел 5 месяцев, при неудаче успокаивая себя тем, что сама система работает быстро и безотказно (как с glibc), а значит можно жить... Не работает пакет? Переустанови и перезагрузи компьютер. Опять не работает? Ищем недостающие библиотеки в гугле или ищем инфу по ошибке на мертвом реддите воида, потому что больше негде. К слову информации по дистрибутиву в интернете очень мало, и если я и фиксил проблему быстро, то это не более чем простое везение. За это время я перекопал горы конфигов и библиотек, даже пытался собирать ПО из исходников (естественно безуспешно, потому что не хватало glibc).
В какой-то момент я поставил gcompat, но он не работал должным образом. Сайт альтернатив, постоянно занимал первую вкладку браузера. Естественно после установки-удаления пакетов скапливалось очень много хлама, хорошо, что есть xbps-query -O (показывает "осиротевшие пакеты", которые ставятся, как зависимости, а потом просто занимают место на диске)... Очень редко когда установленный софт начинал работать корректно и сразу... По итогу я стал будто параноиком, первое, что приходит в голову, при какой либо ошибке: "musl!"
Заключение
Прямо сейчас я делаю загрузочную флешку с дистрибутивом Void linux на базе glibc. На виртуальной машине, все программы, в которых я столь долго себе отказывал, заработали должным образом. Борьба окончена. Все необходимые файлы, конфиги и проекты сохранены на внешнем жестком диске. Так же ждет своей очереди скрипт, который был написан с целью вернуть компьютер в "исходное" состояние, как будто я не удалял систему... Void Linux - прекрасный дистрибутив, он и правда быстр и легок, а xbps - это самый быстрый пакетный менеджер из всех, которые я когда либо встречал (и если привыкнуть к его особенностям, то и самый удобный). Но musl... Уж лучше подождать несколько наносекунд или понаблюдать за warning'aми в консоли, чем бороться с несовместимостями и отказывать себе снова и снова в любимом софте. Если надумали поставить Void Linux, не трогайте musl.
P.S. К слову, я вообще первый раз такие статьи пишу. Надеюсь, что кому-нибудь это поможет не допустить той ошибки, которую допустил в свое время я.
Комментарии (23)
lrrr11
21.08.2021 09:49+12а все очень просто. Glibc добавляет свои расширения, которых нет в стандарте POSIX, которому следует musl. Вот из-за использования этих расширений софт и не компилируется.
Что характерно, в большинстве случаев они в общем-то не нужны, и добавлены просто потому что у разработчика, использовавшего дистр с glibc, и так скомпилировалось. Такие дела.
Разработчикам на заметку: компиляйте под musl. Ваш софт потом и в контейнерах с alpine заведётся, и в макоси (может быть), и дебажить его будет гораздо легче.
Loggus66
21.08.2021 10:42+10Искал такой дистр, чтобы его поставить, настроить и забыть
выбор пал на Arch
неофетч понравился, картинка красивая, зеленая
Жжош. Придумал себе проблем на пустом месте из-за картинки neofetch и описания идеала libc.
hogstaberg
21.08.2021 10:49+3А какой такой сакральный смысл в самом быстром
(и если привыкнуть к его особенностям, то и самом удобном)
пакетном менеджере, когда даже чуть менее быстрые конкуренты бОльшую часть времени на скачивание пакетов тратят, а не распаковку и установку?
Chupakabra303
21.08.2021 11:26+1OpenWRT по умолчанию тоже использует musl. Как-то для одного софта под ARM пришлось собирать образ с glibc, благо в параметрах сборки можно легко переключиться на glibc.
amarao
21.08.2021 12:45+5Альтернативы glibc обычно нужны, если считаются байты флеш-памяти. Если вы сами себе что-то компилируете на машине, то вы а-приори используете больше места на диске, чем если бы использовались бинарные пакеты (т.к. нужны header'ы и куча -dev зависимостей).
В целом, как развлечение - why not, но на рабочую машину я бы такое не рискнул пробовать.
lioncub
21.08.2021 13:00А Alpine Linux вы рассматривали? apk пакетный менеджер его сильно медленный?
unsignedchar
21.08.2021 15:33+2Скорость пакетного менеджера - это, пожалуй, самое последнее, на что нужно обратить внимание при выборе дистрибутива.
dartraiden
24.08.2021 01:33Более того, скорость пакетного менеджера порой можно удвоить, если просто изменить алгоритм сжатия пакетов.
Разработчики Ubuntu начали перевод deb-пакетов на использование алгоритма zstd, который позволит почти в два раза увеличить скорость установки пакетов
megahertz
21.08.2021 16:22А нельзя для проблемного софта вернуть glibc? Такое иногда встречается в образах на Alpine, когда без подтягивания glibc не заводится определенный софт. Большинство ведь не особо парятся по поводу того, что у них в системе соседствуют и Qt и GTK, зачастую еще и нескольких версий сразу.
unsignedchar
21.08.2021 19:21А нельзя для проблемного софта вернуть glibc?
В chroot можно развернуть софтину вместе со всеми зависимостями.
akaAzazello
21.08.2021 19:19+3Можно вас лишь поздравить - вы действительно нашли дистр Linux'a, который не работает нормально на ThinkPad X230 ;) Я думал, такое невозможно!
RCrypt-mrx Автор
21.08.2021 20:10Скорее даже не дистр, а реализацию. На данный момент, уже установил Void на базе glibc. Разницы в скорости системы не заметил, зато софт вообще любой ставится и запускается без каких-либо проблем)
akaAzazello
21.08.2021 20:17Я рад, что вы приняли разумное решение отказаться от исключительно embedded-решения на машине класса ноутбук. Наслаждайтесь работой этой неубиваемой машинки :) А musl libc оставьте для чего-то вроде lattepanda ;)
KislyFan
21.08.2021 19:44+3Вот за что я люблю *nix сообщество, так это за умение создать самому себе проблему.. просто потому что "захотелось странного", а потом с гордостью рассказывать об этом опыте
JerleShannara
21.08.2021 23:42musl живёт в мире embedded и запуска линукса на одном ядре Cortex-A8, а то и чего более древнего. Ставить его на что-то мощнее Pentium-2 — затея глупая.
edo1h
24.08.2021 03:47эээ… разве cortex a8 не на голову производительнее p2?
JerleShannara
24.08.2021 04:05Смотря какой, если брать последние лебединые песни 10-11 годов, то может раза в два и будет шустрее, если брать 400-800мгц, то обычно наравне идут.
mistergrim
22.08.2021 01:13Крайне интересно, что же в итоге с последним вопросом, насчёт батареи (сколько её ресурса было истрачено за пять месяцев, я уж молчу).
RCrypt-mrx Автор
22.08.2021 13:19С батареей все мутно, заряжается час, держит полтора-два (в винде разряжалась за 20-30 минут). Она была изношена изначально на 30%, а сейчас уже 43%. Но я забил на это, т.к. буду покупать новую.
sargon5000
22.08.2021 13:05"В таком адском режиме я провел 5 месяцев". Уважаю! Упорства автору не занимать. Но я бы так делать точно не стал. Жизнь коротка, и растрачивать ее так бездарно...
FFiX
musl далеко не во всём быстрее glibc, много где он наоборот намного медленнее. Но последний заметно толще, поэтому musl очень распространён во всяком embedded, в контейнерах (популярный Alpine основан на нём), да и статические сборки часто делают именно на его базе.
Вот пример (несколько устаревшего, но свежего сходу не нашёл) сравнения нескольких реализаций стандартных библиотек: https://www.etalabs.net/compare_libcs.html