Wine is an open-source compatibility layer for running Windows applications on Unix-based operating systems, such as Linux and macOS. It allows users to run Windows software without the need for a Windows operating system.
Wine stands for "Wine Is Not an Emulator" because it does not emulate a full Windows environment, but rather translates Windows system calls into their equivalents on the host system. This allows Windows applications to run more efficiently and with better performance than if they were emulated.
Features
Binary Compatibility
- Loads 64-bit, 32-bit, 16-bit Windows 9x/NT/2000/XP/Vista/7/8/10 and Windows 3.x programs and libraries
- Win32 compatible memory layout, exception handling, threads and processes
- Designed for POSIX compatible operatings systems (eg. Linux, macOS and FreeBSD) and Android
- "bug-for-bug" compatibility with Windows
Win32 API support
- Support for DirectX based games and applications (Direct3D support up to DirectX 12)
- Support for OpenGL and Vulkan based games and applications
- DirectShow support with use of GStreamer for codecs
- Direct2D, DirectWrite support
- MMDevice API, XAudio, WinMM, DirectSound audio APIs are supported
- Printing via PostScript driver to the host printing system (usually CUPS)
- Enhanced Metafile (EMF) and Windows Metafile (WMF) driver
- Desktop-in-a-box or mixable windows
Allows Windows program to interface with:
- X11-based graphics which allow remote display to any X terminal
- macOS and Android based graphics
- X11, TrueType (.ttf/.ttc) and Windows Bitmap (.fon) fonts
- Sound devices via ALSA, OSS, PulseAudio, Core Audio, etc.
- Multi-lingual keyboards and CJK input method support via XIM
- Modems, serial devices
- Networks (TCP/IP and IPX)
- ASPI Scanners
- Windows Tablets via XInput (eg. Wacom)
- Video capture devices via v4l2
- HID devices via IOHid (MacOS), evdev (Linux), hidraw (Linux), SDL2
API Coverage and Portability
- Designed for source and binary compatibility with Win32 code
- Win32 API test suite to ensure compatibility
- Compilable on a wide range of C compilers
- Permits mixing of Win32 and POSIX code
- Permits mixing of ELF (.so) and PE (.dll/.exe) binaries in one address space
- Win32 compatible header files
- Automatically generated API documentation
- Resource compiler
- Message compiler
- IDL compiler
- Extensive Unicode support
- Internationalization – Wine supports 16 languages
- Built-in debugger and configurable trace messages
- External memory checker support using Valgrind
- Sample programs
What's New
The Wine development release 9.14 is now available.
Features
- Mailslots reimplemented using server-side I/O.
- More support for ODBC Windows drivers.
- Still more user32 data structures in shared memory.
- Various bug fixes.
Bugs fixed
- #11268 Civilization I for Windows (16-bt) incorrectly displays some dialogues
- #32679 cmd.exe Add support for || and &&
- #48167 1000 Mots V4.0.2 freeze when 3 words are pronounced - Underrun of data
- #48455 Multiple .inf driver installers hang due to missing handling of architecture-specific SourceDisks{Names,Files} .inf sections (Native Instruments Native Access 1.9, WinCDEmu 4.1)
- #49944 Multiple games fail to detect audio device (Tom Clancy's Splinter Cell: Conviction, I Am Alive)
- #50231 Ys: Origin shows black screen during video playback
- #54735 AOL (America Online) Desktop Beta fails when installing .net 4.8
- #54788 AOL 5.0 Installation fails
- #55662 Different behaviour of "set" command
- #55798 Unreal Engine 5.2: Wine minidumps take hours to load into a debugger
- #56751 New WoW64 compilation fails on Ubuntu Bionic
- #56861 Background color of selected items in ListView(or ListCtrl) is white
- #56954 Regression causes wine to generate ntlm_auth processes
- #56956 MSVC cl.exe 19.* fails to flush intermediate file
- #56957 CEF application (BSG Launcher) freezes on mouse hover action
- #56958 ChessBase 17 crashes after splash screen
- #56969 Act of War (Direct Action, High Treason) crashes in wined3d when loading the mission
- #56972 Warlords III: Darklords Rising shows empty screen in virtual desktop
- #56977 accept()-ed socket fds are never marked as cacheable
- #56994 mbstowcs for UTF8, with an exact (not overallocated) output buffer size fails
Stable
The Wine team is proud to announce that the stable release Wine 9.0 is now available.
WoW64
- All transitions from Windows to Unix code go through the NT syscall interface. This is a major milestone that marks the completion of the multi-year re-architecturing work to convert modules to PE format and introduce a proper boundary between the Windows and Unix worlds.
- All modules that call a Unix library contain WoW64 thunks to enable calling the 64-bit Unix library from 32-bit PE code. This means that it is possible to run 32-bit Windows applications on a purely 64-bit Unix installation. This is called the new WoW64 mode, as opposed to the old WoW64 mode where 32-bit applications run inside a 32-bit Unix process.
- The new WoW64 mode is not yet enabled by default. It can be enabled by passing the --enable-archs=i386,x86_64 option to configure. This is expected to work for most applications, but there are still some limitations, in particular:
- Lack of support for 16-bit code.
- Reduced OpenGL performance and lack of ARB_buffer_storage extension support.
- The new WoW64 mode finally allows 32-bit applications to run on recent macOS versions that removed support for 32-bit Unix processes.
Wayland driver
- There is an experimental Wayland graphics driver. It's still a work in progress, but already implements many features, such as basic window management, multiple monitors, high-DPI scaling, relative motion events, and Vulkan support.
- The Wayland driver is not yet enabled by default. It can be enabled through the HKCU\Software\Wine\Drivers registry key by running:
- wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- and then making sure that the DISPLAY environment variable is unset.
Arm64
- The completion of the PE/Unix separation means that it's possible to run existing Windows binaries on ARM64.
- The loader supports loading Arm64X and ARM64EC modules.
- The 32-bit x86 emulation interface is implemented. No emulation library is provided with Wine at this point, but an external library that exports the interface can be used, by specifying its name in the HKLM\Software\Microsoft\Wow64\x86 registry key. The FEX emulator implements this interface when built as PE.
- There is initial support for building Wine for the ARM64EC architecture, using an experimental LLVM toolchain. Once the toolchain is ready, this will be used to do a proper ARM64X build and enable 64-bit x86 emulation.
Graphics
- The PostScript driver is reimplemented to work from Windows-format spool files and avoid any direct calls from the Unix side.
- WinRT theming supports a dark theme option, with a corresponding toggle in WineCfg.
- The Vulkan driver supports up to version 1.3.272 of the Vulkan spec.
- A number of GdiPlus functions are optimized for better graphics performance.
Direct3D
- The multi-threaded command stream sleeps instead of spinning when not processing rendering commands. This lowers power consumption in programs which do not occupy the command stream's entire available bandwidth. Power consumption should be comparable to when the multi-threaded command stream is disabled.
- Direct3D 10 effects support many more instructions.
- Various optimizations have been made to core WineD3D and the Vulkan backend.
- The Vulkan renderer properly validates that required features are supported by the underlying device, and reports the corresponding Direct3D feature level to the application.
- D3DXFillTextureTX and D3DXFillCubeTextureTX are implemented.
- The legacy OpenGL ARB shader backend supports shadow sampling via ARB_fragment_program_shadow.
- The HLSL compiler supports matrix majority compilation flags.
- D3DXLoadMeshHierarchyFromX and related functions support user data loading via ID3DXLoadUserData.
Audio / Video
- The foundation of several of the DirectMusic modules is implemented. Many tests are added to validate the behavior of the dmime sequencer and the dmsynth MIDI synthesizer.
- DLS1 and DLS2 sound font loading is implemented, as well as SF2 format for compatibility with Linux standard MIDI sound fonts.
- MIDI playback is implemented in dmsynth, with the integration of the software synthesizer from the FluidSynth library, and using DirectSound for audio output.
- Doppler shift is supported in DirectSound.
- The Indeo IV50 Video for Windows decoder is implemented.
DirectShow
- The Windows Media Video (WMV) decoder DirectX Media Object (DMO) is implemented.
- The DirectShow Audio Capture filter is implemented.
- The DirectShow MPEG�'1 Stream Splitter filter supports video and system streams as well as audio streams.
- The DirectShow MPEG�'1 Video Decoder filter is implemented.
Input devices
- DirectInput action maps are implemented, improving compatibility with many old games that use this to map controller inputs to in-game actions.
Read the complete release notes here.