← На главную

Open-source Principia вернулась на Windows XP — релиз на GitHub

29.06.2026 13:23 · hackernews

Разработчик Principia вернул игру на Windows XP в её open-source версии. Principia вышла в 2014 году и тогда поддерживала XP. Сейчас, когда код открыт, современные тулчейны и зависимости (например, UCRT) со старыми версиями Windows не дружат. Основная проблема — сборка под XP. Разработчик решил собрать кросс-тулчейн сам, на Linux, для Windows. Взял за основу Dockerfile Мартина Стуршё (автора llvm-mingw), переписал в shell-скрипт, настроил на 32-битную архитектуру (i686-w64-mingw32) и системную рантайм-библиотеку MSVCRT с версией WIN32_WINNT=0x0501 (это и есть XP).

На пути встали грабли. Сборка GMP (GNU MP Bignum library) на GCC 16 падала — виноват C23, где пустые параметры в функциях трактуются жёстче. Помогла конфигурация -std=gnu99. Потом выяснилось, что libstdc++ из GCC 16 требует функцию GetDynamicTimeZoneInformation из Win32 API, которой в XP нет. Патч позаимствовали из w64devkit — он делает вызов динамическим, с проверкой существования символа.

Собрали зависимости: zlib, libpng, Freetype, libjpeg-turbo, SDL. Самой проблемной оказалась curl — начиная с версии 8.18.0 она использует freopen_s из msvcrt.dll, которой в XP нет. Пришлось откатиться на curl 8.17.0. GTK3 (нужен для диалогов) решили пока не трогать — слишком тяжёлый. Вместо него встроили экспериментальные диалоги на Dear Imgui, хотя многие ещё не реализованы.

Сама Principia собралась не сразу — вылезла ошибка с несовместимостью __stdcall в файле pipeline.c из движка TMS. Заменили кастомные typedefs на готовые из GLAD — заработало. Бинарник запустился в Wine, добрался до сообщения об отсутствии OpenGL — значит, все жёсткие зависимости от XP-шных API сняты.

Тестировали на реальном железе — старом ПК с AMD Phenom II X4 955 и ATI Radeon HD 3000. Windows XP ставили через Universal NT Installer. После танцев с драйверами (Ethernet, ATI, Firefox) Principia запустилась. Шрифты были кривые, но то же самое показала и оригинальная Principia 1.5.1 — значит, проблема в древних OpenGL-драйверах ATI.

Для работы TLS (нужен доступ к сайту сообщества) заменили бэкенд curl с Schannel на mbedTLS версии 3.4.1 — последней, поддерживающей XP. Сделали NSIS-установщик, который регистрирует протокол для уровней. Все скрипты сборки лежат на GitHub, под XP выпущен специальный релиз 2026-06-10-xp. Официально поддерживать его не обещают, но порт работает.

Читать оригинал →