Однажды я решил попробовать Linux и пришёл в ужас от того, насколько данный класс операционных систем отсталый, несостоятельный и проблемный. Что тут говорить: разработчики современных дистрибутивов Linux остались практически на том же уровне, что и три года назад. Новые ядра поставили (сломав совместимость со старыми драйверами и оборудованием), системные библиотеки обновили (сломав совместимость со старым софтом), сменили обои на рабочем столе — и готово. И так устроены практически все дистрибутивы Linux.
А потом я начал создавать свой дистрибутив под названием Chimbalix, потому что я бы не выдержал снова заниматься настройкой ОС после переустановки. Да, Linux тоже нужно переустанавливать, и даже чаще, чем Windows, потому что образовавшийся при обычном использовании ад зависимостей сам себя не рассосёт. Спасибо линуксоидным репозиториям, пакетным менеджерам и общей технической непродуманности, за накапливающийся хаос и проблемы в системе пользователя.
По сей день я не видел ни одного дистрибутива Linux, который смог бы превзойти Chimbalix в плане пользовательского опыта и проработанности в реальном использовании. Каждый раз, пробуя прочие дистрибутивы, я испытываю те же чувства, что когда-то заставляли меня бежать назад на Windows — острое желание поскорее вернуться в комфортную среду. Но вернёмся к истории.
Изрядно поработав над Chimbalix, я почувствовал необходимость решить проблему распространения программ. Так родилась спецификация PortSoft, а после был рождён самодостаточный формат распространения софта под названием Installer-SH. Как видно на скриншоте ниже, количество софта в PortSoft уже давно вышло за рамки пары тестовых программ.
Изначально Installer-SH разрабатывался исключительно для Chimbalix. Но, начиная с версии 1.8, влияние формата распространилось на остальные дистрибутивы Linux. А с недавнего времени Installer-SH работает даже в среде FreeBSD.
На данный момент формат Installer-SH развивается силами одного человека. Это позволяет мне сохранять чистоту архитектуры и быстро внедрять экспериментальные фичи, не вступая в бесконечные дискуссии о стандартах.
Как можно заметить, я уже работаю над Installer-SH v2.7 и решил поэкспериментировать с искусственным интеллектом при разработке новой версии самодостаточного установочного пакета. Однако искусственный интеллект недолго продержался в разработке и довольно быстро начал склонять меня к тому, чтобы я поскорее выпустил релизную версию.
А ведь я не так уж и много сделал за то время, когда привлекал ИИ к работе над проектом... Обычно я вношу гораздо больше улучшений и исправлений при выпуске новых версий Installer-SH. Раз уж искусственный интеллект уже сдался, назвав мой проект одним из самых надёжных и продуманных инструментов для Linux, то перейду к иному способу разработки.
Теперь я снова вернусь к разработке, опираясь на собственные ощущения и идеи по совершенствованию проекта. Последние исправления преимущественно затрагивали комментарии, проводилось наведение порядка в исходном коде, а также была существенно переработана функция обновления меню после установки и удаления программ. Теперь обновление меню происходит с помощью XDG-инструмента под названием update-desktop-database. Больше никаких перезапусков панелей рабочего окружения.
Также стоит отметить переработанное окно справки, вызываемое аргументом help в терминале. Описания были обновлены, а сокращения приведены к единой форме из трёх символов.
Среди изменений, улучшающих пользовательский опыт, можно отметить перенос ярлыков обслуживания в отдельную категорию Service. Там находятся ярлыки удаления и открытия каталога с программой. В этот момент у меня появилась одна интересная идея.
Как некоторые могли заметить, у меня уже довольно много программ установлено в формате Installer-SH и каждая — со своим уникальным разделом в меню. Не сказать, что это проблема, но если пользователю нужен десяток разных версий одной программы, то у него будет целый десяток уникальных разделов в меню.
Пока программы в формате Installer-SH можно было пересчитать по пальцам — всё выглядело хорошо и удобно. Но сейчас у нас десятки разных программ в этом формате, и когда их станут сотни и тысячи, это может привести к проблемам. Поэтому я внесу одну незначительную правку в одну строку исходного кода, которая окажет значительное влияние на всю структуру установленных программ.
Похоже, получилось не совсем так, как хотелось бы.
У меня каждая программа создаёт собственные разделы в меню и ярлыки, чтобы не мешать другим программам и не вызывать конфликтов. Судя по всему, нельзя просто взять и объединить разные версии одной программы в один раздел меню, без вмешательства в уже установленное ПО.
Хотя есть у меня тут один нюанс. Возможно, получится обойтись малой кровью...
И это отлично сработало. Теперь одноимённые программы будут находиться в одном разделе, а сервисные ярлыки расположились в своём уголке и не мешают пользователю при навигации по меню.
Это называется работой над улучшением пользовательского опыта. Именно это и делает мой самодостаточный формат распространения софта под названием Installer-SH серьёзным инструментом, решающим реальные проблемы Linux, пока остальные бесконечно форкают (клонируют под новыми именами с доработками) изначально несостоятельные репозитории и пакетные менеджеры.
Да, это всё требует поддержки вложенных категорий меню со стороны рабочего окружения согласно спецификациям XDG, что является проблемой. Многие дистрибутивы игнорируют стандарты вложенности меню, из-за чего список приложений превращается в неструктурированный поток ярлыков. Это усложняет навигацию, особенно когда установлено много профессионального софта или разных версий одной программы.
Спецификации XDG существуют не первый год, и то, что разработчики в 2026 году не осилили вложенные категории меню в своих дистрибутивах Linux — это позор и некомпетентность. Так быть не должно. Это крайне плохой пользовательский опыт, когда человек открывает меню приложений и видит кашу из ярлыков, разбросанных по экрану как попало.
Современный подход с централизованными репозиториями кое-как работает при наличии быстрого интернета, если сервисы исправны и у пользователя нет ограничений со стороны провайдера, но в автономных условиях всевозможные пакетные менеджеры вроде Snap, Flatpak и APT становятся недееспособными от слова «совсем». Тем временем Installer-SH сохраняет работоспособность даже в полной изоляции от любых сетей, но при этом никто не запрещает распространять софт в формате ISH, используя репозитории. Installer-SH — это просто другой уровень надёжности и сохранности ПО, недосягаемый для современных репозиториев.
И это действительно серьёзная проблема, потому что невозможно подстроиться под операционные системы, находящиеся в статусе перманентного хаоса и функциональной ущербности. Даже если бы я попытался поддерживать неполноценные рабочие окружения, работающие с нарушениями спецификаций XDG, это ни к чему хорошему не привело бы. Увы.
Я думал поработать над улучшением совместимости Installer-SH с разными ОС, но работать, по сути, не над чем. С моей стороны всё работает как задумано, а отсутствующие вложенные категории в меню приложений в сторонних дистрибутивах Linux — проблема сугубо разработчиков, не соблюдающих спецификации.
Эта ситуация бесит, особенно учитывая, как разработчики дистрибутивов Linux заявляют на официальных сайтах, мол, их дистрибутивы якобы дружелюбны и просты в использовании... Но останавливаться на этом смысла нет, надо двигаться дальше. Вопрос только: куда? Что делать дальше?
Я уже не знаю, куда дальше улучшать самодостаточный установочный пакет Installer-SH. Он просто работает.
Как улучшать то, что и так отлично работает?
Точно, в программе удаления можно убрать лишние две строчки исходного кода, которые больше не используются из-за смены принципов обновления меню приложений.
Ну а дальше осталось только упаковать какое-нибудь приложение, разработанное компетентными разработчиками, не требующее тысячи всевозможных зависимостей от системы и провести тестирование в реальных условиях.
Похоже, найти полезную, бинарно независимую программу, которую можно было бы протестировать в широком диапазоне дистрибутивов Linux, будет затруднительно. Из-за специфики философий Open Source и Linux, где софт иногда распространяют только в виде исходного кода, а одна библиотека может использоваться десятками разных приложений, найти полезную и независимую программу для Linux крайне сложно.
Так что я решил взять крайне простую игру 2048 в терминальном исполнении, но, присмотревшись внимательнее, обнаружил зависимость от GLIBC 2.34, что печально.
Делать нечего, придётся скомпилировать программу самому, по-человечески, потому что имеющиеся исполняемые файлы для Linux непригодны для распространения по причине характерного «ада зависимостей».
Вот уже совсем другое дело! Конечно, размер исполняемого файла увеличился с 18 до 758 килобайт, но разве это проблема? Совершенно нет. Это даже для компьютеров нулевых годов не было проблемой, потому что уже были HDD на десятки гигабайт. Зато теперь программа полностью самодостаточна и не требует наличия специфических версий системных библиотек, а значит, потенциально может запуститься практически в любом дистрибутиве Linux.
Игра увлекательная, но это как-то несерьёзно для развёртывания целого установочного пакета. Хотя если Installer-SH даже с этим справится, то это лишний раз подтвердит состоятельность моего самодостаточного формата.
Немного изучив исходный код игры, я пришёл к выводу, что специализированный лаунчер формата Installer-SH нет смысла применять для запуска данной игры, разве что оставить его в качестве прослойки для перехвата кода ошибки, если что-то пойдёт не так при запуске программы. Иначе программа тихо закроется без моей прослойки ISH, никак не оповестив пользователя об ошибке.
А ещё обнаружилось несколько функций, активируемых аргументами запуска. Для всего этого нужно будет создать ярлыки. Негоже заставлять пользователя ковыряться в терминале, когда всё это можно реализовать в виде удобных ярлыков.
Единственное мне не нравится как программа закрывает терминал при выходе, а это значит, что игрок не увидит свой результат в конце игры если терминал сразу закроется.
Добавляем простенькое условие в конец вспомогательного скрипта для запуска приложения.
И теперь игра не закрывается самопроизвольно. Пусть это и мелочь, но достойная внесения в основной исходный код установочного пакета, ибо приносит реальную пользу при использовании. Именно на таких реальных случаях использования и разработан мой формат распространения софта, что и делает его гораздо лучше прочих способов распространения софта для Linux.
Ну а в процессе заполнения информации о программе в установочном пакете Installer-SH я запнулся на поле URL. В итоге пошёл искать разработчика и нашёл его репозиторий на GitHub, а там явно гораздо более свежая версия игры лежит, чем та, что я достал из репозиториев Debian.
Скомпилировал последнюю доступную версию игры из исходного кода. Благо разработчик адекватный и проблем с зависимостями не было. Ну и осталось подготовить ярлыки для размещения на рабочем столе и в меню приложений. На рабочем столе размещу лишь один ярлык, но он будет содержать в себе "действия", которыми можно запустить игру в любых доступных вариациях.
Я не добавляю сюда варианты запуска вроде help и version, потому что в справке говорится про режимы запуска через терминал, которые уже реализованы ярлыками, а версия и так указана в ярлыках.
Также переключаю архиватор на системный tar вместо 7-Zip, так как исполняемые файлы архиватора весят многократно больше самой игры. Кто-то скажет, мол, архиватора tar может и не быть в каком-нибудь Linux, но у меня тогда возникает вопрос: а что такой Linux вообще может, если в нём нет даже базового архиватора tar? Это уже не операционная система по факту, там и спецификации XDG наверняка не будут реализованы. Так что это уже не моя проблема, если вдруг в системе не окажется крайне базовой утилиты под названием tar.
Окно конфигурации файлов отключаю, так как программа крайне проста и не вмешивается в домашний каталог пользователя во время работы. Нет необходимости выносить что-либо в отдельный каталог для предотвращения замусоривания.
Настроив файлы с ярлыками, я упаковал архивы с игрой. Похоже, нужно будет доработать модуль архивации, работающий в режиме tar, а то информативность страдает. Благодаря реальному использованию выявляются и исправляются такие недостатки формата Installer-SH.
Я впервые упаковываю данную игру в новый формат Installer-SH, поэтому провожу ручную проверку и тестирование собранного пакета. И только если всё будет в порядке, я проведу чистку, запустив Installer-SH с аргументом clean.
Всё работает как положено.
Теперь можно вычистить весь мусор и собрать распространяемый tar-архив с игрой в формате Installer-SH.
Итого имеем установочный архив с игрой весом всего 470 килобайт.
Эту игру, упакованную в самодостаточный Installer-SH, буквально можно разместить на дискете, и ещё останется свободное место. Хотя tar сжимает хуже, чем 7-Zip, даже так файлы игры общим размером около 860 килобайт были сжаты до 350 килобайт (program_files.tar.xz).
Около 9 килобайт ушло на архив с ярлыками и базовыми файлами самодостаточности, подготовку разделов меню и спецификации PortSoft. 88 килобайт отвелось под основной установочный файл со всей логикой программы установки, а 13 килобайт — на файл русской локализации. Как можно заметить, даже в таких суровых условиях основная часть приходится на игру, и лишь малая — на сам Installer-SH. И да, программа оценки занятого места на диске учитывает фактически занятый объем с учётом размера кластера, поэтому значения округлены с шагом 4 килобайта, даже если размер файла меньше.
Осталось загрузить самодостаточный установочный пакет игры в репозиторий GitHub. Возможно, я и использую сейчас репозиторий, но по факту программа в формате Installer-SH стоит на уровне выше репозиториев и не ограничивается ими в плане распространения.
https://github.com/Shedou/Chimbalix-Software-Catalog/releases/tag/2048c103
Данный установочный пакет вполне реально распространять даже дискетами. Причём на одну дискету влезет три таких архива. Таким образом, мне не удалось выявить серьёзных проблем в процессе использования актуальной на текущий момент версии Installer-SH, требующих срочного исправления и доработки. По идее, уже можно выпускать финальную версию 2.7. Но если подумать, у меня ведь нет актуальной инструкции по работе с установочным пакетом для разработчиков...
Точно, пока повременю с выпуском релизной версии ISH - нужно разработать инструкцию, даже если в ней по сути нет смысла. Я же разрабатываю Installer-SH таким образом, чтобы в нём можно было разобраться без каких-либо инструкций, если, конечно, есть желание разбираться. В любом случае разработку инструкции уже оставлю для другой статьи.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
Читайте далее на сайте
«Коммерсант»: Роскомнадзор начинает атаки на западных разработчиков видеоигр
Без RTGI в DOOM: The Dark Ages потребовалось бы «запечь» около 110 ГБ данных об освещении
Ubisoft предложит в игре Assassin’s Creed Black Flag Resynced переработанный паркур и бои