Почему Linux практически никому не нужен в сегменте настольных ПК и ноутбуков? Извечные проблемы с драйверами мешают сместить "плохую и ужасную" Windows? Или может пользователи все из себя глупые виндузятники, видите ли, не хотят заниматься танцами с бубном в терминале вместо того, чтобы просто пользоваться компьютером? А может людям просто нужны игры, но ведь некоторые во весь голос орут, какой там у них есть "прекрасный" Steam с "Протоном"...
На самом деле проблемы с драйверами можно решить, было бы у производителей желание, а у разработчиков Linux хоть капелька мозгов, чтобы не ломать обратную совместимость с каждым новым линуксом, к терминалу привыкать пользователь и не должен, ибо все задачи должны решать обычные приложения, ну и с играми решать проблему тоже нет смысла, разработчики игр должны этим заниматься.
Да, можно условно "решить" проблему игр через костыли под линуксом, но костыли это однозначная потеря производительности на лишние прослойки вроде DXVK и проблемы в работе, например неправильно работающее освещение в бенчмарках и играх.
Но почему так вышло, что разработчики предпочитают Windows, а не "свободный и прекрасный" Linux, какой бы "неправильной" Windows не становилась в последнее время?
Ответ на поверхности, в линуксах невозможно адекватное распространение приложений, ведь линуксоиды испокон веков проповедуют ущербные, ненадёжные и непригодные для нормального использования в Desktop сегменте репозитории.
Про извечный ад зависимостей даже говорить не буду, это классика Linux.
И так получилось, что на текущий момент (2024 год) есть лишь несколько вариантов распространения ПО для "дряхлого пингвина", первый вариант это извращение с репозиториями линуксоидными, даже если разработчик "ублажит" владельцев репозиториев, и его приложение попадёт в официальную "помойку", рано или поздно оно устареет там, и придётся извращаться со сторонними репозиториями заставляя пользователей танцевать с терминальным бубном.
Так же не забываем про массу недостатков линуксоидных репозиториев, непригодность для использования без доступа к интернету, постоянно умирающие/переезжающие сервера, необходимость предоставлять root права, да и про элементарный обман не стоит забывать, когда пользователю говорят "размер для скачивания 3.19 МБ", а по факту оно без разрешения пользователя выкачивает порядка ~720 МБ зависимостей вместо заявленных 3.19 МБ:
Вероятно кто-то всхлипнет про всякие Flatpak и ему подобные поделки, но увы, это всё такие же ущербные линуксоидные репозитории, только под другой обложкой, тот же GIMP до сих пор невозможно скачать полноценным установочным пакетом, который бы установился на ПК без доступа к интернету...
Второй вариант это адекватно скомпилировать приложение и распространять обычным архивом вместе со всеми зависимостями необходимыми для работы, например Blender, не сказать что удобно для пользователя, ведь в линуксах создание ярлыков это тот ещё геморрой на голову ввиду общей недоразвитости большинства дистрибутивов, а их придётся создавать, если хочется пользоваться приложением, да и приложения будут валяться где попало, ведь в линуксах не предусмотрено специальных мест для таких вещей.
Но есть проблема, с "дряхлым пингвином" практически никто не желает дружить, а потому и адекватных разработчиков можно по пальцам пересчитать, что действительно способны нормально собрать своё ПО, упаковать в обычный архив, и при этом не вызывать у пользователя ад зависимостей на ровном месте, а так же острое желание вернуться в гораздо более дружелюбную Windows.
Проще говоря разработка и распространение софта для Linux это сущий ад и мракобесие.
Кто-то возможно заикнётся про AppImage, но увы, это очередной линуксоидный костыль, не решение проблемы распространения ПО для Linux, такие "приложения" всё равно будут валяться где попало и как попало, причём приложение такого формата продолжает гадить в домашний каталог пользователя файлами конфигурации, ибо AppImage не хранит файлы конфигурации рядом с приложением, как заведено в среде Windows у действительно портативного ПО...
Думаете на этом проблемы AppImage закончились? Конечно нет, приложения в AppImage формате невозможно кэшировать для последующего ускорения работы, ведь при каждом запуске создаётся новая точка монтирования, и кэш операционной системы обламывается каждый раз.
Так же AppImage заставляет танцевать с бубном при наличии нескольких приложений в одном, например "Inkscape" для редактирования и "Inkview" для просмотра векторных изображений, второе уже придётся запускать танцуя с бубном в терминале, ведь это неотделимая часть приложения Inkscape.
Ну и конечно степень сжатия, хвалёный AppImage настолько неэффективен в плане долговременного хранения приложений, что Inkscape в этом формате занимает порядка 119 МиБ, когда это же приложение перепакованное из формата AppImage в формат Installer-SH занимает всего 68 МиБ места на диске, почти в 2 раза меньше:
Единственная хорошая сторона данного формата состоит в том, что он принуждает нерадивых линуксоидных разработчиков всё паковать вместе с зависимостями, да, не всегда получается у особо "одарённых", но такое явление как "ад зависимостей" с форматом AppImage значительно поубавилось.
Казалось бы, вот оно, якобы решение проблемы распространения ПО в линуксах... Но выше был неполный список проблем AppImage, ведь проблема интеграции с системой никуда не исчезает, например ярлыки в меню "Пуск" и прочее.
Собственно несостоятельность линуксоидных способов распространения ПО и вынудила меня взять всё в свои руки...
Сначала появился Chimbalix, потом появился базовый каталог для приложений PortSoft, позже было переработано меню "Пуск" и создан стабильный раздел "Applications" для сторонних приложений, наконец после подготовки "основ" начались эксперименты и попытки решить извечную проблему линуксов в плане распространения ПО, так родился Installer-SH, к текущему моменту уже версии 1.7:
На данный момент Installer-SH является уникальной особенностью дистрибутива Chimbalix, теоретически можно его применить и в других дистрибутивах Linux, однако для этого придётся реализовать базовый каталог PortSoft, стабильную категорию сторонних приложений "Applications", а так же реализовать вложенную структуру меню "Пуск", иначе будет каша из ярлыков, конечно придётся ещё адаптировать пути к некоторым каталогам в зависимости от DE и самого дистрибутива, хочу ли я это всё реализовывать на текущем этапе развития проекта? Конечно нет, хотя в будущем вполне возможно такое развитие.
Так вот, недавно был разработан Installer-SH 1.7, переработаны функции установки приложения, добавлены новые возможности размещения ярлыков на рабочем столе и в каталоге "helpers", что отвечает за ассоциации "приложений по умолчанию":
Просто захотел сделать установочный пакет веб браузера Mozilla Firefox последней версии (131.0.3), и столкнулся с проблемой, старая версия установщика (v1.6) оказалась не способна полноценно установить такое приложение, не было возможности добавить браузер в список ассоциаций "стандартных приложений", если быть точнее - в помойку, да, недоразвитость линуксов в плане распространения софта настолько запущена, что в таких местах валяются заранее подготовленные ярлыки ассоциаций, даже если приложения не установлены:
А всё почему? Правильно, потому что линуксоидные способы распространения ПО фактически мусор, и не предоставляют разработчикам нормальных возможностей для свободного распространения своих творений, потому линуксоиды наделали кучу "заготовок", чтобы были, только вот как быть с софтом, под который нет заготовок? Эх, опять извращаться по линуксоидски...
Собственно возможность добавления новых "ассоциаций" в эту линуксоидную помойку и была реализована в новой версии Installer-SH, теперь с установкой такого приложения как веб-браузер проблем нет, по крайней мене мною обнаруженных.
...
Давайте перейдём к особенностям и возможностям текущей версии Installer-SH 1.7:
1) Позволяет устанавливать ПО на автономные системы без доступа к интернету.
2) Высокая степень сжатия благодаря архиватору 7-Zip и оптимизированным параметрам сжатия, что позволяет хранить больше приложений в ограниченном объёме USB накопителей и файловых хранилищ.
3) Возможность установки разных версий одного приложения.
4) Два режима установки, системный для всех пользователей (нужны root права), и пользовательский сугубо для текущего пользователя (root права не нужны, стандартный режим).
5) Рассчитано на вложенную структуру меню "Пуск" и стабильный раздел "Applications", каждое приложение имеет свой личный раздел меню, возможно добавление дополнительных категорий для большей интеграции с системой и удобства пользователя, так же разработчик/упаковщик может сформировать структуру раздела приложения по своему.
7) Размещение ярлыков на рабочем столе (отключаемый функционал).
8) Возможность установки ярлыков в каталог "helpers" для большей интеграции с системой (отключаемый функционал).
9) Автоматическое переключение языка "интерфейса" в зависимости от текущей локализации системы (при наличии файла с переводом на нужный язык в каталоге "locales").
10) Встроенная проверка целостности установочных архивов, при обнаружении ошибки пользователь будет предупреждён о несоответствии контрольной суммы (можно отказаться от проверки).
11) Тихий режим установки (-silent) позволяет установить приложение без какого-либо вывода и подтверждений, однако при возникновении ошибок будет выведено предупреждение.
12) Установка файлов в домашни каталог пользователя (не рекомендуется использовать данный функционал, предназначен только для крайних случаев).
13) Автоматическая подготовка скрипта и ярлыков для удаления ПО из системы.
14) Однажды упакованное приложение потребует минимальных усилий для создания нового установочного пакета на основе старого.
15) Прозрачность для любопытных пользователей, ведь установочный скрипт можно просмотреть любым текстовым редактором, а файлы приложения распаковать архиватором поддерживающим формат 7-Zip.
Ну что, пожалуй хватит расписывать особенности и возможности Installer-SH, давайте лучше перепакуем веб-браузер Mozilla Firefox в формат Installer-SH, скачиваем официальный архив:
Отключаем автоматические обновления через файлы конфигурации в разделе "distribution", а так же провожу небольшую настройку в этих же файлах:
Зачем были отключены автоматические обновления таким сложным способом? Да потому что достали уже принудительно проверять обновления, ведь принудительную проверку обновлений невозможно отключить через обычные настройки браузера.
Браузер размещён в каталоге "firefox", ибо не хотелось смешивать файлы приложения с иконками и файлами Installer-SH:
Так же пришлось написать небольшой скрипт дающий пользователю контроль над обновлениями, раз отключил автоматические обновления - предоставь пользователю возможность их включить/выключить в любой момент:
Далее подготовка всевозможных системных файлов, основную работу оставляю на шаблоны замены вроде "UNIQUE_APP_FOLDER_NAME":
Для рабочего стола подготавливаю только один ярлык, там лишний "мусор" не нужен, ну и конечно подготавливаю "helper" файл, что позволит выбрать браузер в качестве "приложения по умолчанию":
Настраиваю вспомогательный скрипт упаковки архивов, ничего сложного, просто указываю размер словаря на уровне "64m" как оптимальный для текущего приложения, и упаковываю архивы получая файл MD5-Hash.txt, там хранятся контрольные суммы созданных архивов, нужен он для настройки главного скрипта:
Далее приступаю к настройке установочного скрипта, на самом деле он настраивался по мере подготовки всех предыдущих файлов, но не суть.
Оставляю включенным параметры "Install_Helpers" и "Install_Desktop_Icons", первый необходим для базовой интеграции браузера в систему, второй возможно переименую в будущем. Переключаю "Install_Mode" в режим "System" ведь такое приложение как веб-браузер лучше оградить от свободного доступа кем угодно, архитектуру задаю "x86_64", так же задаю уникальное имя каталога программы "Unique_App_Folder_Name" указав имя программы + версию цифрами без знаков препинания, что позволяет избежать конфликтов между другими версиями приложения.
Потом заполняю описание в переменных с приставкой "Info_", указываю имя приложения, версию, дату выпуска текущей версии, размер после установки, лицензию/разработчика и т.п., так же не забываю про перевод краткого описания на дополнительные языки в каталоге "locales".
Далее базовая настройка переменных для автоматической подготовки файлов меню, тут задаю имя раздела в меню, имя файла значка, путь к исполняемому файлу приложения, если таких несколько - для каждого настраиваю ярлыки руками, ну и конечно имя файла скрипта предназначенного для удаления приложения из системы, а так же его значок.
Заканчиваю добавлением дополнительной категории, чтобы приложение попало в системный раздел меню, но не злоупотребляю этой переменной, её использую только в ярлыке для запуска браузера, и указываю контрольные суммы архивов, чтобы скрипт мог сравнить и выявить ошибки, если архивы будут повреждены:
Если всё сделано правильно - можно устанавливать приложение:
На рабочем столе появился ярлык, да, он появится только у текущего пользователя даже при установке в режиме "System", ибо вмешательство в домашние каталоги других пользователей я считаю неприемлемым при установке ПО:
Проверяю браузер, всё нормально:
Далее проверяю "ассоциации", иду в панель управления настраивать "приложения по умолчанию", и тут всё прекрасно:
Далее меню "Пуск", тут тоже порядок, давайте включим автоматические обновления:
Так как браузер установлен в режиме "System", то для изменения параметров автоматических обновлений нужны root права, увы, ничего с этим не поделать, кроме как установить в режиме "User" сугубо для одного пользователя:
Теперь браузер проверяет автоматические обновления, да, можно отключить автоматическую установку, но вот проверка тут принудительная, и при каждом обнаружении новой версии браузер будет навязчиво предлагать обновиться:
Меня только одно немного напрягает, это принцип работы обновлений в браузере, как он будет их устанавливать, когда каталог приложения находится в зоне требующей root доступ.
Впрочем, это уже проблема разработчиков софта, но хотелось бы протестировать конечно, жаль только придётся подождать выпуска новой версии браузера, может оно спросит root пароль при установке, или просто не сможет обновиться выпав ошибкой, не знаю, но мне очень интересно, ибо есть вероятность, что браузер сможет нормально обновляться только если будет установлен в режиме "User", то есть сугубо для текущего пользователя...
Ну а скрипт удаления остался прежним, тут ничего нового, работает - не трогай:
Хотя с новым функционалом появилась и новая проблема, если установить приложение в режиме "System", а потом в режиме "User", оно может найти конфликт с ярлыком на рабочем столе, на самом деле тут нет вариантов избежать конфликт в данном месте, просто придётся смириться с тем, что ярлык рабочего стола будет перезаписан:
А что до меню, ну, тут ничего страшного, приоритет имеет приложение установленное в домашний каталог пользователя, если его удалить - будет использоваться "системное" приложение той же самой версии, если установлено:
Точно, нужно ведь проверить режим "-silent", правда показывать тут нечего, приложение просто молча установилось ("User" режим), в системном режиме разве что потребовало бы root пароль:
Тщательно протестировав приложение приступаю к удалению неиспользуемых при установке файлов, всё кроме архивов и папки "tools":
Осталось упаковать в пригодный для распространения через интернет zip архив и сравнить с оригиналом, итого установочный пакет в формате Installer-SH весит 62.2 МиБ, когда исходный архив с приложением "как есть" весит 83.4 МиБ, вроде и не много, но это целых 33% разницы в размере:
А учитывая что разница может достигать 75%, и даже больше в зависимости от конкретного приложения и его изначального формата распространения, а я напомню, что сам по себе AppImage является сжатым форматом хранения, и особо не поддаётся дальнейшему сжатию:
То в формате Installer-SH можно разместить больше приложений в один и тот же объём, чем в формате AppImage и линуксоидных архивов tar.bz2, и даже tar.xz:
Не знаю как линуксоидам, но мне это нравится, особенно тот факт, что такие пакеты можно установить на любой ПК с Chimbalix подходящей версии, а хранить установочные пакеты формата Installer-SH совершенно не обязательно в zip архиве, zip нужен только для более удобного распространения через интернет.
Пожалуй пора завершать статью, оставлю здесь ссылки где можно найти дистрибутив Chimbalix и Installer-SH:
Chimbalix: ( https://github.com/Shedou/Chimbalix ).
Installer-SH: ( https://github.com/Shedou/Chimbalix-Software-Catalog ).
Вот так удалось сделать "линукс" чуть более пригодным для использования.
Ах, да, совсем забыл, вероятно некоторые уже заметили небольшой хаос из названий приложений в меню, но увы, такой исход скорее неизбежен если дать возможность делать как хочется разработчикам, а не линуксоидам заведующим всякими репозиториями и дистрибутивами, а потому нужно будет разработать рекомендации по наименованию разделов меню, а так же подумать над реализацией возможности создавать общие разделы, внутри которых уже добавлять разделы отдельных приложений, но это всё уже оставлю на следующие версии Installer-SH...
Технически даже в текущем состоянии можно с некоторыми танцами над бубном назвать раздел просто "Firefox", и каждая дополнительная установленная версия программы будет попадать именно в этот обобщённый раздел объединяясь по сути, но над этим лучше бы поработать более целенаправленно.
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.