После года разработки и 28 экспериментальных версий представлен стабильный релиз открытой реализации Win32 API — Wine 4.0, который вобрал в себя более 6000 изменений.
Из ключевых достижений новой версии отмечается поддержка графических API Direct3D 12 и Vulkan, включение по умолчанию обособленного потока обработки команд Direct3D, инфраструктура для настройки отображения элементов интерфейса с учётом DPI, поддержка игровых контроллеров, реализация корректной работы на экранах с высокой плотностью пикселей (High-DPI) для платформы Android, интерфейс Windows Media Player, поддержка запуска задач по расписанию, прекращение встроенной поддержки исполняемых файлов DOS.
В Wine подтверждена полноценная работа 4737 программ для Windows, еще 4045 программ прекрасно работают при дополнительных настройках и внешних DLL. У 3489 программ наблюдаются небольшие проблемы в работе, которые не мешают использованию основных функций приложений.
Ключевые новшества Wine 4.0:
- Direct3D
- Добавлена начальная поддержка Direct3D 12. Реализация основана на библиотеке vkd3d и требует для работы графической карты с поддержкой графического API Vulkan (Direct3D 12 работает через трансляцию вызовов в API Vulkan). Обеспечена поддержка большей части возможностей Direct3D 12, включая средства для графики и вычислений, очереди и списки команд, дескрипторы и дескрипторы кучи, корневые подписи, неупорядоченный доступ, Sampler-ы, сигнатуры команд, корневые константы, непрямую (indirect) отрисовку, методы Clear*() и Copy*();
- Включено по умолчанию применение обособленного потока для обработки команд Direct3D, позволяющего выполнять отрисовку в асинхронном режиме с распараллеливанием на многоядерных системах;
- В любых ситуациях, при доступности OpenGL, в Direct3D обеспечено применение по умолчанию базовых контекстов OpenGL. Ранее базовые контексты использовались только для обеспечения работы приложений Direct3D 10 и 11 на системах с графическими картами AMD и Intel. Теперь это ограничение снято и они применяются для любых видеокарт и всех версий Direct3D, за исключением Direct3D 12;
- В реализации Direct3D 10 и 11 добавлена большая часть новых возможностей, включая поддержку мультисэмплинга текстур (Multisample texture), 1D-текстур, выборочной (per-sample) обработки фрагментов шейдерами, множественных областей ограничения 3D-сцены (viewport), новых форматов ресурсов, потокового вывода без геометрических шейдеров, управление отсечением глубины, механизмы для устранения артефактов при отрисовке теней и т.п.;
- Некоторые интерфейсы Direct3D 11 обновлены до версии 11.2, а интерфейсы DXGI до версии 1.6;
- Начался переход к применению в Direct3D мелкомодульных (fine-grained) блокировок, которые позволят повысить эффективность выполнения на CPU с большим числом процессорных ядер;
- Для приложений DXGI и DirectDraw обеспечено использование корректного интервала замены буферов отрисовки (swap interval), синхронизированного с кадровым гасящим импульсом (v-blank);
- Добавлена возможность настройки из приложений DXGI и Direct3D 9Ex величины задержки вывода кадров (frame latency);
- Добавлена реализация механизма сжатия 3D-текстур S3TC (S3 Texture Compression), срок действия патентов на который истёк около года назад;
- При поддержке драйвером OpenGL-расширения ARB_query_buffer_object обеспечено снижение задержек благодаря обработке запросов в асинхронном режиме;
- Расширена база данных графических карт, пригодных для использования Direct3D;
- В реестр добавлены новые настройки «HKEY_CURRENT_USER\Software\Wine\Direct3D»: «MultisampleTextures» (включение мультисэмплинга текстур) и «Renderer» («gl» для OpenGL и «gdi» для GDI). Объявлен устаревшим ключ «DirectDrawRenderer». Удалён ключ «StrictDrawOrdering»;
- Графическая подсистема
- Реализован полноценный драйвер для графического API Vulkan, использующий штатные Vulkan-библиотеки на системах с X11 и API MoltenVK на платформе macOS;
- Добавлена библиотека vulkan-1.dll c собственной реализацией загрузчика драйверов Vulkan для Windows, альтернативного загрузчику из Vulkan SDK;
- Добавлена поддержка пиктограмм в формате PNG, в том числе пиктограмм 256×256 для экранов с большим разрешением;
- В штатный набор пиктограмм добавлены варианты размером 256×256;
- Многие интерфейсы Direct2D обновлены до версии спецификации 1.2. Для ограничения версии интерфейса в секцию реестра «HKEY_CURRENT_USER\Software\Wine\Direct2D» добавлен ключ «max_version_factory»;
- Для X11 добавлена поддержка визуализации в формате ARGB;
- На базе движка DIB подготовлена реализация старого 16-разрядного драйвера DIB.DRV;
- В движке DIB значительно ускорена отрисовка больших полигонов;
- В код вывода на печать добавлена поддержка определения размера страниц A0, A1 и A2;
- В GdiPlus добавлена поддержка рисования стрелок;
- Ядро (интерфейсы ядра Windows)
- Прекращена поддержка выполнения в wine исполняемых файлов DOS. При попытке запуска исполняемых файлов DOS теперь запускается отдельный экземпляр DOSBox. Изменение не касается выполнения исполняемых файлов Win16, поддержка которые остаётся встроенной в Wine;
- Для запускаемых в Wine драйверов на уровне ядра реализованы обработчики событий, семафоры, мьютексы и таймеры. Драйверам предоставлен доступ к управлению CPU и настройке отладочных регистров;
- Добавлена поддержка примитивов синхронизации WaitOnAddress;
- Для корректного определения использования технологии Hyper-threading, в выдаваемой информации о конфигурации CPU теперь разделяются логические и физические ядра процессора;
- При запуске в окружениях Linux предоставлен доступ к детальной информации, выдаваемой BIOS;
- Реализована подборка отладочных API для манипуляции 32-разрядными процессами в Wow64 из контекста 64-процессов;
- Добавлено определение настроек приложений, уровней запуска и информации о совместимости в manifest-файлах приложений;
- Реализованы различные режимы определения завершения файлового ввода/вывода;
- Для платформы NetBSD реализована поддержка отладочных регистров;
- Интерфейс пользователя
- Реализована инфраструктура для настройки отображения элементов интерфейса с учётом DPI и параметров масштабирования. Масштабирование содержимого окон пока отключено по умолчанию и доступно только на платформе Android. Для включения следует изменить параметр «DpiScalingVer» в секции реестра «HKEY_CURRENT_USER\Control Panel\Desktop»
- Реализована возможность перенаправления класса Window, что позволило добавить поддержку элементов интерфейсов на базе библиотеки Common Controls 6;
- В библиотеку ComCtl32 v6 (Common Control) добавлена поддержка стандартных пользовательских элементов интерфейса, в том числе классов для кнопок (Button), списков (ListBox), комбинированных блоков (ComboBox), статических блоков (Static) и формы редактирования (Edit). Реализована поддержка тем оформления;
- Реализован штатный диалог управления задачами (TaskDialog), включающий поддержку пиктограмм, гиперссылок, полос для индикации прогресса выполнения операций и различных элементов интерфейса;
- В шестой версии формы редактирования добавлена поддержка отображения подсказок непосредственно в полях ввода (Cue banner);
- Интеграция с рабочим столом
- Добавлена возможность отключения экспорта списка ассоциаций для MIME-типов (вкладка Desktop Integration в winecfg или ключ реестра «HKEY_CURRENT_USER\Software\Wine\FileOpenAssociations»);
- В реализацию диалога открытия и сохранения файлов добавлена возможность отображения свойств файла (размер, время и атрибуты). Опционально добавлена возможность отображения в левой части панели с часто используемыми файловыми путями (Places);
- Для соответствия поведению новых версий Windows место AllUsersProfile в оболочке теперь используется каталог Public;
- В файловом менеджере появилась поддержка горячих клавиш для переименования (F2) и удаления (Del) каталогов;
- В библиотеку добавлены многие стандартные для Windows пиктограммы;
- Добавлена поддержка автодополнения ввода в Shell;
- В режиме рабочего стола панель задач теперь не показывается вверху полноэкранных окон;
- В состав Shell32 включён большой набор новых пиктограмм;
- Добавлена поддержка дополнительных имён штатных курсоров, для улучшения совместимости с темами оформления курсоров в окружениях X11;
- Устройства ввода
- В API Raw Input и XInput добавлена поддержка игровых контроллеров с интерфейсом HID;
- В HID-драйвере появилась поддержка геймпадов;
- Реализован драйвер SDL, позволяющий взаимодействовать через интерфейс HID с поддерживаемыми в SDL игровыми контроллерами;
- Сетевые возможности
- В JScript добавлен режим совместимости с EcmaScript, позволяющий использовать некоторые возможности, отсутствующие в штатном режиме. Добавлена поддержка обращения к свойствам JavaScript;
- Переписаны и теперь лучше соответствуют стандарту объекты для работы с таблицами стилей;
- В MSHTML добавлена поддержка не-HTML элементов, в частности, добавлена ограниченная поддержка SVG;
- Реализованы некоторые новые HTML API;
- В апплет Internet Control Panel добавлена поддержка настройки прокси-сервера;
- В API WebServices добавлена поддержка Stream I/O;
- Реализован API Web Services on Devices (WSDAPI), в том числе обеспечена поддержка отправки и приёма различных типов сообщений;
- Через API WBEM предоставлен доступ к дополнительной информации о системе, включая сведения о CPU, BIOS, видеокарте и сетевом адаптере;
- WinHTTP переведён на использование Windows Sockets;
- Криптография
- Добавлена поддержка асимметричных криптографических ключей, а также возможность проверки цифровых подписей на базе алгоритмов RSA и ECDSA;
- Добавлена возможность использования хэшей sha256/sha384 в цифровых подписях ECDSA;
- Добавлена поддержка режимов аутентифицированного шифрования GCM и ECB;
- Для RSA реализована поддержка оптимального асимметричного шифрования с дополнением (OAEP;
- Добавлена поддержка аутентификации при помощи Kerberos;
- Реализован диалог для работы с сертификатами на основе открытых ключей;
- При работе в macOS при наличии теперь используются библиотеки GnuTLS, а при их отсутствии штатный фреймворк CommonCrypto;
- Текст и шрифты
- В DirectWrite добавлена поддержка хранения ресурсов шрифтов в памяти;
- Таблицы символов обновлены до спецификации Unicode 11;
- Добавлена поддержка субпиксельного рендеринга шрифтов (требуется наличие FreeType 2.8.1 или более новой версии);
- В эмуляторе консоли обеспечено корректное масштабирование шрифтов в соответствии с настройками DPI.
- Расширено число глифов в шрифте Wingdings, в том числе добавлены глифы с разными изображениями часов;
- Звук
- Реализован интерфейс Windows Media Player для воспроизведения мультимедийного контента;
- Добавлен декодировщик MP3, доступный через DirectX Media Object;
- Обеспечение работы Wine в окружении платформы Android
- Добавлена возможность установки курсора мыши, используя API Android 7+;
- Добавлена поддержка нового механизма распределения памяти gralloc, который позволил решить проблемы с выводом графики в Android 8+;
- Добавлена поддержка платформ Android x86-64, в том числе в 64-разрядном режиме, но режим WoW64 пока не поддерживается в пакетах WineHQ;
- Встроенные приложения
- Добавлена программа Ping, показываются время сетевого отклика, вычисляемого при помощи вызова функции IcmpSendEcho;
- Добавлен интерфейс SchTasks для добавления и удаления команд для запуска задач по расписанию;
- В RegEdit добавлен режим шестнадцатеричного просмотра бинарных значений;
- В командном интерпретаторе добавлена корректная реализация циклов «FOR»;
- В программу XCopy добавлена опция «/k», обеспечивающая сохранение атрибутов;
- Инструменты для разработки
- В winedbg добавлена поддержка отладки процессов WoW64;
- В winegcc добавлена поддержка сборки библиотек штатных подсистем и улучшен поиск подходящих библиотек для кросс-компиляции;
- В winebuild добавлена опция «-mfpu» для выбора архитектуры FPU на платформах ARM;
- В winedump добавлена поддержка дампов typelib в формате SLTG;
- В компилятор IDL добавлена поддержка ACF (Application Configuration Files), асинхронных интерфейсов, cериализации атрибутов, типа __int32 и генерации нескольких typelib в одном файле с ресурсами;
- Движок Mono, используемый для запуска файлов .NET, обновлён до выпуска 4.7.5. В 64-разрядных окружениях добавлена возможность запуска в режиме CLI 32-разрядны исполняемых файлов .NET;
- Система маршалинга в Typelib переписана с использованием функций NDR;
- В фреймворке для проведения тестирования качества кода добавлена поддержка тестирования драйверов ядра Windows и библиотек, загружающих внешние dll;
- Добавлена возможность сборки WoW64 (эмулятор для запуска 32-разрядных приложений Windows в 64-разрядных редакциях Windows) из штатного дерева исходных кодов Wine;
- Разное
- Реализован сервис Task Scheduler для запуска задач по расписанию;
- Реализован сервис WMI (Windows Management Instrumentation) для централизованного управления системами на базе Windows;
- Реализована библиотека для сервисов OPC (Open Packaging Convention), используемых в XML-файлах Microsoft Office;
- Расширена поддержка платформ ARM и ARM64. Для кросс-компиляции для ARM64 реализована возможность использования инструментария MinGW;
- Добавлена поддержка отложенной установки пакетов MSI. Обеспечено выполнение пользовательских обработчиков в MSI в отдельном процессе, что позволяет создавать комбинированные установщики для 32- и 64-разрядных систем. Добавлена поддержка преобразований субхранилищ в MSI;
- Новые внешние зависимости: библиотеки Vulkan для работы драйвера Vulkan, Vkd3d для Direct3D 12, SDL для поддержки игровых контроллеров, GSSAPI для Kerberos.