Как разработать кроссплатформенное приложение не утонув в помойке дистрибутивов Linux: Начало
реклама
Предисловие
Прежде всего важно заметить, речь будет идти исключительно про Desktop, то есть обычные ПК и ноутбуки, те самые которые использует подавляющее большинство обычных пользователей ПК.
реклама
И когда говорю что репозитории это мусор, я имею в виду что репозитории мусор для обычного пользователя, не для красноглазого танцора с бубенцами в терминале, не для IT-специалиста что использует Linux "по работе", а для обычного человека, который вот пришел с Windows в Linux и пробует использовать "свободные" ОС.
-
Проблема которую необходимо решить
На мой взгляд важнейшая проблема всех дистрибутивов Linux это отсутствие адекватной системы распространения и запуска приложений, в том числе различных версий одного приложения.
реклама
И эта проблема в первую очередь вытекает из разработчиков софта увязших в болоте зависимостей, и эти же разработчики тянут в свое болото обычных пользователей не желая менять свой подход к разработке, что как минимум неприлично.
Я конечно понимаю, каждый делает как хочет, но знать меру тоже нужно, и если сам тонешь то хотя бы не тащи за собой прохожих.
А теперь я скажу пару слов про доступные в первую очередь возможности у пользователя.
Репозитории и центры приложений
Хлам абсолютно бесполезный когда у ПК нет качественного и быстрого доступа к интернету, да и при наличии быстрого доступа к интернету скорость репозиториев порой оставляет желать лучшего, бонусом такой метод установки разводит болото зависимостей в системе пользователя.
реклама
А центры приложений вроде и есть, а толку нет, обычно все равно нужно идти на сайт разработчика и скачивать все необходимое, и после плясать с бубном перед терминалом пытаясь запустить приложение которого часто может и не быть в центре приложений дистрибутива у пользователя.
DEB и аналогичные пакеты
Тоже хлам, ибо многие пакеты невозможно установить не вздёрнув зависимости через интернет, по сути это как репозитории, только создает иллюзию автономности и свободы, а по факту бесполезный хлам, ведь невозможно просто так установить такие пакеты предварительно не потанцевав с бубном в терминале.
Установка VirtualBox и Ryzen Controller:
Flatpak
Очередной хлам, зависимости никуда не исчезли, их просто спихнули в "ящик", при этом этот хлам еще зависит от репозиториев, порой весьма тормозных...
реклама
Допустим мне нужно скачать GIMP, чтобы закинуть его на USB накопитель и установить на рабочий ПК в другом конце города... Это не про Flatpak, ведь разработчики дают ссылку на репозиторий (flatpakref) из которого нужно качать "ящик" состоящий грубо говоря на 1% из самого приложения, и на 99% из зависимостей...
Еще пример, мне нужна утилита для сравнения производительности двух процессоров (i3-10105F и Ryzen 5 5500), естественно это два разных ПК, и тут есть GTK Stress Testing (GST), эту утилиту еще называют аналогом AIDA64, хотя до AIDA64 ей пердеть и пердеть как из Гренландии до Китая пешком...
И каким образом мне установить GST на два разных ПК, чтобы провести тесты и сравнить между собой системы? А если тестируемые системы не подключены к сети ибо нужно прокладывать инфраструктуру специально ради этих двух систем? У разработчика нет релизов приложения, он дает только исходные коды, но это ведь не беда, есть же великий Flatpak!
Правда вот установочный пакет никто не дает, дают ссылку на репозиторий... А через репозиторий качать эту дичь нужно буквально гигабайтами на каждый ПК в отдельности...
Можно было сделать "как в Windows" и не насиловать репозитории, просто установочный пакет адекватный который работает везде и всегда, но наверное "религия" не позволяет, что я могу сказать, каждый сам выбирает где ему сидеть, под плинтусом, на уровне плинтуса, или как Windows недосягаемо для остальных...
AppImage
Вот подобрались еще к одной дичи, такой "контейнер" пригоден разве что для утилит уровня CPU-X, не более, и этим все сказано.
После опыта с Flameshot и прочим софтом я понял что AppImage такой же хлам, как и все что выше... Этот очередной костыль не решает проблему, это всего лишь очередной костыль едва пригодный для нормального использования обычным пользователем.
Прочие костыли
Просто без комментариев.
Итог
А каков итог? Вот люди постоянно жалуются что под Linux нет софта толком, а про игры вообще не заикайтесь даже... Так в чем причина?
Разработчики такие глупые не хотят поддерживать прекрасный и свободный Linux? Да, не хотят, а знаете почему не хотят? Да просто потому что в среде Linux невозможно свободно распространять свои труды, вроде и DEB пакеты есть, и Flatpak, и прочие костыли, а как с помощью этого мракобесия распространять софт/игры? Об этом вы подумали?
В Windows все просто, скомпилировал, дал пользователю (диском, архивом через интернет, USB накопителем и т.п.), пользователь легко запустил и использует приложение, никаких проблем.
А в Linux что? Заставить каждого клиента открыть терминал и начать неистовые танцы с заклинаниями из непонятных букв и цифр? Да еще магические последовательности нужно строго соблюдать при вводе заклинаний в терминал, а потом спустя некоторое время труды разработчика просто уничтожают очередным линуксоидным кривым обновлением системы, и у клиента вообще ничего не работает...
Банально взять старую игру или приложение, в Windows обычно нет серьезных проблем с запуском старого ПО, даже если оно было разработано более 20 лет назад, попробуйте подобное провернуть в Linux дистрибутивах, точно "не разочаруетесь", особенно если вспомнить как дистрибутивы Linux выбросили поддержку x86 (32-bit)... Лучше бы выбросили разработчиков занимающихся мракобесием, а не поддержку x86...
-
Почему я хочу решить проблему
Не то чтобы Linux дистрибутивы сейчас важны для меня, Windows 7 все еще прекрасно работает и выполняет свои обязанности как операционная система, но Windows 7 рано или поздно потеряет свою актуальность, и нужно будет переходить на другую операционную систему.
Почему не перейду в Windows 10 и тем более Windows 11? Все просто, проблема с композитором рабочего стола который Microsoft запретили отключать начиная с Windows 8/10, просто рабочий стол перестанет работать если попытаться отключить композитор силой, в чем проблема композитора? Лишние задержки вывода изображения при игре в оконном режиме.
Я играю в оконном режиме, в полноэкранном режиме я никогда не играю, потому лишние ~15-30 мс задержек очень даже напрягают меня во время игры, и не пытайтесь искать эти задержки утилитами мониторинга, не найдете, ибо композитор часть операционной системы которая работает поверх всего.
Это основная из причин почему я не перейду в Windows 10, а в Windows 11 я принципиально не буду переходить, пусть сами используют свое "творение".
Проще говоря я хочу "подстелить солому под себя" на будущее, ибо операционная система от Microsoft откровенно свернула в тупик.
Сейчас дистрибутивы Linux не способны стать в один уровень с Windows по многим причинам, и одну из таких причин я решил устранить сам, ведь на сообщество Linux надежд больше нет, более 20 лет безрезультатно месить болото зависимостей даже не догнав Windows 98 по некоторому базовому функционалу... Это просто... Я не знаю как это назвать без ругани...
Зачем вообще создают дистрибутивы Linux если их невозможно использовать адекватно, обычный пользователь постоянно обретает бесконечные проблемы которых быть в принципе не должно...
Так или иначе "подстелить соломку под себя на будущее" не единственная причина, у меня появился интерес, смогу ли я решить проблему, которую целое сообщество "крайне умных и опытных" за несколько десятилетий не смогло решить бесконечно держась за болото зависимостей, а еще у меня просто полно времени сейчас.
Причем важно заметить, решить проблему запуска и установки приложений в помойке дистрибутивов Linux недостаточно, ведь в этой помойке множество разных дистрибутивов, одно и то же приложение может иметь разный внешний вид в зависимости от дистрибутива, и это тоже проблема.
Да, есть всякие Qt, чтобы унифицировать "лицо" программ, но разве это выход тащить подобную зависимость постоянно? Нет, мне такой вариант не по нраву, тем более я уже видел как работают приложения на основе Qt в дистрибутивах Linux, порой смотрю и думаю, что лучше бы вообще не видел...
Qt в принципе не решает никак болото зависимостей, это просто полезный фреймворк.
-
Как решить проблему (теория)
Обычный путь
Можно пойти по обычной дорожке, как принято у линуксоидов, взять и написать приложение с кучей зависимостей, выкинуть этот выкидыш в GitHub и сказать, вот вам программа, я даю вам её бесплатно и делайте что хотите.
А то что болото зависимостей у каждого пользователя разное, и постоянно "плавает" с бесконечными обновлениями, так на это пофиг, OpenSource же, код есть? Есть, чего еще хотите, берите и делайте...
Но я не линуксоид, и прекрасно понимаю что сделай я подобным образом, конечный пользователь меня просто обложит руганью и пойдет обратно в Windows...
Еще я не хочу постоянно тратить время на переработку проекта, просто потому что какая-то зависимость там усохла в болоте и её выбросили, вот так разработчик писал программу, вкладывал свой труд, и его труд просто уничтожают очередным бестолковым обновлением линуксоидным, а пользователь возмущен что не может запустить привычное приложение (привет от x86).
И при этом мракобесии еще слышны возмущения что софта мало под Linux, а откуда этот софт будет, если каждое линуксоидное обновление может все сломать? Проще уж под Windows написать приложение и забыть, чем под Linux и 100 раз переделывать по вине бесконечных обновлений все ломающих...
Как вариант можно сделать консольное приложение, но боже упаси, сейчас на дворе 2023 год, а не 1980-1990, обычный пользователь пришедший после Microsoft Windows просто не поймет такой подход, от которого в ужасе сбежала та самая Windows более 20 лет назад...
Мой путь
Мой путь прост, приложение обязано работать всегда, оно не должно зависеть от зависимостей которые у каждого пользователя разные, а еще обновления дистрибутива не должно влиять на работоспособность приложения, это значит зависимости нужно резать и рвать с корнем, то самое болото зависимостей.
Но утопающее болото зависимостей нет смысла уничтожать, оно само в себе утонет рано или поздно, нужно просто быть выше этого болота зависимостей, или хотя бы обходить его стороной.
Иначе говоря приложение нужно разрабатывать таким образом, чтобы оно было портативным и без зависимостей, этим я решу одну из самых главных проблем всех дистрибутивов Linux.
И как устанавливать такое приложение? А зачем, достаточно просто запустить и использовать где угодно, но если уж и приспичит установить, то не вижу проблем обратить внимание на уже существующие костыли для установки приложений, но очень сомневаюсь что конечные пользователи оценят такой подход...
Но есть и еще одна проблема, "лицо" программы, оно обязано быть одинаковым везде где бы я не запустил приложение, "отклонения" интерфейса недопустимы.
Например, у пользователя немного "неправильные" настройки Qt, от чего интерфейс программы может стать вообще непригоден для использования, оно мне надо? Нет, это недопустимо, потому нет смысла даже смотреть в эту сторону.
Кастомизация интерфейса будет потеряна? А она разве есть в дистрибутивах Linux? Каким образом мне настроить толщину границ окон в Xfce чтобы не ловить пиксели с лупой у экрана пытаясь растянуть окно? Нет никакой кастомизации по факту, ибо чтобы действительно кастомизировать интерфейс хотя бы как в Windows, нужно перековырять тонны исходного кода... Так что не велика "потеря", было бы что терять еще.
-
Как решить проблему (реальность)
Здесь следовало бы начать самое интересное, но не судьба ибо это только половина всего материала, технически я могу все в одну статью набросать, но стоит ли оно того?
Я предпочту разбить статью на две части, самую интересную половину оставить на вторую часть, а первую (текущую) часть закончить сейчас.
По итогу имеем следующие требования к приложению:
1) Приложение обязано работать без возни с терминалом, чтобы его мог запустить обычный пользователь без лишних телодвижений, в идеале должно работать как в Windows, но в реальности это невозможно, потому необходимо свести к минимуму всевозможные телодвижения конечного пользователя.
2) Приложение обязано работать в любом дистрибутиве Linux насколько это возможно.
3) Приложение не должно иметь лишних зависимостей, просто чтобы в один момент не утонуло в болоте зависимостей.
4) Приложение не должно гадить в системе пользователя и разводить помойку в труднодоступных местах, приложение обязано все необходимое хранить рядом с исполняемым файлом, чтобы пользователь не ломал голову при поиске файлов конфигурации если возникнет проблема (баг) с приложением.
5) Приложение обязано сохранять своё "лицо" в каком бы дистрибутиве его не запустили, иначе говоря внешний вид приложения не должен зависеть от дистрибутива Linux.
Важная оговорка, под дистрибутивом Linux я имею в виду дистрибутив с графическим интерфейсом, в терминале приложение не обязано работать, ибо терминал это прошлый век для большинства пользователей ПК/ноутбуков.
На этом собственно всё сейчас, да, я еще не раскрыл суть того, над чем уже работаю, имейте терпение, все будет в следующей части, а пока можете поразмышлять над требованиями к приложению, и смогу ли я максимально удовлетворить эти требования.
P.S. Отвечаю на вопрос комментатора: Я указываю на некоторые серьезные проблемы что действительно мешают использовать дистрибутивы Linux, и обращаю внимание, что эти проблемы следует исправлять в первую очередь вместо того, чтобы бесконечно исправлять изначально недоработанные узкоспециализированные утилиты... А свое "нытье" оставьте при себе.
Обычный пользователь установит "свободную ОС", посмотрит на бесконечные запросы root пароля которые никак не отключить из GUI да прочие проблемы на ровном месте, и уже будет не до исправления каких-то там PuTTy, может быть полезет на форум просить помощи, получит в ответ "ты просто глупый вендузятник", и уйдет обратно в Windows... И так пока все по кругу не "попробуют", а там уже скажешь про Linux и все такие "Фу! Иди ты со своим линуксом подальше!".
Это ли будущее которого желает сообщество для дистрибутивов Linux? Очень сомневаюсь, но именно к такому будущему все идет, либо так и будут сидеть на уровне плинтуса, а Windows будет доминировать, либо государства насильно начнут сгонять в Linux дистрибутивы людей, это единственные возможные на данный момент варианты, при которых Linux может быть популярен у обычных пользователей, ведь за десятилетия разработчики дистрибутивов не удосужились создать адекватные условия для распространения/установки и запуска приложений на уровне Windows.
Конечно же будут всхлипы вроде "хочешь Windows то иди в Windows, нечего нести Windows в Linux", но разве есть что-то плохое в том, чтобы брать лучшее от лучших?
В общем хватит болтовни, мне еще нужно работать над продолжением...
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.
"Однажды темной грузинской ночью я лежал на печи, раскачиваемой далеким землетрясением под грохот морских мин... А в розетке 166 вольт, вот так сюрприз!"
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила