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.
5336 (5266 a year ago, 5156 two years ago, 5049 three years ago) programs have been confirmed to work properly in Wine. WindowsAnother 4397 programs (4370 a year ago, 4312 two years ago, 4227 three years ago) work fine with additional settings and external DLLs. 3943 programs (3888 a year ago, 3813 two years ago, 3703 three years ago) have minor issues that don't interfere with the basic functionality of the applications.
Key innovations in Wine 9.0:
- The winewayland.drv driver has been added, allowing Wine to be used in Wayland-based environments without the use of XWayland or X11 components. This development is aimed at providing a pure Wayland environment with launch support. Windows- applications that don't require installing X11-related packages, which allows for higher performance and responsiveness in games by eliminating unnecessary layers. Using a pure Wayland environment for Wine also eliminates security issues inherent to X11 (for example, untrusted X11 games can spy on other applications because the X11 protocol allows access to all input events and perform 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) continued Windows-he-Windows), which allows you to run 32-bit Windows- applications on 64-bit Unix systems. All modules accessing Unix libraries use WoW64 system call translators (thunks), allowing 32-bit modules in PE format to access 64-bit Unix libraries.
The new WoW64 launch mode has been improved, allowing 32-bit code to run within a 64-bit process (in the old WoW64 mode, 32-bit applications ran in 32-bit Unix processes). Support for using the new WoW64 mode on the platform has been added. macOSSince the new WoW64 mode has some minor bugs, such as a lack of 16-bit support and reduced OpenGL performance due to the lack of support for the ARB_buffer_storage extension, it is not yet enabled by default and requires building with the "--enable-archs=i386,x86_64" option in the configure script.
- Added the ability to execute existing executable files Windows On systems with the ARM64 architecture. Wine can now be built for the ARM64EC (ARM64 Emulation Compatible) ABI, and ARM64EC modules can be loaded. These modules are used to simplify the porting of applications originally written for the x86_64 architecture to ARM64 systems by enabling the execution of individual x86_64 code modules in the ARM64 environment using an emulator. Support has been added for the ARM64X PE file format, which allows a single executable file to be loaded in both x64/Arm64EC and ARM64 processes. An interface for emulating 32-bit x86 systems has been implemented, but the emulator library is not yet included in the main Wine distribution (the external FEX emulator can be used to run x86 code in the ARM64 environment).
- Graphical subsystem
- The PostScript driver has been redesigned to support spool files in the format Windows, which 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.
- Implemented support for loading sound fonts (SoundFont - formats for sample-based synthesis used to play MIDI files) in the DLS1 and DLS2 formats, as well as in the SF2 format used in Linux.
- 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
- The DMO (DirectX Media Object) component with a WMV format decoder has been implemented (Windows Media Video).
- 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
- Support for IMEs (Input Method Editors) has been expanded. Work has been carried out to ensure compatibility with native Windows IME implementations and improved integration with Linux NAME
- 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 (kernel interfaces Windows)
- As the issued version Windows defined by default 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 WineCfg interface has been updated to support older versions on 64-bit platforms. Windows (before XP), 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 database (Windows Management Instrumentation).
- 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 has the ability to display the contents of registry files. Windows (REGF format), as well as displaying 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 PCSClite library is used (in macOS — PCSC).
- Building PE files on non-i386 platforms now requires a cross-compiler with support for ".seh" directives to handle exceptions.
Source: opennet.ru
