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 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.