Именно в такой ситуации я оказался буквально пару месяцев назад и хочу поделиться историей решения проблемы.

Наши вводные:

  • Современный ноутбук с Ryzen 9 HX и 32 gb оперативной памяти

  • Операционная система Arch Linux

  • Библиотека из 455 игр, процентов 90 из которых доступны только для Windows

В принципе, для обычного пользователя, уже давно существует официальный пакет Steam для Linux с функцией запуска игр через Proton, но он не торт. Не все игры в нём работают хорошо, запустить что-то рядом с игрой (в том же префиксе) сложно, а значит все моды, Cheat Engine и любые другие способы себя развлечь недоступны.

Следовательно, возникает вопрос: а какие есть ещё варианты?

С этим вопросом я обратился в спортлото к Gemini и попросил поискать в интернете какое-то решение моей проблемы, но ничего найдено не было.

Тогда я подумал примерно так: если игра как-то ± запускается в Proton, пусть и не так хорошо как я хочу, а протон построен на Wine, может быть я смогу запустить Steam и эту игру в Wine?

Так на моем компьютере оказался установлен Wine из репозиториев Arch, а затем, когда оказалось, что Wine из репозиториев открывает Steam как пустое чёрное окно, Wine, собранный из исходников, но всё не то.

Какие плюсы и минусы у Wine, собранного из master ветки?

  • NTSync по умолчанию, в ядре оно уже есть, а значит игры работают чуть лучше.

  • GStreamer не ломает сборку, работает, а значит внутри Wine видосики будут рендериться на GPU или расширениях, а не процессоре.

  • Сборка по умолчанию для X11, который успел устареть два раза, то есть для запуска на моем компьютере нужно использовать XWayland что плохо.

  • Сборка по умолчанию использует GL renderer который так же успел устареть два раза, а хочется Vulkan.

  • Иногда поддерживающие Wine принимают в master достаточно спорные и сомнительные патчи вызывающие проблемы с уже работающими программами.

Включаем сборку с Wayland и Vulkan, запускаем Steam и снова черное окно.

Где-то здесь программист Саша по версии 2018, 2020 или даже 2022 года, скорее всего, сдался бы.

Нет никакой проблемы разобраться в коде на Си. Иногда это даже проще кода на Go или JS, так как всё происходит явно, но объём работы и, что важнее, поиска информации, такой, что можно работать в режиме 8/5/2 несколько месяцев и всё равно не получить никакого результата.

Теперь всё по-другому

Я не люблю разговоры, что ИИ всех заменит. Я использую ИИ в работе и слишком хорошо понимаю, какие у этого подхода проблемы и пробелы. Они не на уровне кода. Я даже уверен, что могу после длительного спора доказать любому, что определение ИИ как «ИИ» некорректное.

Но кто мы, блин, такие, чтобы в 2026 году, не пользоваться бесконечным генератором осмысленного текста?

Мне очень понравилось сравнение, которое придумал кто-то из пользователей запрещенной в РФ соцсети, кто представил это как фентезийную вселенную, где волшебник осваивает заклинание призыва призывателей. Да каждый следующий из них работает процентов на 10 хуже, чем предыдущий, но работают же.

Давайте подумаем:

Допустим мы, как кожаные мешки, решили сделать ещё один сомнительный патч для Wine. Какая наша последовательность действий?

Кажется, первое, что нужно сделать — собрать команду, которая будет работать над необходимой нам функциональностью. Ну примерно…

такую
такую

Я бы хотел быть миллионером, плавать на яхте по Средиземному морю и по щелчку пальцев нанимать любых экспертов из любого уголка нашей планеты, но пока я — не он, а поэтому командой будет ИИ, а значит…

Дорогая команда, давайте разберёмся, почему здесь чёрный экран.

Программист Саша не очень представляет, как делать отладку Windows-приложений, запущенных в Wine на Linux. Это, в целом, уже звучит как заклинание.

Программист Саша хорошо разбирается в Go и Rust и как написать приложение без упора в IO. Что такое Vulkan и что такое рендеринг?
Совершенно непонятно, но можно спросить аналитика, а главное, там, где раньше мы получали галлюцинацию, теперь есть Exa и Bright Data, которые можно подключить, как MCP, и попросить найти настоящую информацию.

Сегодня Саша не программист. Надеваем модный костюм с белым воротничком и вот мы — почти бизнес-заказчик.
Описываем менеджеру нашу проблему, аналитику говорим поискать в интернете похожие кейсы, а разработчикам — собрать и запустить Steam внутри Wine с включённым отладчиком.

Тут должна быть реклама моего собственного мультиролевого агента, которого я использовал в процессе разработки, но я её не придумал.

Так мы обнаруживаем, что CEF (это такая коробка с Chromium, вокруг которой построен Steam) при GPU-рендеринге пытается писать на экран из параллельных процессов, а в Wayland такое нельзя.

Где-то здесь я бы мог начать показывать много примеров кода, там гонки данных, веселье с NT синхронизацией на Linux, и прочий демонический треш, но из 8 тысяч строк кода, которые пришлось перепроверять и иногда переписывать за агентами, сложно выбрать что-то конкретное, поэтому вот ссылка на ветку, а я разберу только…

Cамые неожиданные, по мнению автора, как сетевого программиста, кейсы:

В Windows процессы из одной группы могут писать в одно окно. В современном Linux — нет. Говорят, что это безопасно и правильно, но нам это действительно нужно.
В целом, это было главной проблемой, потому что в веб-фронте, к которому автор привык, об этом даже не думают, а в бэкэнде мы обычно стараемся изолировать объекты и прятать их за mutex, либо использовать атомарные указатели, создавать пулы объектов и доставать из них ресурсы в момент использования.

В случае с черным окном Steam, оказалось, что несколько потоков пишут в одно и то же окно, и это не может работать, если не изобрести самодельный композитор внутри Wine. Что я там говорил про сомнительные патчи?

Весёлое — синхронизация всего этого добра. При ресайзе элементы меняют размер с разной скоростью, в итоге анимация выглядит как Windows XP.

В Windows и, в целом, на уровне производителей к каждому монитору прикрепляют некий EDID с массивом информации о мониторе. В современном Linux композитор съедает EDID и изолирует от приложений эту информацию.
Звучит безопасно, но некоторые игры не позволяют выбирать монитор, если у него нет EDID. Например, Gothic 1 Remake.
Пришлось сочинять генератор подложного EDID. Тупо, но зато можно выбирать монитор и его разрешение.

Масштабирование DPI в Wine это какой-то ужас. У нас есть реальное разрешение экрана и то которое пользователь указал сам, scale экрана в процентах и параметр DPI в Wine. Как на основании таких вводных посчитать размеры окна и его частей решительно непонятно.
Отдельный анекдот — fractional scaling, который только начали внедрять и без которого float размеры не работают. Умножать разрешение на scale в процентах, в целочисленной системе счисления — весело, но больно.

Вся концепция Vulkan построена вокруг слоев (layers) которые “накладываются” друг на друга. Это очень интересно пока мы не оказываемся в ситуации когда у нас слои начинают слоиться в Linux, продолжают в Windows и игра начинает работать поверх этого всего.
На удивление не вызывает особых просадок, но бывает забавно, когда в Linux включен слой валидации который начинает отсыпать ошибки внутри какой-нибудь очередной инди-игры.

Резюме

  • Работать над нормальной поддержкой Wayland в Wine было очень интересно и познавательно.

  • Рисование интерфейса и работа с графикой — во много те же грабли с IO и синхронизацией, только сложнее.

  • На моем ноутбуке FPS, от ~40 с GL рендерингом и XWayland и ~50 в Proton, вырос до весьма приятных ~60.

  • Объем кода до первого не-черного окна был 500 строк, после нормализации вырос до 8к строк, а сейчас, после дополнительных доработок, оптимизации и добавления настоящей поддержки геймпадов, которая не тянет на отдельную статью (но серьезно, почему в 2026 никто не сделал это, кроме меня?), разрастается до страшных 20к, которые мне все пришлось прочитать.

  • В master ветку Wine мой PR не забрали, сказали что ИИ не имеет права писать код, да и бог с ними.

  • Wine — идеальный проект для современного переписывания на Rust, кодовая база иногда настолько ужасна, что невозможно представить как это переписать более логично и согласованно и Си здесь вообще не помогает.

  • В процессе разработки я использовал собственное приложение-агента, где в чате может жить несколько моделей с разными ролями, это очень классно помогает в таких сложных проектах и тут могла быть его реклама, но оно пока не готово, а рекламу не придумал.

  • Работа над этим проектом потребовала УЙМУ времени. Если бы в июне я не оказался свободен — я бы это не сделал никогда.

Если по какой-то причине вы тоже являетесь пользователем Arch Linux можете тоже поставить Wine с моим сомнительным патчем из AUR. Обещаю его поддерживать как минимум пока не найду работу.
Стим не будет мигать, игры вроде готики запустятся и будут стабильно работать, в том числе с геймпадом и даже в режиме D-input.

Безымянный ставит класс
Безымянный ставит класс

paru -S wine-gohryt-wayland-wow64