Wine 11.0. Самое время перейти на Linux!
После года разработки и 25 экспериментальных версий представлен стабильный релиз открытой реализации Win32 API - Wine 11.0, который вобрал в себя более 6300 изменений и 600 исправлений ошибок. Из ключевых достижений в Wine 11.0 выделяется полная поддержка NTSYNC, механизм Reparse Point, задействование новой реализации архитектуры WoW64, новый бэкенд отрисовки на базе EGL, поддержка буфера обмена и методов ввода в окружениях на базе Wayland, улучшение поддержки Bluetooth и сканеров.
В Wine подтверждена полноценная работа 5419 программ для Windows (год назад 5372, два года назад 5336, три года назад 5266), ещё 4500 программ (год назад 4435, два года назад 4397, три года назад 4370) прекрасно работают при дополнительных настройках и внешних DLL. У 4086 программ (год назад 4020, два года назад 3943, три года назад 3888) наблюдаются небольшие проблемы в работе, которые не мешают использованию основных функций приложений.
Ключевые новшества Wine 11.0:
- Обеспечена полная поддержка драйвера ntsync, позволяющего существенно поднять производительность Windows-игр, запускаемых при помощи Wine. Драйвер входит в состав ядра Linux начиная с выпуска 6.14 и реализует символьное устройство /dev/ntsync и набор примитивов для синхронизации, применяемых в ядре Windows NT. Значительный прирост производительности достигается благодаря избавлению от накладных расходов, связанных с применением RPC в пространстве пользователя.
- Добавлена возможность настройки приоритетов потоков в Linux и macOS.
- В ntdll добавлен API синхронизации "Synchronization barriers", позволяющий приостановить выполнение нескольких потоков до достижения определённой точки выполнения во всех потоках (например, дождаться пока все потоки достигнут определённой стадии при параллельном выполнении одного и тот же кода).
- Переведена в разряд полностью поддерживаемых новая реализация прослойки WoW64 (64-bit Windows-on-Windows), позволяющая выполнять 32-разрядные Windows-приложения в 64-разрядных Unix-системах. В отличие от старой реализации, в которой 32-разрядные приложения запускались в 32-разрядных Unix-процессах, новый WoW64 обеспечивает запуск 32-разрядного кода внутри 64-разрядного процесса. Также появилась поддержка запуска 16-разрядных приложений в режиме WoW64. Во всех модулях, обращающихся к Unix-библиотекам, задействованы преобразователи системных вызовов WoW64 (thunk), позволяющие 32-разрядным модулям в формате PE обращаться к 64-разрядным Unix-библиотекам. Добавлена возможность запуска старых установок в новом режиме WoW64 через выставление переменной окружения "WINEARCH=wow64". 32-разрядные префиксы, создаваемые при выставлении "WINEARCH=win32", объявлены устаревшими и не поддерживаются в новом режиме WoW64. Удалён отдельный загрузчик wine64, вместо которого задействован универсальный загрузчик, определяющий режим по разрядности запускаемого файла.
В ориге указано вагон улучшений, это пожалуй самый удачный выпуск за несколько лет
Подчеркну субъективно важные пункты:
Ядро (интерфейсы ядра Windows)
- Реализован механизм Reparse Point, при помощи которого можно прикреплять к файлам и каталогам дополнительные данные, идентифицируемые через теги. Поддерживаются такие типы Reparse Point, как символические ссылки и точки монтирования.
- Для повышения производительности отслеживания операций записи в память задействован механизм UFFD (userfaultfd), дающий возможность создавать обработчики обращений к невыделенным страницам памяти (page faults) в пространстве пользователя. В проведённых тестах применение UFFD позволило сократить время загрузки уровней в игре "Streets of Rage 4" с 6-8 секунд до 1.5-2 секунд, что соответствует показателям запуска на платформе Windows.
- Задействованы номера системных вызовов NT, идентичные последним версиям Windows, что необходимо для поддержки приложений, в которых жёстко прописаны номера системных вызовов.
Графическая подсистема
Добавлена начальная поддержка объектов D3DKMT, предоставляющих низкоуровневый доступ к графическим устройствам из пространства пользователя. Реализованы Vulkan-расширения VK_KHR_external_memory_win32, VK_KHR_external_semaphore_win32, VK_KHR_external_fence_win32 и VK_KHR_win32_keyed_mutex.
Direct3D
- В Direct3D 11 добавлена поддержка аппаратного ускорения декодирования видео в формате H.264, реализованная при помощи графического API Vulkan.
Поддержка сканеров
- Реализована поддержка API TWAIN 2.0, позволяющего обращаться к сканерами из 64-разрядных приложений.
- Реализована поддержка компонента DAT_IMAGENATIVEXFER для передачи изображения из сканера в приложение.
- Обеспечено сохранение в реестре выбранного сканера и настроек сканера.
- Добавлена поддержка многостраничного сканирования и автоподатчи документов.
- Прекращена блокировка приложения во время вызова интерфейса сканирования.
- Добавлена поддержка загрузки родных Windows-драйверов к сканерам.