← На главную

Порт Wine на Astral: Cogmind и Deltarune работают, Steam падает

24.06.2026 14:38 · hackernews

Автор проекта Astral, самодельной операционной системы, решил портировать на неё Wine. Цель — запустить игру Cogmind, 32-битный roguelike только для Windows. Существующий порт Wine был сырым — даже notepad.exe работал с багами.

Сначала скачали MinGW для компиляции PE-библиотек, и notepad.exe заработал. Дальше — проблема с графикой. Wine требует EGL, но в сборке Mesa под Astral его не было. Mesa не поддерживает EGL на бэкенде xlib, пришлось переходить на DRI (Direct Rendering Infrastructure). Автору пришлось патчить Mesa, чтобы X.org запускался без /dev/dri. В итоге EGL заработал, и игра Deltarune запустилась.

Но Cogmind — 32-битный, а Astral — 64-битная ОС. Решение — режим WoW64 от Wine. Он не требует 32-битных Unix-библиотек, а транслирует 32-битные вызовы в 64-битные на лету. Для этого пришлось добавить в ядро поддержку LDT (Local Descriptor Table) — таблиц сегментов, которые разрешают 32-битный код в 64-битном режиме. А ещё — поколдовать с обработкой сигналов и системных вызовов в Wine.

После реализации WoW64 и исправления пары багов в ядре Cogmind запустился. Игра была играбельна, но сломалась загрузка таблицы результатов — TCP-соединение с серверами открывалось и сразу закрывалось. Оказалось, что в функции __wine_unix_call_dispatcher автор забыл сохранить регистр при переходе из PE в Unix. Это вызывало неопределённое поведение. После фикса таблица результатов заработала.

Автор протестировал и другие игры. FTL работает полностью. Steam устанавливается, но падает при запуске Chromium из-за битой функции GetInterfaceAddresses(). Factorio открывает окно, но зависает на загрузке. Noita и Spooky's Jumpscare Mansion стартуют, но тормозят. Plants vs. Zombies и Half-Life упираются в DRM или баги C++ runtime. Unity-игры не работают из-за проблем с wine-mono.

Автор считает, что порт доказывает: хобби-ОС могут запускать много игр, но до нормального ежедневного использования ещё далеко. В планах — доделать Steam, а затем заняться оптимизацией ядра, новыми драйверами и исправлением багов.

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