Stable release of Wine 7.0

After a year of development and 30 experimental versions, a stable release of the open implementation of the Win32 API, Wine 7.0, is presented, which includes more than 9100 changes. Among the key achievements of the new version are the translation of most Wine modules in PE format, support for themes, the expansion of the stack for joysticks and input devices with the HID interface, the implementation of the WoW64 architecture for running 32-bit programs in a 64-bit environment.

Full-fledged work of 5156 (5049 a year ago) programs for Windows was confirmed in Wine, another 4312 (4227 a year ago) programs work fine with additional settings and external DLLs. 3813 programs (3703 years ago) have minor problems that do not interfere with the use of the main functions of applications.

Key innovations in Wine 7.0:

  • Modules in PE format
    • Almost all DLLs have been converted to use the PE (Portable Executable) executable file format instead of ELF. The use of PE solves problems with the support of various copy protection schemes that verify the identity of system modules on disk and in memory.
    • Implemented the possibility of PE modules interacting with Unix libraries using the standard NT kernel system call, which makes it possible to hide access to Unix code from Windows debuggers and monitor thread registration.
    • Built-in DLLs are now loaded only if there is a corresponding PE file on disk, regardless of whether it is a real library or a stub. This change allows the application to always see the correct binding to PE files. You can use the WINEBOOTSTRAPMODE environment variable to disable this behavior.
  • WoW64
    • The WoW64 architecture (64-bit Windows-on-Windows) has been implemented, which allows running 32-bit Windows applications in 64-bit Unix processes. Support is implemented through the connection of a layer that translates 32-bit NT system calls into 64-bit calls to NTDLL.
    • WoW64 layers are prepared for most Unix libraries and allow 32-bit PE modules to access 64-bit Unix libraries. After the conversion of all modules to PE format is completed, it will be possible to run 32-bit Windows applications without installing 32-bit Unix libraries.
  • Themes
    • Implemented support for themes. The composition includes the skins "Light", "Blue" and "Classic Blue", which can be selected through the WineCfg configurator.
    • Added the ability to customize the appearance of all interface controls through themes. Provided automatic updating of the view of elements after changing the theme.
    • Themes support has been added to all built-in Wine applications. Applications have been adapted to screens with high pixel density (High DPI).
  • Graphical subsystem
    • A new Win32u library has been added, which includes parts of the GDI32 and USER32 libraries related to graphics processing and window management at the kernel level. In the future, work will begin on porting driver components such as winex32.drv and winemac.drv to Win11u.
    • The Vulkan driver implements support for the Vulkan graphics API specification 1.2.201.
    • Provided support for output through the API Direct2D hatched geometric objects, with the ability to check the hit of a click (hit-test).
    • The Direct2D API provides initial support for visual effects applied using the ID2D1Effect interface.
    • Support for the ID2D2MultiThread interface has been added to the Direct1D API, which is used to organize exclusive access to resources in multithreaded applications.
    • The WindowsCodecs library set supports WMP (Windows Media Photo) image decoding and DDS (DirectDraw Surface) image encoding. Dropped support for image encoding in ICNS format (for macOS), which is not supported on Windows.
  • Direct3D
    • Significantly improved new rendering engine that translates Direct3D calls to the Vulkan graphics API. In most situations, the level of support for Direct3D 10 and 11 in the Vulkan-based engine has been brought to parity with the old OpenGL-based engine. To enable the rendering engine through Vulkan, set the Direct3D "renderer" registry variable to "vulkan".
    • Many Direct3D 10 and 11 features have been implemented, including Deferred Contexts, state objects running in device contexts, persistent offsets in buffers, cleaning out of order texture representations, copying data between resources in untyped formats (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS), etc.
    • Added support for multi-monitor configurations, allowing you to select a monitor to display a Direct3D application in full screen mode.
    • The DXGI API implements screen gamma correction, which can be used by Direct3D 10 and 11 based applications to change screen brightness. Extraction of counters of virtual framebuffers (SwapChain) is provided.
    • Direct3D 12 adds support for version 1.1 root signatures.
    • In the rendering code through the Vulkan API, the efficiency of query processing has been improved if the VK_EXT_host_query_reset extension is supported in the system.
    • Added the ability to display virtual framebuffers (SwapChain) via GDI, if OpenGL or Vulkan cannot be used for display, for example, when outputting to a window from different processes, for example, in programs based on the CEF (Chromium Embedded Framework) framework.
    • When using a backend for GLSL shaders, the "precise" modifier is enforced for shader instructions.
    • DirectDraw API adds support for 3D rendering to system memory using software devices such as "RGB", "MMX" and "Ramp".
    • Added AMD Radeon RX 3M, AMD Radeon RX 5500/6800 XT/6800 XT, AMD Van Gogh, Intel UHD Graphics 6900, and NVIDIA GT 630 cards to the Direct1030D graphics card base.
    • Removed "UseGLSL" key from HKEY_CURRENT_USER\Software\Wine\Direct3D registry, starting from Wine 5.0 you should use "shader_backend" instead.
    • Direct3D 12 support now requires the vkd3d library to be at least version 1.2.
  • D3DX
    • D3DX 10 implementation improves visual effects framework support and adds support for Windows Media Photo (JPEG XR) image format
    • Added D3DX10 provided texture creation functions such as D3DX10CreateTextureFromMemory().
    • Partially implemented programming interfaces ID3DX10Sprite and ID3DX10Font.
  • Sound and video
    • The GStreamer add-ons for DirectShow and the Media Foundation framework are combined into one common WineGStreamer backend, which should simplify the development of new content decoding APIs.
    • Based on the WineGStreamer backend, Windows Media objects for synchronous and asynchronous reading are implemented.
    • The implementation of the Media Foundation framework has continued to be improved, support for the IMFPMediaPlayer functionality, sample allocator has been added, support for EVR and SAR rendering buffers has been improved.
    • Removed the wineqtdecoder library that provides a decoder for the QuickTime format (GStreamer is now used for all codecs).
  • Input Devices
    • The stack for Human Interface Devices (HID)-enabled input devices has been significantly improved to include features such as parsing HID descriptors, processing HID messages, and providing HID mini-drivers.
    • Improved translation of device descriptions into HID messages in winebus.sys driver backends.
    • Added a new DirectInput backend for joysticks that support the HID protocol. Implemented the ability to use feedback effects in joysticks. Improved joystick control panel. Optimized interaction with XInput compatible devices. WinMM moved joystick support to DInput instead of using the evdev backend on Linux and IOHID on macOS IOHID. Removed old joystick driver winejoystick.drv.
    • New tests have been added to the DInput module based on the use of virtual HID devices and do not require a physical device.
  • Text and fonts
    • Font Set object added to DirectWrite.
    • RichEdit correctly implements the TextHost interface.
  • Kernel (Windows kernel interfaces)
    • When running an unrecognized executable (eg 'wine foo.msi') in Wine, start.exe is now invoked, which invokes the handlers associated with the file type.
    • Added support for synchronization mechanisms NtAlertThreadByThreadId and NtWaitForAlertByThreadId, similar to Linux futexes.
    • Added support for NT debugging objects used to debug kernel functions.
    • Added support for dynamic registry keys to save performance data.
  • C Runtime
    • The C runtime implements a complete set of mathematical functions, which is mainly carried over from the Musl library.
    • All CPU platforms provide correct support for floating point functions.
  • Networking opportunities
    • Improved Internet Explorer 11 (IE11) compatibility mode, which is now the default for processing HTML documents.
    • The mshtml library implements ES6 (ECMAScript 2015) JavaScript mode, which provides support for features such as the let expression and the Map object.
    • Installing MSI packages with additions to the Gecko engine into the Wine working directory is now done when necessary, and not during the Wine update.
    • Added support for DTLS protocol.
    • The NSI (Network Store Interface) service has been implemented, which stores and transmits information about routing and network interfaces to other services on the computer.
    • WinSock API handlers such as setsockopt and getsockopt have been moved to the NTDLL library and the afd.sys driver to match the Windows architecture.
    • Wine's working directory now installs its own network database files, such as /etc/protocols and /etc/networks, instead of referring to similar Unix databases.
  • Alternative platforms
    • Added support for Apple hardware based on M1 (Apple Silicon) ARM chips.
    • Support for BCrypt and Secur32 features on macOS now requires the installation of the GnuTLS library.
    • 32-bit executables for ARM platforms are now built in Thumb-2 mode, similar to Windows. A preloader is used to load such files.
    • For 32-bit ARM platforms, exception unwinding is supported.
    • For FreeBSD, the number of supported requests for low-level system information, such as memory status and battery level, has been expanded.
  • Embedded apps and development tools
    • Support for 32-bit and 64-bit registry views has been added to the reg.exe utility. Added support for copying registry keys.
    • Added support for dumping Windows metadata and showing detailed information about CodeView entries in the WineDump utility.
    • The Wine Debugger (winedbg) has the ability to debug 32-bit processes from a 64-bit debugger.
    • The IDL compiler (widl) adds the ability to load libraries embedded in PE files, supports WinRT-specific attributes and constructs, and implements platform-specific library search.
  • Assembly system
    • Libraries are now stored in hardware architecture-specific directories with names reflecting the architecture and type of executable files, such as 'i386-windows' for PE format and 'x86_64-unix' for unix libraries, allowing support for different architectures in a single Wine installation and ensure that Winelib is cross-compiled.
    • To set the PE file headers with an option that controls the transition to using native DLLs, the '-prefer-native option' flag has been added to winebuild (the processing of DLL_WINE_PREATTACH in DllMain has been stopped).
    • Added support for version 4 of the Dwarf debug data format, which is now used by default when building Wine libraries.
    • Added build option '--enable-build-id' to save unique build IDs in executable files.
    • Added support for using the Clang compiler in MSVC compatibility mode.
  • Miscellanea
    • The name of typical directories in the user shell (Windows Shell) is changed to the scheme used since Windows Vista, i.e. the 'Documents' directory is now created instead of 'My Documents', and most of the data is stored in the 'AppData' directory.
    • In the layer for the OpenCL library, support for the OpenCL 1.2 specification has been added.
    • Added support for various page sizes when printing to the WinSpool driver.
    • Added initial support for MSDASQL, the Microsoft OLE DB provider for ODBC drivers.
    • The Wine Mono engine with .NET platform implementation has been updated to release 7.0.0.
    • Unicode data has been updated to the Unicode 14 specification.
    • Built into the source tree are the Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt, and Zlib libraries, which are built in PE format and do not require a Unix format variant. At the same time, library data can also be imported from the system to use external assemblies instead of the built-in PE versions.

Source: opennet.ru

Add a comment