Stable release of Wine 9.0

After a year of development and 26 experimental versions, a stable release of the open implementation of the Win32 API - Wine 9.0, which incorporated more than 7000 changes, was presented. The key achievements in the new version include the implementation of the WoW64 architecture for running 32-bit programs in a 64-bit environment, driver integration to support Wayland, support for the ARM64 architecture, implementation of the DirectMusic API and support for smart cards.

Wine has confirmed the full operation of 5336 (a year ago 5266, two years ago 5156, three years ago 5049) programs for Windows, another 4397 (a year ago 4370, two years ago 4312, three years ago 4227) programs work perfectly with additional settings and external DLL. 3943 programs (a year ago 3888, two years ago 3813, three years ago 3703) have minor problems in operation that do not interfere with the use of the main functions of the applications.

Key innovations in Wine 9.0:

  • Added driver winewayland.drv, allowing you to use Wine in environments based on the Wayland protocol without using XWayland and X11 components. The development is aimed at providing a pure Wayland environment with support for running Windows applications that do not require the installation of X11-related packages, which allows for higher performance and responsiveness of games by eliminating unnecessary layers. Using a pure Wayland environment for Wine also eliminates the security issues inherent in X11 (for example, untrusted X11 games can spy on other applications since the X11 protocol allows access to all input events and fake keystroke substitution).

    The driver is marked as experimental and under development, but, nevertheless, it already has support for many features, such as window management, working with multiple monitors, support for scaling output on high-pixel density (high-DPI) screens, working with relative coordinates when tracking mouse movement and support for the Vulkan graphics API. By default, the driver is not active and to enable it you should add “wayland” to the registry parameter “HKCU\Software\Wine\Drivers” and make sure that the DISPLAY environment variable is not set: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland

  • All modules have been converted to the NT system call interface, rather than making direct calls between the PE and Unix layers, marking the completion of many years of work to convert all DLLs to use the PE (Portable Executable) executable file format.
  • The development of the WoW64 layer (64-bit Windows-on-Windows), which allows running 32-bit Windows applications on 64-bit Unix systems, has continued. All modules that access Unix libraries use WoW64 system call thunks to allow 32-bit PE-formatted modules to access 64-bit Unix libraries.

    Improved the new WoW64 launch mode, which runs 32-bit code inside a 64-bit process (in the old WoW64 mode, 32-bit applications ran in 32-bit Unix processes). Added support for using the new WoW64 mode on the macOS platform. Since the new WoW64 mode has some shortcomings, such as lack of support for 16-bit mode and reduced OpenGL performance due to lack of support for the ARB_buffer_storage extension, it is not yet enabled by default and requires building with the option “—enable-archs=i386,x86_64 " in the configure script.

  • Added the ability to run existing Windows executables on ARM64 architecture systems. The ability to build Wine for the ARM64EC ABI (ARM64 Emulation Compatible) and support for loading ARM64EC modules has been implemented, used to simplify the porting of applications originally written for the x64_86 architecture to ARM64 systems by providing the ability to execute individual modules with x64_86 code in the ARM64 environment using an emulator. Added support for the ARM64X PE file format, which allows loading a single executable file in x64/Arm64EC and ARM64 processes. An interface for emulating 32-bit x86 systems has been implemented, but the library with the emulator is not yet included in the main Wine package (you can use the external FEX emulator to run x86 code in an ARM64 environment).
  • Graphical subsystem
    • The PostScript driver has been redesigned to support Windows-formatted spool files that store data about print jobs. Direct calls to the driver from the Unix environment are excluded.
    • Dark mode support has been added to WinRT themes. A setting has been added to WineCfg to enable dark interface design.
    • The driver for the Vulkan graphics API has added support for the Vulkan 1.3.272 specification (8.0 was supported in Wine 1.3.237).
    • The functions of the GdiPlus library have been optimized, allowing for increased graphics performance.
  • Direct3D
    • Parsing of a multi-threaded command stream is suspended when there are no rendering commands being processed, which allows reducing energy consumption to the level of single-threaded processing when executing programs that do not occupy the entire command stream bandwidth.
    • Direct3D 10 includes support for additional effects.
    • Made performance optimizations to the WineD3D code and backend using the Vulkan graphics API.
    • The Vulkan API-based rendering code now checks what capabilities the device supports and tells the application what level of Direct3D functionality is available.
    • The D3DXFillTextureTX and D3DXFillCubeTextureTX functions have been implemented.
    • The classic OpenGL ARB shader backend has added support for defining shadows using the ARB_fragment_program_shadow extension.
    • D3DXLoadMeshHierarchyFromX and similar functions have added support for loading user data using the ID3DXLoadUserData interface.
  • Sound and video
    • An initial implementation of the DirectMusic API has been proposed. Added support for collections, instruments and sound samples in the SoundFont format. Added support for the Doppler effect. Tests have been implemented to verify the correct implementation when operating the dmime sequencer and the dmsynth MIDI synthesizer.
    • The FluidSynth library is built into the DirectMusic API for use.
    • Support for loading sound fonts (SoundFont - sample-based synthesis formats used to play MIDI files) in the DLS1 and DLS2 formats, as well as in the SF2 format used in Linux, has been implemented.
    • Added the ability to play MIDI content using the dmsynth library, using the FluidSynth software synthesizer and the DirectSound API for audio output.
    • Added a decoder for video in the Indeo IV50 video codec format.
  • Directshow
    • A DMO (DirectX Media Object) component with a WMV (Windows Media Video) format decoder has been implemented.
    • Added an audio capture filter (DirectShow Audio Capture Filter).
    • In addition to audio streams, the MPEG‑1 Stream Splitter (DirectShow MPEG‑1 Stream Splitter) now supports video streams and service streams.
    • A filter for decoding video in MPEG‑1 format (DirectShow MPEG‑1 Video Decoder) has been implemented.
  • Input Devices
    • DirectInput supports action mapping, which allows you to bind buttons on a game controller to specific actions in games.
  • Desktop integration
    • Bindings have been exported to the main user environment, allowing applications running under Wine to be called as protocol handlers when opening a URL (for example, launching spotify.exe when opening links like “spotify:user:spotify:playlist:848218482355482821”).
    • Implemented the extraction of EDID (Extended Display Identification Data) data with information about the parameters of the connected monitor, such as the name and model of the device.
    • It is possible to close a desktop window deployed in full screen mode using the “Exit desktop” button in the “Start” menu.
  • Internationalization
    • Expanded support for IME (Input Method Editors). Work has been done to ensure compatibility with native Windows IME implementations and improve integration with Linux IME
    • Generation of locale databases in locale.nls format from the Unicode CLDR (Unicode Common Locale Data Repository) version 44 database has been provided. Support for additional locales bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL has been added , skr-PK, tyv-RU, vmw-MZ, xnr-IN and za-CN.
    • The interface has been translated into Georgian. Full translations are provided for 16 languages, and partial translations for 31 languages.
    • Unicode character tables have been updated to standard version 15.1.0. The time zone database has been updated.
  • Kernel (Windows kernel interfaces)
    • The default version of Windows that is issued is Windows 10.
    • For executable files in the PE format, support for address space randomization (ASLR) is implemented, but the addresses for loading code into memory are not yet completely randomized.
    • Support for a weakly fragmented heap (LFH, Low Fragmentation Heap) has been implemented, which has increased the performance of memory allocation operations.
    • Support for memory reservation (placeholder) has been added to the virtual memory allocation mechanism, allowing an application to reserve a specific area of ​​virtual memory for future use.
    • 64-bit loaders (loader and preloader) of executable files and libraries are compiled in the PIE (Position-Independent Executables) format to free up part of the 32-bit address space.
    • Correct stack unwinding is provided for NT system calls and user callback calls.
  • Networking opportunities
    • The MSHTML engine supports the “Cycle Collection” garbage collection mechanism.
    • MSHTML has added support for synchronous processing of XMLHttpRequest requests.
    • jscript.dll adds support for a WeakMap object to work with a collection of key/value pairs in which the key is an object that can have an arbitrary value attached to it. Implemented WeakMap.get(), WeakMap.delete(), WeakMap.clear() and WeakMap.has() methods.
    • The Gecko browser engine has been updated to version 2.47.4.
    • Support for notifications about changes in the state of the network interface has been implemented.
  • Cryptography and Security
    • Support for smart cards has been added to the Winscard.dll library, implemented through the PCSClite system library.
    • BCrypt has added support for the Diffie-Hellman key exchange protocol.
    • The Negotiate package has been implemented, providing a layer for using the SSPI (Security Support Provider Interface) interface to access SSP (Security Support Provider) providers.
  • Built-in applications
    • The Wine Debugger (winedbg) uses the Zydis library to disassemble X86 machine instructions.
    • The ability to expose older versions of Windows (pre-XP) on 64-bit platforms has been added to the WineCfg interface, which allows you to run legacy applications using WoW64 mode.
    • All built-in graphical applications now display error information in a separate dialog, instead of displaying them in the console.
    • The systeminfo program provides display of information from the WMI (Windows Management Instrumentation) database.
    • Added klist application to display Kerberos tickets.
    • The taskkill application implements the ability to forcefully terminate child processes.
    • Added "/machine" option to the start utility to select the architecture used when running hybrid executables that support x86 and ARM.
    • Most of the functionality of the tasklist program has been implemented.
    • Added a basic implementation of the findstr application.
  • Development Tools
    • The WineDump utility provides the ability to display the contents of Windows registry files (REGF format), as well as display data for all architectures (x86/ARM64) supported in hybrid PE files.
    • The IDL compiler has added support for the "composable", "default_overload", "deprecated" and "protected" attributes.
    • Removed libwine.so, which was deprecated in Wine 6.0 and has long been no longer used in Wine. Programs in ELF format built in older versions of Wine (5.0 and older) with libwine.so require rebuilding to run in Wine 9.0.
  • Built-in libraries and external dependencies
    • The libraries FluidSynth 2.3.3, Musl 1.2.3 (mathematical functions only) and Zydis 4.0.0 are integrated into the package.
    • Components Vkd3d 1.10, Faudio 23.12, OpenLDAP 2.5.16, LCMS2 2.15, LibMPG123 1.32.2, LibPng 1.6.40, LibTiff 4.6.0, LibXml2 2.11.5, LibXslt 1.1.38 and Zlib 1.3 have been updated to new versions. The Wine Mono engine with the implementation of the .NET platform has been updated to release 8.1.0.
    • The driver winewayland.drv uses the Wayland client library as external dependencies, as well as the xkbcommon and xkbregistry libraries.
    • To support smart cards, the external library PCSClite (in macOS - PCSC) is used.
    • Building PE files on non-i386 platforms now requires a cross-compiler with support for ".seh" directives to handle exceptions.

Source: opennet.ru

Add a comment