After a year of development and 30 experimental versions, a stable release of the open implementation of the Win32 API — Wine 7.0 — has been introduced, incorporating over 9100 changes. Key achievements of the new version include the translation of most Wine modules to PE format, support for themes, an expanded stack for joysticks and input devices with HID interface, and the implementation of the WoW64 architecture for running 32-bit applications in a 64-bit environment.
Wine confirms full functionality for 5156 (up from 5049 a year ago) Windows programs; another 4312 (up from 4227 a year ago) work well with additional configuration and external DLLs. For 3813 programs (up from 3703 a year ago), minor issues have been observed, which do not interfere with the main functions of the applications.
Key innovations in Wine 7.0:
- PE format modules
- Almost all DLL libraries have been transitioned to use the PE (Portable Executable, used in Windows) file format instead of ELF. The use of PE addresses issues with supporting various copy protection schemes that check the identity of system modules on disk and in memory.
- The ability for PE modules to interact with Unix libraries using the standard NT kernel system call has been implemented, allowing for Unix code calls to be hidden from Windows debuggers and tracking of thread registrations.
- Built-in DLLs are now loaded only if a corresponding PE file is present on disk, regardless of whether it is a genuine library or a stub. This change allows the application to always see a correct binding to PE files. To disable this behavior, the environment variable WINEBOOTSTRAPMODE can be used.
- WoW64
- The WoW64 (64-bit Windows-on-Windows) architecture has been implemented, allowing for 32-bit Windows applications to run in 64-bit Unix processes. Support is provided through a layer that translates 32-bit NT system calls into 64-bit requests to NTDLL.
- WoW64 layers are prepared for most Unix libraries and allow 32-bit PE modules to call 64-bit Unix libraries. Once the translation of all modules to PE format is complete, the execution of 32-bit Windows applications without the need for 32-bit Unix libraries will be possible.
- Themes
- Support for themes has been implemented. The package includes 'Light', 'Blue', and 'Classic Blue' themes, which can be selected through the WineCfg configurator.
- The ability to customize the appearance of all interface control elements through themes has been added. Automatic updates of the appearance of elements occur after the theme is changed.
- Support for themes has been added to all built-in Wine applications. Applications have been adapted for high pixel density (High DPI) screens.
- Graphics subsystem
- A new library, Win32u, has been introduced, which consolidates parts of the GDI32 and USER32 libraries related to graphics processing and window management at the kernel level. Work will soon begin on transferring driver components, such as winex11.drv and winemac.drv, to Win32u.
- Support for the Vulkan graphics API specification 1.2.201 has been implemented in the Vulkan driver.
- Support for outputting dashed geometric objects through the Direct2D API has been provided, with the ability to check for hit-testing.
- Initial support for visual effects applied using the ID2D1Effect interface has been implemented in the Direct2D API.
- Support for the ID2D1MultiThread interface, used for organizing exclusive access to resources in multithreaded applications, has been added to the Direct2D API.
- Support for decoding images in the WMP (Windows Media Photo) format and encoding images in the DDS (DirectDraw Surface) format has been implemented in the WindowsCodecs library set. Support for encoding images in the ICNS format (for macOS), which is not supported on Windows, has been discontinued.
- Direct3D
- The new rendering engine, which translates Direct3D calls to the Vulkan graphics API, has been significantly improved. In most cases, the level of support for Direct3D 10 and 11 in the Vulkan-based engine has reached parity with the old OpenGL-based engine. To enable the Vulkan rendering engine, set the Direct3D 'renderer' registry variable to 'vulkan'.
- Many features of Direct3D 10 and 11 have been implemented, including deferred contexts that operate in device context state objects, constant offsets in buffers, clearing unordered texture views, copying data between resources in typeless formats (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS), and more.
- Support for multi-monitor configurations has been added, allowing users to select a monitor for displaying Direct3D applications in full-screen mode.
- The DXGI API now includes gamma correction capability, which can be used by applications based on Direct3D 10 and 11 to modify screen brightness. It also provides the extraction of virtual framebuffer counters (SwapChain).
- Direct3D 12 adds support for root signatures version 1.1.
- The rendering code through the Vulkan API has improved request processing efficiency when the system supports the VK_EXT_host_query_reset extension.
- The ability to output virtual framebuffers (SwapChain) via GDI has been added, allowing for display when OpenGL or Vulkan cannot be used, such as when outputting to a window from different processes, for example, in applications based on the CEF (Chromium Embedded Framework).
- When using the GLSL backend for shader instructions, the 'precise' modifier is now applied.
- The DirectDraw API has added support for 3D rendering in system memory using software devices such as 'RGB', 'MMX', and 'Ramp'.
- The Direct3D graphics card database has been updated to include AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630, and NVIDIA GT 1030.
- The key 'UseGLSL' has been removed from HKEY_CURRENT_USER\Software\Wine\Direct3D registry, which now requires the use of 'shader_backend' starting from Wine 5.0.
- To support Direct3D 12, the vkd3d library version 1.2 or higher is now required.
- D3DX
- The D3DX 10 implementation has improved support for the effects framework and added support for the Windows Media Photo (JPEG XR) image format.
- Functions for texture creation provided in D3DX10 have been added, such as D3DX10CreateTextureFromMemory().
- Partial implementation of the ID3DX10Sprite and ID3DX10Font interfaces has been completed.
- Audio and Video
- The WineGStreamer backend has merged GStreamer extensions for DirectShow and the Media Foundation framework, simplifying the development of new content decoding APIs.
- Objects for synchronous and asynchronous reading based on the WineGStreamer backend have been implemented.
- Continued refinement of the Media Foundation framework implementation has added support for IMFPMediaPlayer functionality, sample allocator, improved EVR support, and SAR rendering buffers.
- The wineqtdecoder library, providing a decoder for the QuickTime format, has been removed (GStreamer is now used for all codecs).
- Input devices
- Significantly improved the stack for input devices supporting the HID (Human Interface Devices) protocol, which includes features such as parsing HID descriptors, processing HID messages, and providing mini-drivers for HID.
- Enhanced translation of device descriptions into HID messages in the winebus.sys driver backends.
- A new DirectInput backend for joysticks supporting the HID protocol has been added. Feedback effects for joysticks are now supported. control panel Optimized interaction with devices compatible with XInput. In WinMM, joystick support has been transitioned to DInput, instead of using the evdev backend in Linux and IOHID in macOS. The old joystick driver winejoystick.drv has been removed.
- New tests based on the use of virtual HID devices that do not require a physical device have been added to the DInput module.
- Text and Fonts
- A Font Set object has been added to DirectWrite.
- The TextHost interface has been implemented correctly in RichEdit.
- Core (Windows kernel interfaces)
- When launching an unrecognized executable file in Wine (e.g., ‘wine foo.msi’), start.exe is now called, which invokes handlers associated with the file type.
- Support for synchronization mechanisms NtAlertThreadByThreadId and NtWaitForAlertByThreadId, similar to futexes in Linux, has been added.
- Support for NT debug objects used for debugging kernel functions has been added.
- Support for dynamic registry keys has been added to save performance data.
- C Runtime
- A complete set of mathematical functions has been implemented in the C runtime, primarily ported from the Musl library.
- Correct support for floating-point computation functions has been ensured across all CPU platforms.
- Network Capabilities
- Compatibility mode with Internet Explorer 11 (IE11) has been improved, now used by default for processing HTML documents.
- The mshtml library has implemented ES6 (ECMAScript 2015) JavaScript mode, which supports features such as the let expression and the Map object.
- Installation of Wine MSI packages with Gecko engine extensions to the working directory now occurs as needed, rather than during Wine updates.
- Support for the DTLS protocol has been added.
- The NSI (Network Store Interface) service has been implemented, which stores and transmits routing and network interface information on the computer to other services.
- API handlers such as setsockopt and getsockopt have been moved to the NTDLL library and the afd.sys driver, to comply with the Windows architecture.
- Wine's working directory now installs its own files for network databases, such as /etc/protocols and /etc/networks, instead of referencing similar Unix databases.
- Alternative platforms
- Support for Apple hardware based on M1 ARM chips (Apple Silicon) has been added.
- To support BCrypt and Secur32 functions on the macOS platform, the GnuTLS library is now required.
- 32-bit executables for ARM platforms are now compiled in Thumb-2 mode, similar to Windows. A preloader is used for loading such files.
- Support for exception unwinding has been implemented for 32-bit ARM platforms.
- For FreeBSD, the number of supported low-level system information requests, such as memory status and battery level data, has been expanded.
- Built-in applications and development tools
- The reg.exe utility now supports both 32-bit and 64-bit representations of the registry. Support for copying registry keys has been added.
- The WineDump utility now supports outputting Windows metadata dumps and showing detailed information on CodeView records.
- The Wine Debugger (winedbg) now allows debugging 32-bit processes from a 64-bit debugger.
- The IDL (widl) compiler has added the ability to load libraries embedded in PE files, support specific to WinRT attributes and constructs, and the ability to search for libraries tied to the platform.
- Build system
- In architecture-specific directories, libraries are now saved with names reflecting the architecture and type of executable files, such as 'i386-windows' for PE format and 'x86_64-unix' for unix libraries, enabling support for different architectures in one Wine installation and facilitating Winelib cross-compilation.
- To set flags in PE file headers controlling the switch to using native DLL libraries, the '—prefer-native option' has been added to winebuild (DLL_WINE_PREATTACH processing in DllMain has been discontinued).
- Support for version 4 of the Dwarf debugging data format has been added, which is now used by default when building Wine libraries.
- A build option '—enable-build-id' has been added to save unique build identifiers in executable files.
- Support for using the Clang compiler in compatibility mode with MSVC has been added.
- Miscellaneous
- The naming of standard directories in the user shell (Windows Shell) has been aligned with the scheme used since Windows Vista, meaning that instead of ‘My Documents’, a directory ‘Documents’ is now created, and most data is saved in the ‘AppData’ directory.
- Support for the OpenCL 1.2 specification has been added to the layer for the OpenCL library.
- The WinSpool driver now supports various page size options for printing.
- Initial support for MSDASQL, the Microsoft OLE DB provider for ODBC drivers, has been introduced.
- The Wine Mono engine with .NET platform implementation has been updated to version 7.0.0.
- Unicode data has been updated to the Unicode 14 specification.
- The source code tree has been integrated with the libraries Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt, and Zlib, which are built in PE format and do not require a Unix format variant. Additionally, these libraries can also be imported from the system to use external builds instead of the built-in PE versions.
Source: opennet.ru
