История изменений
Исправление atrus, (текущая версия) :
Так а где суть доклада?
Хотят найти узкие места, мешающие работе wine и внести в ядро изменения, чтобы wine работал глаже. Цели реализовать WinAPI в ядре Linux нет, только добавить то, что тяжело реализовать в user space. И только тогда, когда быструю реализацию нельзя создать в user space.
Первая боль: Проблема нечувствительных к регистру файловых систем. Разрабы под венду из-за этого не заморачиваются, а в Linux потом всё глючит. Wine эмулирует это, но с большими накладными расходами.
Решение: Начиная с ядра 5.4 можно включать нечувствительный к регистру режим в отдельных директориях. И игра будет работать и остальную систему не поломаем.
Вторая боль: Не совпадающий API синхронизации потоков. В венде часто полагаются на WaitForMultipleObjects(), которая может проверять изменение состояния целой пачки разношёрстных объектов, типа потоки, мьютексы, events и т.д. Реализация в Wine - целый комбайн из нескольких механизмов.
Решения пока нет, есть черновой вариант на основе футексов.
Третья боль: DRM и античиты. Их реализация не полагается на API, используя вместо этого сисколы венды, которые не перехватывает Wine (потому что не эмулятор, а реализация API), они попадают в ядро Linux и там игра крешится, потому что Linux не реализует сисколы венды.
Решение: Предлагается создать механизм захвата таких сисколов и возврата их в user space, чтобы Wine смог превратить их в нужные вызовы в Linux. Ожидается с ядра 5.11.
Исходная версия atrus, :
Так а где суть доклада?
Хотят найти узкие места, мешающие работе wine и внести в ядро изменения, чтобы wine работал глаже. Цели реализовать WinAPI в ядре Linux нет, только добавить то, что тяжело реализовать в user space. И только тогда, когда быструю реализацию нельзя создать в user space.
Первая боль: Проблема нечувствительных к регистру файловых систем. Разрабы под венду из-за этого на заморачиваются, а в Linux потом всё глючит. Wine эмулирует это, но с большими накладными расходами.
Решение: Начиная с ядра 5.4 можно включать нечувствительный к регистру режим в отдельных директориях. И игра будет работать и остальную систему не поломаем.
Вторая боль: Не совпадающий API синхронизации потоков. В венде часто полагаются на WaitForMultipleObjects(), которая может проверять изменение состояния целой пачки разношёрстных объектов, типа потоки, мьютексы, events и т.д. Реализация в Wine - целый комбайн из нескольких механизмов.
Решения пока нет, есть черновой вариант на основе футексов.
Третья боль: DRM и античиты. Их реализация не полагается на API, используя вместо этого сисколы венды, которые не перехватывает Wine (потому что не эмулятор, а реализация API), они попадают в ядро Linux и там игра крешится, потому что Linux не реализует сисколы венды.
Решение: Предлагается создать механизм захвата таких сисколов и возврата их в user space, чтобы Wine смог превратить их в нужные вызовы в Linux. Ожидается с ядра 5.11.