Найти тему
OVERCLOCKERS.RU

Как разработать кроссплатформенное приложение не утонув в помойке дистрибутивов 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 вольт, вот так сюрприз!"