Обновление игр цикла "Трикси и алмазы", версия 1.1 (исходники, уровни, дистрибутив Linux, перевод)
+97

Решил всё же привести в порядок эти две аркады, а то вроде и разработал, но до логичного конца не довел.
А это нехорошо.
Сохранены и улучшены обе версии (для 16-битных систем и для современных операционок)
Что добавлено:
- Новые уровни для расширенной версии игры (было 5, стало 10)
- Перевод на английский язык
- Дистрибутивы с установщиками для Windows
- Запускаемые файлы формата AppImage для 64-битных Linux.
- Отключение звука (без регулировки громкости)
- Исходники выгружены на github
- Конечно, многочисленные исправления багов вроде хождения сквозь стены и невозможности запуска более одного шара огня.
Под катом ссылки на загрузки:
Английские версии размещены на itch.io (рекомендую качать отсюда, английская и русская версия отличаются только языком по умолчанию, его можно переключить в меню)
tav-developer.itch.io/trixie-and-diamonds-16-bit
tav-developer.itch.io/trixie-and-diamonds
Версии с русским по умолчанию можно взять на github в разделах релизов
github.com/tereshenkovav/Trixie16bit/releases
github.com/tereshenkovav/TrixieDiamonds32/releases
Ссылки на сами репозитории
github.com/tereshenkovav/Trixie16bit
github.com/tereshenkovav/TrixieDiamonds32
16-битная версия разработана на QuickBasic 4.5 и NASM для DOS.
32-битная — на основе моего собственного движка GameStudyJS, использующего SFML и QtScript [ github.com/tereshenkovav/GameStudyJS ]
На этом с данными двумя проектами я завершил, возможно, добавлю попозже систему достижений и дополнительные бонусы, а также систему сложности, если текущая окажется слишком простой. Вторая полноценная завершенная игра с понями, это радует.
Далее уже сосредоточусь на текущем основном проекте-квесте, закрытие хвостов дело хорошее, но не самодостаточное. Нужно больше
PS: В расширенной версии для Windows есть обидный, редко появляющийся баг. Раз на 30-40 запусков игра падает. Молча падает, без ответа и привета. Если кто поймает такое событие — прошу написать в комментариях или личку.
306 комментариев
М-м-м, ляпота… Никаких помойко-снапов.
ПроблемыLinux: Devuan Chimaera, KDE Plasma 4:5.20.5-4
1) При разворачивании на весь экран теряются пропорции, картинка растягивается.
2) При телепортации враг может появиться прямо в месте назначения.
3) Управление отзывчивое, но процесс тратит ~45% ЦП.
Дистрибьюция под Linux всё ещё является болью. Да, AppImage наиболее близок к божественной концепции Windows «включаем все dll в установщик» — но беда в том, что libc и libstdc++ включать таким образом нельзя — и вот уже при попытке обеспечить запуск на Ubuntu 14 и Ubuntu 22 одновременно наш круп в огне.
Я изучаю, как эту проблему решает GOG, у них очень грамотный подход, но и там делаю раздельные дистрибутивы для разных версий Ubuntu, что говорит нам о фундаментальных проблемах.
К слову, поддержку AppImage в Ubuntu 22 поломали.
Это у меня стоит в доработказ движка, сейчас растягивание идет без учета пропорций, средства самого SFML. По уму, опция
«полный экран» должна быть в движке.
Поскольку прыжок выполняется не мнгновенно, возможна ситуация, когда команда уже запущена, Трикси еще не прыгнула, а монстр в точке назначения уже заспавнен. Это можно исключить проверкой «не спавнить там, где точка назначения прыжка, если прыжок запущен», и наверно, так и сделаю.
Хе, QtCore+QtScript+дорогие операции с текстурами дают действительно сильную нагрузку. На чистом С++ или ObjectPascal было бы быстрее, конечно, но я хотел попробовать такую связку. В целом, хорошо, кроме загрузки процессора и редких (очень редких) падений без ясных причин.
NetCore таки выглядит надежней для кроссплатформенных игр.
Спасибо за подробный отчет.
Я давно считаю, что делать надо так: Пилим версию программы на доработанном Appimage (кэш, конфиги, все сохраняется в нем), потом по возможности пакуем программу в deb, rpm, etc. Если возможности нет, всегда поможет сообщество.
Допустим, я готов перелопачивать действительно нужную мне программу в родной формат пакетов дистрибутива. Но что бы осознать что программа того стоит, я должен иметь возможность попробовать ее не возясь с недостающими или неподходящими по версиям пакетами, не перепиливая пол системы. Для меня вопрос свежих версий либ и софта стоит особенно остро.
Не думаю, что это возможно — AppImage создаёт read-only систему, логи и настройки пользователя всё еще нужно направлять в /home или /tmp
Даже Slackware между 14 и 15 версиями уже несовместим. Это нужен десяток deb, десяток rpm, три-четыре tgz и это только для главных дистрибутивов.
Ни один разработчик этим заниматься не будет — он пишет софт, а не отслеживает, какой номер субверсии libxxxxx заменен в очередной сборке Ubuntu.
Поэтому и пишу, что надо доработать формат Appimage. Можно пойти еще дальше, пусть там хранятся две фс, одна для файлов программы (read-only), вторая для всех файлов созданных программой или отредактированных пользователем, кэш, конфиги, свои патчи, дополнения и т.п. (rw). И сделать так, дабы всегда можно было передать Appimage аргумент для сброса всех файлов в rw-фс, возвращая оригинальные из read-only.
Разработчик не будет, будет сообщество которое оценит программу. А вероятность этого повышается, если сначала сообществу будет выкачен автономный Appimage без зависимостей.
Как это возможно? По сути, он просто архив, распаковываемый в /tmp или /ram.
Записывать изменения обратно в файл — это огромная дыра в скорости и безопасности.
Собственно, даже Windows уже пришла к концепции неизменяемых файлов в Program Files и пользовательских в Users/AppData.
Записывать пользовательские данные обратно в архив AppImage — это возврат к Windows 98, но без всех плюшек Windows 98.
Сообщество за 40 лет не сделало даже нормальный файловый менеджер для Linux, не говорю об уровне FAR Manager — но хотя бы до TotalCommander или Norton 4.
Перво-наперво это исполняемый файл, который сам распаковывает программу куда ему надо. Значит технически есть возможность сначала распаковать программу из read-only fs, потом распаковать с заменой файлы из rw fs.
Если программа или пользователь во время работы поменяла какие то файлы, то после завершения работы программы идет запись всех измененных файлов в rw fs и упаковка rw fs обратно в Appimage.
Несущественно увеличивается время запуска и завершения Appimage, но сама программа в производительности не теряет.
Почему? Относительно скорости я уже высказался, относительно безопасности вот: Если пользователь сам заменит бинарник приложения на вирус, то ССЗБ, тут ничто не поможет. Да и безопасность — проблема пользователя, я считаю. Незачем ради нее удобные фичи кастрировать.
Создать удобный файловый менеджер который устроит всех и упаковать программу в deb — разные по уровню вещи. Группа автолюбителей навряд ли разработает и соберет свой автомобиль, но вот колесо поменять способна.
Я не вижу применения этой технологии, везде идет разделение на ro файлы программ и rw файлы пользователя.
Некоторые игры могут содержать данные пользователя больше размером, чем сама игра — представь, как мучительно будет ворочаться гигабайтный файл, пытаясь в себя впихнуть еще гигабайт данных.
В том же MacOS программы распространяются по похожей методике (образы dmg), но в них ничего не пишут, все данные уходят в /home
Вот поэтому, юзайте, дети, чистый C! Или хотя бы Lua.
Даже великие игры прошлого типа WarCraft и Doom были написаны на С++ с ассемблерными вставками.
И в чём проблема в построении архитектуры в программе на С?
Проверю. Почему-то в памяти с древних временем отпечаталось, что Doom 2 и WarCraft 2 на Watcom C++
С++ лучше, чем С
Чем лучше?
Чем С
(переделка бородатого национального анекдота)
Одна из первых задач, которая возникает при построении игры чуть сложнее одноэкранника с тремя героями — это возведение моста между логикой и спрайтами, чтобы независимо обновлять графику и поведение объектов. Удачи сделать это без VMT, обобщенных коллекций и в идеале, сборщика мусора.
Можно, можно. Но сначала придется самому разработать всё перечисленное, а потом делать непосредственно игру. Это как попытки написать игру без графической библиотеки — вместо вызова загрузки и вывода спрайта, сначала бьемся с матрицей OpenGL.
Мне остаётся только прибегнуть к формуле «PvP или в кусты?»
Выберем тему для игры, обозначим примерную механику (без тонких деталей реализации, ес-но) — ты реализуешь на С, я на ObjectPascal или C#. Без дополнительных фреймворков, только средства языка и его стандартной библиотеки.
Потом выгрузим в свои гитхабы + Табун, и публика, которая сечет в программировании (тут таких полно) — посмотрят и код, и игры, а там скажут
победила дружба и магиякто ближе был.Вообще, если у меня было бы время, то можно было бы запилить, кстати.
Тут ещё проблема в том, что нужны спрайты, уровни, звук, музыка, сюжет — что достаточно сложно по сравнению с написанием кода (и именно на этом загибается 50% проектов, если не больше). Но с другой стороны, если это всё будет, и нужно будет только написать движок со сложностью 1-2 человеко-дня — то почему бы и нет.
P.S. «Без фреймворков» кажется лишним ограничением: в конце концов мы говорим про языки, а не про стандартные библиотеки разных языков. Ну, то есть, к примеру, я даже на C не буду пытаться писать что-то такое без SDL2 и/или libGL, потому что с чего бы не юзать то, что уже существует и помогает в разработке?
Вот так мы и пришли к C# с его делегатами и лямбдами. Никто не будет разрабатывать VMT на С.
Да не особо, можно и на простых спрайтах. Игра уровня такого же типа, как в этом посте, но минималочка.
std::vector(int) против int *, вообще никакой разницы, когда по ходу игры нужно в одном цикле обойти, добавить, потом еще раз обойти и удалить некоторые элементы.
Многие встроенные видеокарты не поддерживают vsync, наверно, добавлю в игру ограничение FPS принудительное. Забыл сразу установить.
Спойлер
reddit/mlp?
Equestria daily?
А из предложений могу сказать, что можно было бы сюжетную линию, что пишется в меню «Справка» (Про Старлайт и Вечнодикий лес) перевести в начало игры, когда жмёшь «Аркада», ну и какую-нибудь концовочку сделать после прохождения всех уровней, аля у трикси теперь много алмазов и она счастлива =)
В некоторых аркадах сцены действительно встроены в игру, а не идут отдельно справкой.
Кстати, есть книга «Трикси и Волшебное копытце», где она благодаря Рарити научилась сама кастовать алмазы. И в итоге в Вечнодикий лес стеклось много алмазоискателей, которые спорили между собой за «точки»)) ну это так, оффтоп.
Точнее, некоторые враги быстрее Трикси. Про урон, в 32-битной версии я это исправил, там телепорт работает после контакта с монстром, а в 16-битной забыл, надо доделать.
AppImage ты скорее всего сделать не сможешь, а пакет должен получиться, зависимости можешь посмотреть в setup/linux/build64.sh
Эльбрусы как были так и остались чисто рабочими лошадками, и дома ни у кого не живут (кроме разработчиков, но и у тех явно не основная машина).
Тогда проще не включать комп и не уходить из дома.
Может, у меня продуктивность не стартует, пока десяток импов не выбью двухстволкой с утра, как быть тогда?
Я не слишком серьезен, если что, но игры таки важная часть для ПК, даже рабочего.
С какого то времени напрочь разучился играть на ПК (руки сами тянутся за геймпадом — с клавиатуры уже дискомфортно, хотя в нулевых и начале десятых много играл именно на компе, потом как то незаметно мигрировал на консоли да и привык иметь отдельные специализированные железки для разных задач) — для меня он был есть и останется прежде всего инструментом.
Вон Taisei Project я так портировал (а следом — GZDoom, DOSBox-X, X Neko Project, ScummVM и т.п.)
Хотя, конечно, она не позиционируется как референсная general purpose операционка, это да.
Еще SFML. Для Windows уже включено в репу, для остальных должно быть в системе.
За вычетом libc и libstdc++, вот что ему нужно
/usr/lib64/libicui18n.so
/usr/lib64/libicuuc.so
/usr/lib64/libicudata.so
/usr/lib64/libvorbis
/usr/lib64/libopenal.so
/usr/lib64/libatomic.so
/usr/lib64/libGLU.so
/usr/lib64/libogg.so
/usr/lib64/libFLAC.so
Это типа «Игровой движок „Учи JS“»?) Или «Игровой движок „Я учил JS, пока его писал“»?))))
Да знаю я, что там C++ и Qt, но надо ж было подколоть)
Да, примерно так, игра написана целиком на JavaScript, кроме модуля карты.
Для этого данный движок и предназначен — он позволяет человеку с минимальным знанием JS сделать простую игру, без копаний в OpenGL и оконных функциях.
И да, под эту библиотеку куча биндингов, проще сказать, под что их нет. В том числе и под JS есть, да.
1) стоило бы туда добавить `git submodule update --init` на всякий случай (я вечно забываю тащить репу с субмодулями =)
2) `make` я б заменил на `make $@` (чтобы можно было вызывать скрипт с параметрами типа -jN и -k)
Ещё там есть немного минорных ворнингов:
lcc: "../TrixieDiamonds/extproc.cpp", строка 12: предупреждение #826: параметр "name" не был использован [-Wunused-parameter] void ExtProc::getPair(QString name,QVariant value) { ^ lcc: "../TrixieDiamonds/extproc.cpp", строка 12: предупреждение #826: параметр "value" не был использован [-Wunused-parameter] void ExtProc::getPair(QString name,QVariant value) { ^ lcc: "../GameStudyJS-core/sprite.cpp", строка 262: предупреждение #1873: сравнение знакового и беззнакового операндов [-Wsign-compare] for (int i=0; i<img.getSize().x; i++) ^ lcc: "../GameStudyJS-core/sprite.cpp", строка 263: предупреждение #1873: сравнение знакового и беззнакового операндов [-Wsign-compare] for (int j=0; j<img.getSize().y; j++) { ^Но как я понимаю, это не страшно.Ну и поскольку у нас зачем-то дефолтно выбран четвёртый Qt, мне пришлось заменять вызов `qmake ../TrixieDiamonds/` на `qtchooser -qt=5 -run-tool=qmake ../TrixieDiamonds/`. Думаю, вместо sh-файла удобнее было бы переделать сборку на CMake — там эта проблема не возникает (да и это унифицировало бы сборку с виндой — тем более, что SFML всё равно нужно собирать с CMake, так что даже на винде она нужна).
В общем, всё собралось, думаю, в понедельник проверю, как выйду на работу.
P.S. Как же на табуне не хватает однострочного форматирования кода…
Не, не нужна, добрый разработчик уже положил в репу каталог SFML-2.5.1-mingw как раз для того, чтобы под Windows сборка выполнялась без лишних хлопот. И нужные dll в каталог bin, чтобы и запускалось одним кликом.
На Linux и Mac, конечно, такой трюк не выйдет.
Наркоманынекроманты что ли. Уже и Qt5 считается устаревшим, всё чаще просят сорцы под шестерку.Я скорее всего буду выбирать между стульями Delphi и C#, на С++ уже новый проект делать не начну, только доведу до обновления движок игровой, а так нет.
Вот как после таких костылей считать винду удобной системой?..Принцип КБЧНВ же. «А вдруг у пользователей есть старое ПО, которому нужен четвёртый Qt...» (при этом вопрос «а вдруг у пользователей есть новое ПО, которому нужен шестой Qt», и соответственно, вопрос портирования Qt6, почему-то не рассматриваются, ага).
Я так-то даже удивлён, что народ согласился Qt3 выпилить на момент смены мажорной ветки релиза ОС с 6 на 7.
Ну а что неудобного в возможности положить в проект сразу все библиотеки, а не заставлять пользователя страдать, гадая, будет ли на его системе нужна версия в пакетах, или не будет?
Вообще, если так подумать, то LD_LIBRARY_PATH=., как принято в винде, выглядит крайне неудобным решением, не позволяющим, например, положить бинарник туда, куда тебе удобно, а не в дебри %PROGRAMFILESDIR% или куда ещё, где лежит это «всё нужное».
Вот чем больше я юзаю линукс, тем мне идея «все бинарники в одном легконаходимом месте, все либы — в другом, все доки — в третьем» кажется намного лучше виндового подхода. Вот почему на винде я не могу сделать <Win+R> photoshop <enter> и запустить условный фотошоп (он мне скажет, что файл не найден, и правильно сделает — с чего бы ему знать, где лежит photoshop.exe, если он не в /usr/bin?), а вынужден возить мышкой внутри пуска? Непрактично же.
До тех пор, пока какой-то программе не потребуется другая версия библиотеки с её зависимостями.
Да, можно руками доустанавливать, но типовой пользователь этого делать НЕ БУДЕТ.
В Windows всё нужное для установки проги уже включено в прогу, потому и не нужны такие извращения. И тест делается легко — держишь одну-единственную машину с чистой ОС для проверки. Не нашло dll, включил её в дистрибутив. Всё.
А если используемый мною софт или либа уже слинкованы с libsomelib.so, ожидая там версию 1.4?
Не говоря уже о том, что для системных библиотек типа libc это в принципе не выйдет — как ни крутись возле шеста, а с определенной версией разница становится неподдерживаемой.
Только до тех пор, пока этот бинарный пакет есть в репах конкретного линукса. Дальше возвращаемся к
только уже без возможности просто скопировать в каталог.
Я например, не могу по лицензии собирать статически — тот же мой проект про Трикси и её сбор алмазов сейчас является лицензионно чистым потому, что я линкую Qt динамически и предоставляю исходники. Без этого Qt Group порвет мою задницу на британский флаг. Ну или выложить 4000 зеленых за лицензию, чего мне хотелось бы избежать.
Иронично, что именно это сейчас по факту единственный способ дистрибуции под Linux — начиная от кустарного AppImage до официального snap.
Я не вижу других способов, как мне заставить мою программу запускаться хотя бы на основной десятке дистрибутивов.
То есть там вообще по факту нужен не deb/rpm, а PKGBUILD. А раз уж он есть, то можно и в AUR его засубмиттить.
Ну всё, арч тоже умер, походу)
Но ведь действительно удобней. Компилить нужно, если хочешь получить самую свежую сборку (это нужно либо для репозитория, либо для указания ключей сборки — убрать WebGL из Qt к примеру).
Оба варианта далеки от массового пользователя.
Уж что-что, а арч сам по себе далёк от массового пользователя, и ему норм.
Многие релизы многих прог распространяются (на том же гитхабе) в виде deb/rpm под популярные версии операционок.
Делать deb/rpm под каждую версию каждого дистрибутива? Ну нафиг такое счастье, у меня нет столько времени. Мне нужно писать софт, а не изучать совместимости десятков библиотек и десятков дистрибутивов.
Ну и это всё-таки какое-никакое уважение к пользователю — не кидать ему стопицотмегабайтный архив (из которого, например, сохранёнки, няз, так просто не перенести на другой комп), а давать то, что нужно и то, что нормальным образом интегрируется с системой.
И при выходе очередной XYZBuntu версии 12.345 добавлять новый билд? Нафиг такое счастье, у меня программы, собранные для Windows 98, с некоторыми оговорками запускаются и работают на Windows 10 (причем половину этих оговорок решила сама Microsoft, сделав виртуальный RW-FS в Program Files, из уважения к своим пользователям).
Пока разработчики Linux не поймут, что ОС — это просто кнопка для запуска пользовательских приложений (желательно, с циклом поддержки в 10, иногда 20 лет) — так и будут делать новые бессмысленные версии, на каждом шаге ломая запуск предыдущих программ. Серьезно, в Ubuntu 22 поломали запуск AppImage, без установки fuse2 не пойдет. Сколько пользователей вобъет в консоли sudo apt-get install libfuse2? Подсказка: 0.
Нет, конечно. Просто не требовать какую-то уникальную версию библиотеки (как часто поступают виндовые программы, из-за чего, если «заботливый» разраб не положил полгигабайта нужных библиотек к стокилобайтному экзешнику, разыскивать нужную либу нужной версии приходится очень долго по всему инету), а использовать нормально документированное API, которое, как правило, в важных библиотеках меняют без обратной совместимости крайне редко, и поэтому в большинстве дистрибов всегда есть к чему подлинковаться, если прога не дестяилетней давности.Во-первых, без библиотек у тебя вообще ничего не запустится на винде, а на линуксе — скорее всего запустится (а если и нет, apt/yum всегда придут на помощь). А во-вторых, в этих оговорках и проблема. Если такая оговорка вылезла и сломала что-то, на винде ты не сделаешь ничего. А на линуксе — если из коробки не работает, пересобрал тремя командами под свой дистрибутив — и в 99% случаев всё заработало.Лучше бы она не делала. Я из-за этого пару дней в своё время разбирался, почему у меня под семёркой не работает Cool Edit Pro, причём никаких логов, ничего — а оказывается, он писал временный файл в свой рабочий каталог, а потом его пытался читать, и вот запись проходила, вроде бы, нормально, а потом при поытке чтения файла прога не видела его и крашилась. Вот если б винда сразу спросила «тут прога хочет что-то записать, разрешить?» или хотя бы выдала ошибку «permission denied when writing...» — то я бы хотя бы сразу понял в чём дело. А без этого пришлось ковырять это монитором сисколлов.Можно не надо, а? Ещё скажи, что в современных операционках нужно держать qt3 и библиотеки из KDE 3? Нет, спасибо, мусор иногда бывает нужно выбрасывать. А для ретрокомпьютинга есть образы chroot.
Собственно, в том числе из-за попытки (часто неудачной) в обратную совместимость винда и представляет архитектурно такого кадавра, как сейчас.Если пользователь настолько туп, что не может вбить команду, которую притом ему чуть ли не прямо в консоль сказали — то и правда, линукс не для него. Пусть сидит на своей винде и не требует превратить линукс в операционку для домохозяек (на которой, к примеру, собрать рандомный проект с нуля, особенно с qt и прочими подобными вещами — мучение на полдня, в отличие от однострочника на баше в линуксе).
Поэтому доля линуксов на десктопе и болтается на уровне пары процентов)
Да, GNU/Linux — не такая ось, на которой можно удобно сидеть, будучи дебилом (на винде можно), но в последнее время мне кажется, что это и хорошо — по крайней мере очень многие вещи в ней сделаны логично, а не так, как будет удобнее умственно отсталым (зато при этом оно будет приносить кучу проблем павер-юзерам).
Как что-то плохое) У линукса нет цели собрать максимальную долю рынка же.
Вот это откровенно ложное утверждение, например. Про libFLAC в соседнем посте я уже упоминал, про Qt3 упоминал уже ты, а ещё к примеру какой-нибудь Python в каждой новой минорной версии выпиливает какой-нибудь старый API, из-за чего завести старые Python-программы в новых линуксах как минимум нетривиально
Ну а для ретрокомпьютинга, повторюсь, есть чруты, докер-образы, да хоть виртуалки в конце концов (у винды есть только последнее, к слову).
Совместимость со старым софтом сломана? Сломана. Ну вот и всё, проблема объективно есть, а остальной твой флуд про «abandonware» и «даже не смешно» не имеет никакого значения
То есть заставлять пользователя перодлиться как минимум чтобы установить этот самый докер
Повторяю ещё раз: совместимость со старым софтом сломана? Сломана. Ну вот и всё, проблема объективно есть, а остальной твой флуд про «ну и что» не имеет никакого значения. Может, автор вообще давно умер и программа больше никогда не получит обновлений, например? А, ну да, нужно же обязательно с докером попердолиться
Пердолинг
Пердолинг
Пердолинг
Программа, написанная под Windows 95, с 99% вероятностью заработает в Windows 11 без всяких чрутов, докеров, виртуалок и прочего пердолинга
P.S. Я не говорю, что винда мастдай и всё такое (да блин, я сейчас вот этот вот коммент как раз пишу с винды, лол). Просто после того, как я нормально пощупал GNU/Linux, я начал понимать, что некоторые вещи в нём сделаны на порядок удобнее (и чисто по ощущениям — в среднем удобных вещей по сравнению с виндой в нём больше, чем удобных вещей в винде по сравнению с линуксами), а многие проблемы решать куда проще и надёжнее (а некоторые другие проблемы не возникают вообще). Да, он требует не быть домохозяйкой и уметь учиться, но лол, когда ты нормальный паверюзер, этот аргумент не является препятствием. И попытки превратить по каким-то параметрам линукс в винду (а-ля «я не хочу паковать полмегабайтный deb для популярных версий ОС, я лучше сделаю 500-мегабайтный AppImage и мне плевать, что пользователь потом хрен найдёт сохранёнки, доки и всё остальное») — редко являются чем-то объективно хорошим.
Еще есть snap, но он требует установленных служб. AppImage работает сам по себе, нужно только обеспечить достаточно места в ОЗУ и установить права на запуск файла.
Ну то есть опять пердолинг) Это явно не проще чем упаковать AppImage с одним конкретным известным и протестированным libFLAC
Почему два билда под XP и семёрку — норм, а два билда под убунты 18-22 и под 23+ — нет?Если уж так делать, почему бы libFLAC не подлинковать статически? Бинарник явно получится меньше, чем AppImage. А то блин все девелоперы делают, как им проще, не пытаясь даже подумать о сборке в статике, а потом мы имеем гитарные тюнеры по 500 МБ, калькуляторы по 200 МБ и нотепады по 300 МБ. В которых, к слову, внутри вставлены одни и те же библиотеки.
Потому что один билд AppImage проще чем стопицот билдов под все актуальные убунты и прочие дебианы)
1) Кажется, в SFML тупо нет такой опции (или я плохо смотрел)
2) Это не всегда технически возможно
3) Динамическая линковка теоретически позволяет юзеру (который не домохозяйка, но всё-таки) подменить библиотеку на более новую/пропатченную с исправленными багами/уязвимостями, ради чего, например, разработчики SDL городят какие-то странные костыли
Увы, нет. Саму libsfml* еще можно, зависимости уже нет. И опять же это не спасает от не той версии libstdc++, потому что она нужна не только программе, но и системе.
Те же libFLAC, libpng, libGLU, freetype и десяток прочих. Их приходится тащить с собой в сборку.
Там проблема в том, что если я линкую со слишком новой версией, то не будет запускаться на старых ОС, а если со слишком старой, то на новой не заведется работа с видеодрайвером.
Золотая середина мною найдена экспериментально, но всё еще не идеал.
Потом я уже почитал доки, и понял, что включать libc и libstdc+ в AppImage — крайне не рекомендуется. Официальная практика — собирать AppImage на как можно более старой версии ОС с как можно более старыми libc и libstdc++
В AppImage он тоже полезет, чтобы библиотеку подменять?
Короче, я вижу, мы тут топчемся на одном месте и фактически просто перебрасываемся минусами обоих подходов. На всякий случай, я хочу пояснить: я не говорю, что AppImage — это зло, которое надо выпилить и больше не вспоминать. Я хочу сказать то, что это инструмент, который полезен в строго ограниченном количестве случаев (проприетарка, abandonware, штуки, не допускающие статическую линковку, багованные проги, не умеющие в версионирование и т.п.); это хорошая крестовая отвёртка, но это не значит, что этой отвёрткой стоит завинчивать шлицевые саморезы, и уж тем более ей не стоит забивать гвозди. Использовать AppImage без нужного повода — это сводить преимущества GNU/Linux перед виндой в удобном версионировании, системе пакетов, удобной раскладке бинарников и либ к нулю и зря тратить ресурсы пользователя.
Второй раз приглашаю тебя показать мастер-класс.
Исходники игры у тебя перед глазами на гитхабе.
Сделай мне хорошо, чтобы я мог отдать один файл игрокам, и он установился/запустился хотя бы на моих двадцати тестовых дистрибутивах и версиях оных.
Но так, чтобы к этому файлу не прилагалась инструкция с кучей слов типа apt-get и yum update, а как в Винде — скачал, запустил, играешь. Доступно для простого понилюба-игрока, которых я понемногу пытаюсь привлечь к моим работам.
Ты придешь либо к AppImage/snap, либо к инсталлятору от GOG.
Всё ясно, вопросов больше не имею. Я ясно написал
Вот мой чек-лист. Всё вполне мейнстримно, кроме разве что Slax.
Список дистров
Ты где такие древности откапываешь? Кто-то реально сейчас на этом еще сидит и надеется, что для него лично кто-то что-то будет собирать в 2023? О.о
Про минт и федору не знаю, но думаю, что там такая же ситуация.
Касательно дебиана и убунты, кмк, достаточно ориентироваться на 20/22 и 10/11 соответственно. Остальное — уже древности. Если кто-то в течение пары лет не может сделать apt dist-upgrade — ССЗБ.
Пять лет — это не древность, это вполне себе рабочая система, которую человек настроил и работает с ней. Каждый год менять дистрибутив — не все желают.
А теперь я вспоминаю, что такое переустановка винды — когда тебе нужно КАЖДУЮ из полусотни установленных программ переставлять и конфигурировать по-новой, и это эпопея, затягивающаяся на несколько дней. Так что винду менять можно и раз в пять лет (а то и больше). А вот ту же убунту новую натягивать проблем по сравнению с виндой вообще ноль.
До тех пор, пока разработчики дистрибутива не включили твой проект в репозиторий — да, надо.
Особенно пользователя линукса, в котором многие программы ставятся именно с помощью сборки (многие из проектов на гитхабе не имеют даже бинарных релизов).
Многие — это сколько? И сколько из них носит именно прикладной характер для массового пользователя?
За последние пять лет я ставил под Linux всего две программы из исходников — компилятор для PDP-11 и эмулятор БК-0010. Уровень потребности в них — примерно сотня человек на всю страну :-)
Много (с полсотни), но всё они были в том или ином бинарном виде.
То есть, инструменты для профессионалов. Не игры.
В этом списке, могу предположить, только Taisei Project было необходимо собирать, остальное уже есть в бинарном виде.
То есть ты мог собрать, но по собственному желанию. Что возвращает нас к моему тезису — игры уже распространяются в бинарном виде, чтобы игроку было проще и не нужно было разбираться с CMake.
UPD: Только что глянул Taisei Project — есть сборки во многих репах, есть статичный билд для двух версий libc, есть flatpak. Это больше, чем у меня.
Аргумент не засчитан, давай другие игры.
www.scummvm.org/downloads/
Десятки версий для Linux + универсальные flatpak и snap.
Я понимаю, что тебе нравится собирать софт самому и не осуждаю, но…
Вообще, это официальный сайт движка, указанный в Википедии.
А по гитхабу, есть разные подходы — я для себя решил, что релизы держу там же, но многие считают, что это место только для исходников, а релизы постить нужно на сайте проекта.
Да почему на какой-то? На официальный сайт проекта. Я же не на какую файлопомойку отправляю.
Получение программ с сайта проекта — нормальный, штатный способ установки.
Почему официальный гитхаб хуже, чем официальный сайт? Тем более этот сайт ещё надо искать.
Ставить с сайта — это как раз виндовый подход, когда каждую прогу надо ручками искать в инете, ага.
Может, потому что гитхаб — это хранилище исходников, а сайт — это представительство? За готовой едой мы идем в столовую, а не на кухню.
Офигенно тяжкий поиск, ага. Первая же ссылка + проверить по wiki для 100% гарантии.
К слову, у многих проектов-то и сайта нет (в основном библиотеки всякие и тулзы). Мне обязательно надо надеяться, что у всего есть сайт, или проще сразу на гитхаб?На один переход больше, чем сразу на гитхабе. К тому же, даже если я найду сайт, где гарантия, что там будет нужная мне сборка и она не будет бомбить с не тех версий библиотек?
Опять инструменты для профессионалов.
Какие только причины не придумаешь, чтобы не соглашаться с тезисом «для пользовательских прикладных приложений или игр бинарная сборка — естественный формат распространения».
Приведи мне хотя бы три прикладные приложения уровня игр или какого текстового/звукового редактора (да хотя бы калькулятора), которые отвечали бы двум условиям:
1) Не предоставляли бинарные дистрибутивы для Linux ни в каком виде
2) Предоставляли сорцы и инструкцию по сборке со словами «так вы получите нашу программу под Linux, потом что»
Я уверен, что ничего такого не найдется. Потому что разработчики (даже любители) не идиоты, и прекрасно понимают, что если пользователю придется делать что-то сложнее скачивания и запуска с установкой 755 — он просто не станет использовать программу, потому что аналогов у каждого софта — тысячи.
И да, wget + sudo cp + sudo chmod тебе не положит куда нужно, допустим, те же маны.Категорически и очевидно неверное утверждение. Даже столь часто юзаемой штуки, как браузер, найдётся от силы 3-4 адекватных аналога (при этом каждый со своими «хитростями»), а уж если мы про что-то менее популярное — то там, как правило, альтернатив часто нет вообще. Или ты знаешь адекватные альтернативы ffmpeg, yt-dlp (нет, youtube-dl уже сдох), python, gparted и т.п.?
Если это
то он занимает несколько пограничное положение между миром пользовательского софта и профессионального — всякие эмуляторы обычно используют люди, знающие, что к чему.
Для обычных же игроков хорошей практикой является зашивать эмулятор в дистрибутив, что я сделал, например, с 16-битной версией игры — для пользователя запуск DOSBox проходит прозрачно через ярлык и ему не нужно долбаться с mount/cyrkey/uniscr.
Оба варианта не годятся. Игра должна запускаться прямо из каталога загрузки, другое дело, что из-за особенностей файловой системы Linux, пользователю придется открыть свой файловой менеджер и выставить права на запуск. Это неизбежный этап, отсекающий тех, кто не освоил это простое правило, но тут уже ничего не сделать.
Уже давно не софт, это операционная система в операционной системе, и мы говорим «браузер», подразумеваем «Chrome» для пользователей и IE/Edge для корпоративного пользователя.
Зачем ты мне опять суешь софт для профессионалов? Но примечательно, что всё перечисленное распространяется в бинарниках, а для последнего аж сделали целый livecd.
Ты ещё скажи, что к каждому распространяемому PWAD для дума надо целиком этот дум класть. Ага, к PWAD в 100 килобайт ещё 20 мегабайт самого дума, а ещё потом придётся этот мусор вычищать, если ты хочешь запустить его не через тормозной досбокс, а через, например, GZDoom или что-то подобное.Скажи это 99% игр, которые даже на винде требуют установки.И опять мимо. Во многих дистрибутивах Linux основной браузер — это Firefox, и если ты считаешь, что браузер — это Chrome/Edge (кстати, а с чего это ты забыл Safari?), то зачем же ты делаешь вообще билды под линукс — ведь по такой логике в мире только одна операционка, и это винда?
Кроме того, во многих (хоть и не во всех) подсчётах (например) Firefox вполне себе обгоняет Edge (хоть и идёт с ним ровненько).Случшай, если ты считаешь ffmpeg, yt-dlp и python софтом для профессионалов, то давай просто условимся, что на линуксе все пользователи — профессионалы.
(Забавно, кстати, что без этих трёх софтин даже на винде жить тяжело: задачи типа «скачать видос с ютубчика и пожать его так, чтобы он влез в ограничение дискорда» без yt-dlp и ffmpeg удобно не выполнить).Во-первых нет по очевидным причинам — yt-dlp питоновская софтина и по определению не может иметь бинарника; во-вторых мы не про распространение в бинарниках, а про наличие у этого софта аналогов, так что не переводи тему.
Я имею в виду установку игры, когда нужно просто нажать «Согласен» и «Да».
Линукс на десктопе это 2%, следовательно, можно выкидывать его из построения.
Забавы ради. Я понимаю, что число игроков под Linux пропорционально меньше, чем под Windows. Куда полезней будет под Mac сделать, это вторая десктопная ОС.
Но и там я не буду заставлять людей лезть в консоль.
Святая Селестия, ты можешь делать что угодно, я буду делать что угодно. Моя задача — чтобы те 2% игроков, которые захотят позабавиться с игрой на Линуксе, сделали это без слез, боли и запросов в Яндекс «как найти lixxxx.x.x»?
Предмет дискуссии в том, является ли мой путь более правильным, чем дать пользователю исходник и заставить его становиться девопсом самому себе.
Совсем не каждая установка «одной кнопочкой» успешна.
Так что даже если считать, что «установщик должен запускаться из каталога загрузки и в итоге ты должен получать готовую к запуску игру», это тоже не всегда выполняется.Так ты-то не выкидываешь. Ну и как бы 2% — это тоже немало, если что.А, не, если твоя основная цель — научиться собирать AppImage, тогда ничего против не имею. Но тогда к чему была вся эта философия «Unix-way не нужен, под линуксом всё должно быть как на винде и пользователи тоже должны быть дебилами»?Напомню, что через консоль даже в винде некоторые вещи сделать намного проще, чем из GUI. Тот же yt-dlp, к примеру. Так что консоль — это полезный инструмент, и если домохозяйке под виндой не уметь в ней работать простительно, потому что она просто смирится с невозможностью что-то сделать, когда возможность есть, просто надо почитать, как (да, такие люди, к примеру, свято уверены, что фотки с телефона только на нём и могут храниться и такие «у меня сломался экран на телефоне, всё, все фотки погибли», ты такой цепляешь кабель, сливаешь все по MTP и они с глазами курглее чем луна в полнолуние такие «как ты это сделал, ты чё волшебник???7?7семь»), то пользователь линукса уже обязан это уметь. Иначе пусть не мучает себя и других и идёт обратно на винду.
Мне кажется, проблема дискуссии в том, что мы по-разному понимаем слова «пользователь» и «Линукс». В твоём понимании Линукс — это такой продвинутый профессиональный инструмент, а «пользователь» — это очень опытный эникейщик, который может и диск разметить, и пакеты доставить и даже простую программку на баше сделать.
В моём понимании «Линукс» — это операционная система, нужная пользователю только для запуска программ, а сам «пользователь» — это человек, который запускает программы и делает в них свою основную работу — например, набирает письма «Дорогая Принцесса Селестия» или пишет посты на Табуне.
Так?
Твой пользователь с телефоном, кстати, ничего ужасного не делал — в отличии от Линукс и Windows, на телефоне понятие «файловой системы» неочевидно, и действительно, пользователю не нужно. Работа с ФС телефона — это уже уровень мастера по ремонту.
Если сидеть под линуксом с уровнем среднего пользователя винды — это и самому не использовать 90% возможностей операционки (т.е. считать невозможным то, что вполне можно было бы сделать), и мучиться при этом с непривычной архитектурой системы.Вот только давай опять не надо. Как по мне, это одна из основных вещей, которые должен делать телефон, на уровне «открыть браузер» или «считать QR-код», и все должны это уметь. Ну камон, не уметь скинуть фотки с телефона на комп, ну дикость же! И что, получается, то, что я каждый день-два скидываю себе на телефон fb2-шки с понификшена и фикбука, чтобы почитать их по пути на работу — это я его ремонтирую что ли?
Как минимум, показываешь навык высокого владения телефоном, потому что обычный пользователь не факт, что сможет это сделать. Иногда даже недостаточно подключить USB-кабель, еще нужны дрова на устройство. Самсунг, например, более или менее унифицирован, по крайней мере, Win 10 даёт сразу файловую систему. А вот какой Xiaomi не всегда.
Не говоря уже о том, что ты знаешь, где эти фоточки будут (что-то типа /emulated/0/sd/DCIM). Пользователь этого не знает, для него фоточки — это Галерея или ГуглФото.
Говорю же, в телефоне файловая система скрыта от пользователя, и с ней работают либо мастера, либо профи.
Всё-таки, ну блин, становиться профи оттого, что, к примеру, просто прочитал инструкцию (не dev manual, а именно пользовательскую) к своему девайсу — это звучит как нонсенс.
Нужно догадываться о существовании самого понятия «каталог».
Шутку про «справа диск С, слева диск С, зачем мне два диска С» ты конечно, знаешь.
Потребность в пользователях ПК возросла, планка снизилась. Это норма.
Я вот осознал и ужаснулся, куда катится мир, когда на этой смене в ЛМШ увидел, что есть дети, для которых простейшая задача «набрать номер мамы на кнопочном телефоне и позвонить ей» — невыполнима. И это при том, что кнопочные телефоны ещё не стали совсем уж архаизмом, в конце концов, мы же не о дисковых наземных, а просто о дешёвых мобильниках.Проблема в том, что раньше это действительно было шуткой, а сейчас, я боюсь, станет реальностью скоро — и люди действительно, случайно открыв в эксплорере два раза свой диск С:, с одного из них решат всё удалить.Потребность, например, в кардиохирургах или пилотах самолётов с ростом населения Земли тоже возросла, думаю, но что-то мне не хочется думать, что для них теперь планки тоже снижены — особенно настолько, чтобы не знать элементарных вещей.
Не настолько. В 10 раз, может, в 100.
Пользователями ПК же стали практически любые специалисты в любых областях, кроме совсем уже ручного труда типа «бери больше и кидай дальше», и это мы только про использование на работе говорим, не дома.
Снижение логично от массовости, в поддержке тоже. В 2000-м году на работе я обязан был уметь загрузить Windows NT без системного диска, если он снова улетал куда-то, и желательно, не за час, а побыстрее. Сейчас же если я вижу на ноутбуке радующий глаз Winmngr not found, я просто говорю клиенту «везите в сервис, сношайся всё конём». Мне не заплатят за эту работу даже пару тысяч, и мне оно не надо, и никому не надо — заберут ноутбук, выдадут новый по гарантии. Пусть дистрибьютор разбирается, куда этот Winmngr.exe убежал. Не моя забота.
Хотя я всё еще умею, но теперь это просто не требуется.
Пользователь ПК — это пользователь именно персонального компьютера, на котором он сам занимается выбором ОС, программ, в которых он будет работать, и задач, которые он с помощью своего ПК будет решать. И потребность в таких пользователях не сказать, что возросла кардинально.Знаешь, даже сейчас человек в саппорте, который не сможет банально переставить винду лично для меня будет смотреться дико.
Да, сейчас никто уже не будет лазать с Victoria по HDD в надежде пометить бэд сектора (если такое начинается, дешевле HDD поменять нет, я сейчас именно что не про восстановление данных — там цены на порядки выше), или никто не будет перепаивать проц начального уровня на мамке от ноута, потому что оснастка для этого и новый проц будет стоить дороже нового ноута; но блин, выкидывать ноут из-за полетевшего загрузчика винды? Серьёзно?
Не выкидывать, а отвезти продавцу или изготовителю. Пока ноутбук на гарантии — это его проблемы, а не мастера. Особенно с учетом того, что как устроено железо и разбивка диска конкретного ноутбука — знает только производитель.
А производитель ничего не знает, производитель — это отдельная R&D контора и отдельные заводы, и ни там ни там твой ноутбук нафиг не нужен. Если он неремонтопригоден, то сервису его проще утилизировать, чем отправлять производителю, который с ним ничего лучше сделать не сможет.
Я про сервис производителя и говорю.
Исходно шла речь о мастере на месте — сотрудника компании, купивший ноутбук, или частного мастера по ремонту, если заказчик физлицо.
Консоль давно пала, центурион.
Миллион сайтов «загрузить видео с ютуба», плюс тысячи бесплатных видеоредакторов, я лично рекомендую VSDC.
И да, ffmpeg софт для профи, потому что обычный медианный пользователь запустить его с аргументами командной строки не сможет.
Нахрена мне видеоредактор, если я хочу просто-напросто ffmpeg -i pony.mov pony.avi ?Обычный медианный пользователь Linux — сможет.
Ты не поверишь — я регулярно использую Visual Studio, Delphi и QtCreator. Но как-то не хочется мне заставлять моих пользователей это использовать.
С тех пор, как Microsoft придумал оконный интерфейс, больше можно не страдать.
Ты иногда выходи из мира профи и смотри, как обычные пользователи живут. Очень полезно, имхо.
Apple*Xerox*
Но «Периметр», сцуки, выпустил не я, а КДЛабы.
Могут, если захотят. А программа в исходниках заставляет их это делать.
Пользователи очень не любят, когда их к чему-то принуждают, даже если это бесплатный софт.
Консоль — такой же инструмент, как отвёртка. И им стоит уметь пользоваться, когда это надо, несмотря на то, что забить гвоздь или приклеить обои можно и без отвёртки (более того, отвёртка там будет только мешать).
Мы просто с разных планет. На моей, если я скажу клиенту «стоит уметь пользоваться установкой NET Core, если фреймворка нету», будет больно. Потому что клиент платит мне за то, чтобы не забивать этим голову, а запустить проект и начать работать с ним.
Я твою позицию в общем понял, когда сделаешь игру и опубликуешь её — можешь не собирать линуксовый бинарник, разрешаю :-) моё мнение на сей счет иное, пользователь всегда прав.
И что такое «быстрый запуск базы данных»? Конфигурировать кто будет? Пользователей, базы, таблицы создавать? На это всё равно нужно время, и ни один инсталлятор за тебя это не сделает.
Для однопользовательских баз — делает, по крайней мере, у адекватных разработчиков, которых заботит время своих клиентов. К многопользовательской базе еще прилагается администратор, само собой.
Еще ты упускаешь, что консоль и вывод консоли — это английский язык. Нет такого закона, чтобы пользователь ПК знал английский язык, и более того скажу, большинство его и не знает.
Это может сделать сама программа через внедренный сервер базы данных. Пользователю остаётся только ввести свой логин/пароль по умолчанию и начать работать.
Опять же, работа под Линукс, для которой нужны маны — это уровень разработчика или системного администратора. Для пользователя Линукс — это кнопка Мозиллы, кнопка ОпенОффиса и возможно, пара игрушек.
Видимо, по этой причине Linux на рабочем месте и используют 2% — примерно столько профессионалов среди пользователей.
А так и хорошо, что 2%, потому что хоть не стараются нормальную логичную ось сломать в угоду ламерам.
Если я в качестве профессионала могу сделать жизнь этих людей проще, например, путем публикации бинарной сборки своей игры или утилиты — я это буду делать.
Но в целом, еще раз — я понял твою мысль, и могу её принять. Подобное видение пользователя возможно, и скорее всего, где-то пересекается с реальность. Есть многое на свете.
требуют наличия git и cmake, а если у пользователя нет прав админа, на этом всё и закончится.
Выставить же права на скачанный AppImage в ~/Downloads/ можно и от пользователя.
Кроме того, на большинстве машин это всё уже стоит (как и build-essential, включающий компилятор, make и всё прочее), да и при сборке ты вполне можешь указать префикс в своём home-каталоге.
Нет, давно нет. Есть портативные сборки, zip, наконец, установка в домашний AppData.
Я что пытаюсь доказать, что в винде и в линуксе разные подходы, и перетаскивать виндовый в линукс — неправильно.
Довольно часто ко мне обращаются с поделками других программистов, которые прислали ексезшник, но не прислали ничего кроме. Или прислали екзешник, требующий UAC. Или rar-архив, который не так-то просто распаковать без доп.софта.
Почему-то корректной дистрибуции уделяется очень мало внимания в культуре разработки. А ведь это один из семи основных пунктов программного продукта, без которого он просто набор бесполезных файлов на компе.
Нам с NTFS на libFLAC вообще пофиг, он просто является обязательной зависимостью SFML, из-за чего приходится с ним возитьсяЭто конечно тоже пердолинг, но по крайней мере теоретическая возможность распаковать AppImage и подменить остаётся, если линковать динамически
Любая программа (особенно игра) через какое-то время становится abandonware, и тогда будет очень грустно — особенно если это проприетарный abandonware
И я ещё не говорил про карусель с билдами, например, под ARM, а не x86_64.
То есть в репе операционки есть libsfml, который не подходит к libflac из той же репы? Звучит крайне странно.Что-то мне подсказывает, что взять исходники и пересобрать для пользователя будет проще.
Пользователь НЕ УМЕЕТ ПЕРЕСОБИРАТЬ, БРАТАН, ОН ЗАПУСКАЕТ ЯЩИК С ОГОНЬКАМИ, ЧТОБЫ ПОИГРАТЬ В ИГРЫ.
Порвался, извините :-(
Я же говорю — откат на 30 лет, потому что вызов команд сборки — это уровень разработчика. А не пользователя.
Да, под виндой, где собрать хоть что-нибудь — лютый челлендж, это так. Но под линуксом сборка порой проще, чем установка пакета, лол (а для некоторых вещей это вообще единственная нормальная опция — например, когда ты пересобираешь модуль под текущее ядро). Вплоть до того, что к примеру, у тех же арчеводов, насколько я знаю, вообще бинарные пакеты не приветствуются, и всё делается через исходники и PKGBUILD.
Пора понять, что под линуксом сборка — это не что-то страшное, а вещь не сложнее твоей пресловутой одной кнопки.
И да, особенно хорошо это видно благодаря тому, что место костылям вроде autotools уступают удобные и вполне юзер-френдли системы сборки типа CMake или meson.
Ну по определению да. Разработчик занимается сборкой программ, пользователь — их запуском. Всякие софизмы тут не пройдут — если нужно вызывать make, значит, нужен уровень разработчика.
Сборкой уже разработанной программы может заниматься и пользователь — и это нормально, аналогично тому, как сборкой икеевских столов тоже занимается пользователь, а не разработчик и даже не производитель. Задача разработчика/производителя — положить в компелкт все нужные винтики и деревяшки, а в случае ПО — обеспечить простую сборку несколькими командами и отдокументировать конфигурационные параметры.
В которую, в том числе, входит и компиляция.
LOL, в случае IKEI как раз получается, что пользователь становится разработчиком мебели, по сути, в его квартире на время сборки возникает последний цех мебельной фабрики. И если разработка будет выполнена криво, и уже после сборки стол развалится, придавив пользователю ногу — это как раз и будет означать, что данный пользователь не смог стать разработчиком мебели, запоров последний этап разработки оной.
Если же говорить уже о коммерческой разработке, то попытка сунуть клиенту/платному игроку исходник и кинуть «читай мануал по make, ламер» вообще приведет меня под обоссаный забор.
Ты же понимаешь, что пользователь запнется уже на этапе «зайдите в каталог»?
Не говоря уже о вставке команды в консоль, Ctrl+V это некоторые специальные знания.
Но я даже не об этом, а о том, что даже если пользователь продвинутый и смог дойти до запуска от sudo — скажет ему CMake что-нибудь на бусурманском языке и конец истории. Ну то есть я понимаю, что если в строке будет что-то красное насчет libpng, то нужно ставить эту libpng, но если окажется проблема в версии — то и мне придется почесать голову, как же засунуть другую библиотеку, не сломав систему с её ссылками .so -> so.1 -> so.1.2
Линуксовая экосистема тем и хороша, что она, требуя пусть больше, чем минимальных знаний о компе, многие вещи реализует намного правильнее; а двух зайцев убить не получится, потому что часто «правильно» и «для домохозяек» — взаимоисключающие вещи.
Я не говорю о том, что не нужны сборки под винду для тупых; но если такой тупой пользователь поставил себе линукс — то он ССЗБ и пусть учится.Как бы во всём цивилизованном мире понимать английский (хотя бы на уровне понять о чём фраза) — норма для паверюзера.Блин, камон, pkg-config и find_package(… VERSION) придумали, наверное, не просто так?
Если у тебя в CMakeLists не стоит ограничение версии, а твоя прога почему-то линкуется с особо определённой версией, и валится при make, а не при конфигурации с понятным сообщением типа "-- Searching for SOMELIB — not found (required version 1.2.3, available 0.1.2)" — то это ты виноват, а не пользователь.Об этом за тебя уже подумали и даже специальный каталог для тебя сделали, /usr/local.
Это уже очень, очень далеко от пользователя. Как и английский язык.
Не может дистрибутор ПО полагаться на то, что его клиент знает английский язык и команды Linux.
Я уверен, ты очень сильный разработчик и опытный пользователь Linux — но я тоже не вчера за ПК сел, и так получилось, что я и разрабатываю, и распространяю. И прямо с прошлого тысячелетия, когда я скомпилировал программу на Бейсике с опцией BRUN45.EXE (по умолчанию), а клиент не смог её запустить без этого файла, и вместо перекомпиляции с правильной опцией прибежал ко мне домой жаловаться — у меня четкая установка: запуск программы у пользователя это забота не пользователя, а разработчика. Если пользователь не сможет запустить проект, он не будет искать решение, он возьмет другой проект или другого программиста, а я пойду под обоссаный забор.
Почему? Вот клиент заплатил за программу, скопировал с дискетки через Нортона на свой комп, запустил с диска С — а она говорит что-то на вражеском языке, да еще и не работает.
Нормально прийти и попросить исправить.
cyrkey/uniscr, кстати, я тоже в программу зашивать стал примерно в то же время — потому что мало того, что их могло не быть на компе клиента, так еще и заставить запустить их ДО запуска программы не всегда возможно — человек забыл, а потом расстроился от каракулей на экране и уже второй заказ делать не хочет.
Это не понял. Нет другой игры? В мире под миллион игр в целом и около тысячи поняшных. Не заведется — пойдет искать другую.
Игрок в компьютерные игры — эта та же домохозяйка. У нас тред про игры.
Знаешь, если я хочу поиграть в DOOM, а он не запускается, я не буду запускать Minecraft, потому что «ну тоже ведь игра», я разберусь, почему у меня DOOM не запускается. Обратное тоже справедливо.Это абсолютная чушь. В мире полно людей, которые умеют обращаться с компом и знают принципы работы под линуксом, и при этом вполне играют в игры. Не пойму, откуда взялся этот идиотизм, что «серьёзные люди в игры не играют/поней или аниме не смотрят/музыку не слушают/художку не читают». Глупость же.
Ну а если домохозяйка хочет поиграть в твою игру — так у неё не линукс стоит, а винда.
Ну, когда моя игра будет так же известна, как Doom, я тоже не особо буду париться насчет запуска.
Молодец, а теперь какой это процент от людей, которые играют в игры, но не знают принципов работы Linux? 5,10%
Напомню, мы говорим про линуксоидов, потому что домохозяйки сидят под виндой, для которой норма — бинарные релизы.
Я к тому, что пока я работаю на репутацию, а не наоборот. Невозможность запустить игру без бубна => отсутствие игроков.
Блин, разработка — это создание чего-то нового, а не реализация уже существующего из частей. Типа у нас что, любой автомеханик — это разработчик автомобиля, любой слесарь — проектировщик сантехники, любой сварщик — архитектор металлоконструкций, а любая кухарка, разогревающая обед в микроволновке — шеф-повар? Нет же, лол. Как по мне, это настолько очевидная вещь, что я даже затрудняюсь к ней аргументы-то приводить.что проблема не в дизайне (которым занимается именно что разработчик), а в тупом пользователе. И ИМЕННО ПОЭТОМУ сборка готового изделия — это НЕ разработка.
С БОЛЬШОЙ натяжкой разработкой можно считать, когда ты берёшь икеевский стол, и вместо того, чтобы следовать инструкции, берёшь дрель, ножовку и чемоданчик с метизами и городишь из него не стол, а, допустим, полку. Но когда ты тупо собираешь по инструкции — тут никакой разработкой не пахнет.
И да, ты ещё не ответил на вопрос, почему если я делаю pip install yt-dlp — я пользователь, а вот если я делаю pip install pytorch — то уже разработчик (ведь pytorch в процессе установки автоматически собирает свои сишные части). Или когда я делаю apt install firefox — то тоже пользователь, а apt install linux-image — разработчик не забываем про автосборку модулей в DKMS в процессе обновления ядра.
Нет, называть разработчиком тех, кто просто условно жмёт кнопку «установить» (и неважно, кнопка эта — это «apt install» или «cmake… && make -j && sudo make install») — это слишком большая честь. Таких «разработчиков» я бы на работу точно не взял бы.
Еще раз — разработка программного обеспечения включает в себя в том числе компиляцию программного кода в бинарник (нативный или байт-код какой). Исходный код — это еще не программа, это исходный код программы, если мы не говорим о чистых интерпретаторах типа PHP.
И да, разогрев обеда в микроволновке тоже требует компетенций, как минимум — не обжечься, как максимум — не использовать металлическую посуду. Эти компетенции не делают кухарку шеф-поваром, так же, как сборка икеи не делает меня мебельным мастером.
И да, если нужно обед подогреть — то я становлюсь поваром, пусть и самой низовой категории.
… который может не подойти к программе, поэтому из репы брать его не получится или опять пердолиться на стопицот разных сборок так же как и с libFLAC. Или может даже подойдёт, но в старых убунтах (и особенно дебианах) старая версия без нужных фич, и поэтому придётся таскать с собой новую версию с нужными фичами (а эта новая версия потребует новые фичи из своих зависимостей, поэтому всякие libFLAC'и и прочие freetyp'ы тоже придётся положить с собой)
Если эти исходники вообще есть, что не факт
У нас как разработчиков задача — уменьшить число сборок, чтобы поменьше пердолиться, поэтому мы ничего под конкретную операционку билдить не хотим, мы хотим сбилдить одну сущность сразу под всё, и сейчас такой сущностью может быть только Appimage (ну или бинарник, в котором статически слинковано вообще всё, но, опять же, это не всегда возможно)
Ещё раз, любая «актуальная софтина» через время станет abandonware. И спасибо что NTFS исходники выкладывает и мы сможем их пропатчить через -дцать лет, но не все разработчики такие
У пользователя AppImage просто работает, никаких сложностей нет (ну кроме как libfuse2 поставить, но это уже к убунте вопросы)
(здесь должен был быть какой-нибудь пример abandonware-проги, но чёт ничё не вспоминается, лол)
К слову, опробовал. Миленько, хотя даже первого босса пройти не могу, слишком плотный огонь. Но видимо, в том и суть жанра.
AppImage следует пути Windows — каталог программ это RO дерево, каталог пользовательских данных может быть любой, включая домашний пользователя или указанный от настоящего корня (а не виртуального).
Я сохраненки пишу в AppData профиля, который в Linux прекрасно воспринимается как ~/local. Решение работает.
Все-таки скорее под Windows 98. Там очень сильно поменяли API и фактически, создали основу, которой потом пользовались еще 15 лет вплоть до появления UWP (который так и не стал особо популярен).
Вот это опять же дичь, которая меня бесит — в Windows я могу поставить себе 40 тысяч версий одной и тоже программы, по желанию включив одну в PATH для умолчания, а остальные либо указывая явно пути запуска, либо сделав батник с установкой переменных.
В Linux даже поставить две версии какого-то компилятора (каждый со своими заголовками и либами) — это путь боли и страдания.
Почему же у меня на билд-ферме есть штук пять gcc, начиная с 6.3, и llvm+clang 9, 11 и 13 — и когда я их ставил, у меня не было никаких проблем?
А под виндой такое не работает, потому что там совершенно упоротый способ поиска тех же библиотек и надо всё время шаманить с PATH (и ловить тупые ошибки из-за того, что, например, MSYS2 делает это одним способом, mingw32 — другим, а gnuwin32 — третьим, а забандленная с Qt версия mingw32 вообще непонятно как).
Вот уж по поводу чего к линуксам нельзя придраться, так это по адекватному стандарту версионирования библиотек и бинарников (которые ты, к слову, можешь спокойно запускать, не копаясь с PATH и прочими костылями).
Это очень сильное утверждение, учитывая то, что Win32 API, который использует 90% софта — часть ОС, а в Linux чтобы запустить какой-нибудь калькулятор, нужно ставить в систему GTK или Qt.
Windows поддерживает упомянутый Win32 API с 98-го года (отдельные функции еще раньше). Вроде как проблем нет.
В 98-м не было дотнета, а весь рантайм всегда можно было скопировать, за счет того, что в Windows инженерный гений сделал по умолчанию поиск либ в ./ — а в Linux ищет где угодно, но только не в ./
LOL, некоторые либы требовалось ставить в конкретный каталог, например, в /usr/local/lib, а не в /lib64
Любая попытка сделать что-то, не предусмотренное официальным репозиторием — легким движением руки превращало систему в Slackware времен make & make install
А если не подтянет? Мне нужен Firebird 2.5 на моём сервере, в репах только 4.0
Установить пакеты-зависимости нельзя, их нет в репах. Приходится брать tarball и вспоминать славные 2000-ые.
Ну вот и вся философия Linux. Не нравится Linux — напиши свой :-)
Потому что это откатывает нас на 30 лет назад, когда любой пользователь был программистом.
Но всё ещё не любых прог, что немножко грустно
Прикольный, кстати, мини-фанфик получился)
А текстур пять, что создаёт некоторое однообразие.
Я ввожу два дополнительных свойства (прыжки между уровнями + повышенный HP), что даст разнообразие.
По этой причине, новые игры на этой связке уже не делаю — под следующий проект выношу улучшенный движок на Delphi/FPC и SFML с PascalScript (от разработчиков последнего есть официальное разрешение на использование, так что норм).
То есть для простых приложений — скачал образ, одним кликом смонтировал, вторым кликом запустил. Не нужно ни захламлять систему сотней версией фреймворков, ни пытаться через игры с LD_LIBRARY подсунуть приложению библиотеки в домашнем каталоге, ни даже беспокоиться о том, подхватит ли прога so-файлы программные или системные.
Один образ, всё включено, минимум зависимостей, кроме конечно, разрядности ОС. Проект запускается от El Capitan до Monterey, а это, для сравнения, 6 лет разницы. Доступа к Ventura и Sonoma сейчас нет (попозже поищу), но думаю, что и там запустится через трансляторы самой MacOS.
Вывод — две самые популярные ОС рекомендуют собирать софт по принципу «всё своё ношу с собой, систему не захламляю».
Конечно, для компиляции софта фреймворки и .so нужны в системе, но мы речь вели о дистрибуции готовых приложений.
Это на самом деле большая проблема, отчасти решаемая цифровой подписью, которую скорее всего закажу в этом году.
Для конечного пользователя разницы нет, я смеху ради отправлял клиенту скомпилированный пустой проект Delphi и его лицензионный антивирус не пропускал со словами «тут опасно, оно тебя съест».
Ну или писать инструкции для пользователей «мамой клянус, не вирус это, разрешите запустить, позялуйста».
«Ковальски, варианты?»©
Ну то есть вариант есть и это облачные решения, и мир туда шел до последнего года, пока не выяснилось, что владелец облака может отключить его к дискордовой бабушке без объяснения причин и твой бизнес в огне.
Если не повезло, и эвристика показала, что тут злое зло (такое часто случается с дельфийскими приложениями, к слову) — то антивирус как раз блокирует, и пока ты не добавишь исключение в антивирус — запустить не сможешь, он просто будет удалять этот файл в карантин.
А вот не нативные приложения, например, для dotnet или java, почти никогда не попадают под подозрения антивируса. Почему так — хз, но многолетние наблюдения показывают, что чаще всего дельфийские бинарники режут, потом идут C++ для WinAPI, гораздо реже приложения Qt и наконец, почти никогда — приложения на C#, вне зависимости от версии платформы.
Попробуй разрабатывать десктопные приложения для Windows при включенном антивирусе, поймешь.
(поросячий визг Касперского) Файл Project1.exe заражен и помещен в карантин.
Всё, отключаем антивирус, работаем дальше.
Для простых смертных лучше уж иметь хоть какой-нибудь десктопный антивирус, наверное
Варианты?
Вот я сейчас в Delphi 10 (Community, естественно, пиратку с кряками я не использую) скомпилировал пустой проект Project1 с пустой формой TForm1 на библиотеке VCL.
Вот результат сканирования Virustotal. 13 угроз.
Спойлер
Беру свой любой проект, тот же редактор кубов на OpenGL. Уже лучше. Всего 4 срабатывания. Но всё еще отстой.
Беру свой мегапроект игры — и вижу 3 срабатывания. Офигенно как. Сотни скачиваний.
Наконец, последний проект — который двойной, Delphi и FPC (над совместимостью пришлось потрудиться, но оно того стоило). О чудо, FPC-бинарник тоже показывает вирусы, правда, всего 2 срабатывания. В дельфийском варианте одно срабатывание, потому что не используем VCL.
Чего здесь нагуглить и исправить можно? Если антивирусы просто берут и по каким-то фрагментам находят несуществующие угрозы?
Собственный компьютер проверил через KVRT — результат чистый, вирусов у меня нету. Это на тот маловероятный случай, если я действительно заражен и все свежие exe-файлы тоже выпускаю с порчей.
P.S. Да, там также говорят про отсутствие подписи и 32-битность как подозрительные факторы.
Ну вот я добавил some code во все проекты. Все дельфийские проекты всё еще показывают как вирусы, 2-3 совпадения.
Завтра принципиально выделю немного времени и прогоню все свои разработки на Delphi, которых у меня как единорогов в Кантерлоте — хоть крупом жуй.
Уверен, что 90% из них будет показывать как вирусы.
И да, из той же статьи
это означает, что антивирусы не работают — потому что код в обоих версиях одинаковый, а получение подписи — вопрос 15 тысяч даже сейчас, это вполне по силу злыдням.
Тогда почему virustotal прямо пишет названия вирусов в строках анализа, а не, к примеру, «тут странный бинарник, запускайте осторожно»?
Может быть (надевает шапку фольги), потому, что задача антивирусов — выдавливать приложения из десктопа в облако, где их можно легко отключить за неправильное поведение пользователя?
Выше давал скрин моего вирустотала, там и названия вирусов и стыдливое Detected для Гугла.
Да что говорить: я вот ради эксперимента загрузил бинарник firefox, с которого вот прямо сейчас это пишу — он мне там нашёл какой-то Backdoor.Lotok.bsf (что, впрочем, тоже эвристика — как пишет первая же ссылка в гугле, это a heuristic detection designed to generically detect a Trojan Horse).
Компьютер без установленного антивируса не видел уже лет 10, не считая специализированные машины специалистов.
Не говоря уже о встроенном механизме защиты в Windows 10, который ЛЮБОЙ самодельный бинарник без специальной подписи (далеко не за 15К) не позволяет запускать без сообщения «приложение может быть опасно»
Выше уже ответил, вирустотал показывает конкретные названия зловредов в моём бинарнике, хотя их там нет.
Мне когда-то с Доктором Вебом помогло — отправил им свой экзешник, на котором происходило ложное срабатывание, и через некоторое время оно прекратилось.
Правда, было это давно, как сейчас — не знаю.
90% игроков так не сделают, они удалят и скажут «сыпасибо, антивирус, спас от заразы».
Самохостинг игр в этом плане похуже.
То есть, уровень как минимум девопса. С чем мы и раньше согласились. Не можешь понять, чего тебе там программа сказала в консоли на чужом языке — не сможешь работать.
Когда Linux создавали, размеры жестких дисков измерялись в мегабайтах. Сейчас они измеряются в терабайтах. Не вижу особой проблемы.
И нет, обычно это действительно проблема не полноценных компов, а нетбуков с SSD в 512 гигов, планшетов/смартфонов (блэт, когда приложение МКБ весит 414 мегабайт, МТС-банка — 270, почты — 228, а сбербанка — вообще 600, а у тебя 4 гига внутренней постоянной памяти (а на SD приложения уже давно ставить нельзя, я помню такое только во втором андроиде) — невольно задаёшься вопросом, что в него такое напихали, когда всю его функциональность можно уместить в единичные мегабайты от силы) и всякого эмбеддеда с мелкими eMMC-флешками и nanoSSD.
Ну то есть минус 90% населения страны, понятно.
Это вообще отдельная история, там приложения распространяются централизовано и особого выбора у разработчиков нет, как собрать дистрибутив. Но да, сейчас телефон меньше чем на 64 Гб внутренней памяти уже бесполезно рассматривать, а для активных пользователей приходится 128 подбирать.
Туда вообще пользовательские приложения не ставят, насколько я понимаю — это тоже совсем другой сектор.