Введение
Задался я вопросом: почему бинари для Windows работают на ВСЕХ виндах, а бинари для Linux не то чтобы на линуксах 2-3 летней давности - а вовсе в пределах одного релиза? Задался и нашёл ответ. Способ сделать бинарник универсальным есть. Нужно только очень захотеть.
Показателен опыт Icculus. Когда он ушёл из Loki Games, он портировал несколько игр и на 3 года куда-то делся. В 2010-м произошёл триумфальный возврат: Humble Bundle, DRM-free, Windows, Mac OS X, Linux!

Эта идея мне страшно понравилась!
Когда начался Steam для Linux, Icculus бросил идею собирать "по фен-шую" и стал собирать под убунту. Ubuntu 12.04 стала стандартом де-факто для сборки игр. И это неплохо: в эпоху Steam, собирать несвободные игры стал не один лишь Icculus, а целая толпа людей. Им сложности не нужны.
Первый опыт
Ну что ж, установил я CentOS 5 в ритуалку. Обновил. Попробовал собрать что-нибудь несложное - Neko Mario.
1). Зависимость одна - libSDL. На официальном сайте внезапно нашлись RPM-ки! SDL, SDL Mixer, SDL Image, SDL ttf и SDL_gfx. Выяснилось, что 32-битные RPM-ки собраны в CentOS 5, а 64-битные - в CentOS 6 - в связи с чем 64-битные выдают ошибку "хочу GLIBC 2.12, а у вас 2.4". Пришлось пересобрать.
В процессе пересборки то ли image, то ли gfx слинковался с libpng.so.3 вместо libpng12.so.0. Это был первый "подводный камень", с которым я столкнулся. Решилось пересборкой RPM-ки libpng без флага --compat
А ещё оказалось, что libSDL с сайта невероятно гибок! ldd выдаёт отсутствие зависимостей от иксовых либ, хотя зависимость есть! Просто используется не static и не shared линковка, а dlopen(). Типа "есть у тебя иксы в системе? Нет? Ну и пофиг - через directFB отрендерю". То же самое и со звуком: поддерживается всё: OSS, ALSA, ESD, ARTS и PULSEAUDIO. Но если в системе нет каких-то из этих либ, то SDL всё равно работает! Я не преминул возможностью пересобрать 32-битную RPM-ку, которую собрали без пульсы.
Моя сборка Neko Mario
Пробуем что-нибудь посложнее
Эмулятор PCSX2 раньше работал в линуксе этих лет. Осталось только отследить коммиты, ломающие совместимость, и откатить их.
(о том, что откатывал, допишу позже)
Понадобилось скачать: самый новый cmake, NVIDIA Cg, wxWidgets, SoundTouch и GLEW. И SDL, но он уже есть.
Официальные сборки cmake работают в CentOS 5 - использовал их. Для поиска готовых пакетов с SoundTouch и wxWidgets я воспользовался сервисом http://pkgs.org/. Например, wxWidgets нашёлся в репозитории EPEL - почти официальном. Для NVIDIA Cg есть RPM-ка. В итоге собрал сам только GLEW.
PCSX2 1.4.0 хочет минимум GCC 4.8. На моё счастье, существует Red Hat Toolset - GCC 4.8 для CentOS 5. Причём он волшебный: готовые бинари не просят самый новый C++ Runtime в виде libstdc++.so.6, который вы наверняка видели в архивах с играми.
В общем, основная работа была с откатом назад коммитов, повышающих требования к GTK, и всё. Кроме того, в один момент я пошёл не туда, и чтобы получить libEGL.so, обновил Mesa с 6.5.1 (системный) до 6.5.3. Но потом нашёл ключ cmake, отключающий эту зависимость, и понял что потратил время зря.
Моя сборка PCSX2 1.4.0
В следующей части: как я патчил PCSX2? Возможно ли использовать CentOS 5 не только в качестве билд-фермы? Мега-сложность: Qt 5. Архисложность: GTK 3, wxGTK 3, и поддержка Wayland! И несколько вопросов умным людям