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

Wine 8.14 Development Release:

  • PCSC framework used on macOS for smart card support.
  • Dumping of Windows registry files in WineDump.
  • Fixes for Wow64 window messages.
  • Various bug fixes.

Wine 8.0.2 Stable Release:

  • #11436 Pepakura viewer: err:wgl:X11DRV_wglShareLists Could not share display lists, context already created !
  • #35254 Freemake Video Converter 4.1 installer complains about running Freemake processes (builtin 'findstr' stub app always returns "match")
  • #49964 32-bit dxdiag doesn't support '/64bit' command line switch (launch 64-bit dxdiag)
  • #51178 The Bat! v9.3.4.12: Missing content in TTreeViews on Windows versions higher than 8
  • #52322 wineserver memory leak during HTTPs download (Genshin Impact Launcher, Qt5)
  • #53073 mfplat: unimplemented function while loading Devil May Cry 1
  • #53704 Bible Black ~La Noche de Walpurgis~ won't start
  • #53781 Multiple apps crash on unimplemented function CFGMGR32.dll.CM_MapCrToWin32Err (Matrix Awakens MegaCity Unreal Engine 5.1 demo, Hogwarts Legacy)
  • #53794 Sins of the Solar Empire Rebellion (Gog 1.975.1) crashes on unimplemented function concrt140.dll.?_CheckTaskCollection@_UnrealizedChore@details@Concurrency@@IAEXXZ
  • #53826 Attempting to install / update battle.net fails with Qt error
  • #53983 Chromium broken sandbox, needs NtQueryInformationProcess with ProcessHandleTable
  • #54110 CubicSDR crashes on unimplemented function msvcp140.dll.?_Rethrow_future_exception@std@@YAXVexception_ptr@1@@Z
  • #54618 VARA FM crashes on unimplemented function pdh.dll.PdhVbGetDoubleCounterValue
  • #54640 Treecomp listviews and possibly other widgets are not drawn
  • #54675 Chocolatey OpenSSH installer fails
  • #54687 LibreVR Revive fails to run (CertGetNameStringW with dwType=CERT_NAME_ATTR_TYPE and pvTypePara missing additional fallbacks)
  • #54702 ldp.exe crashes when attempting to add, delete, modify, or compare an entry without a name
  • #54724 LDAP bind over SSL to a server and port that do not support SSL hangs forever
  • #54728 Pro Evolution Soccer 2008 demo takes +- 9 minutes to complete extracting 'Pro Evolution Soccer 2008 DEMO.msi' (disabling 'Light' theme works around)
  • #54733 Notepad3 crashes on unimplemented function SHLWAPI.dll.StrFormatByteSizeEx
  • #54799 wininet:internet - test_InternetGetConnectedStateExA() fails in the Japanese and Chinese locales in Wine
  • #54808 Access violation in ntdll when running Adolix Split and Merge PDF with .NET Framework installed
  • #54819 DnsQuery_A() mishandles CNAME DNS records
  • #54882 Conemu fails to start (cannot attach to process)
  • #54939 Dotted files are shown - but "don't show dotted" files is active
  • #54960 winhttp:winhttp - test_websocket() fails on Windows and Wine
  • #55008 wininet:http - test_secure_connection() fails on Windows and Wine

Direct3D

  • Many optimizations related to streaming map acceleration are implemented, in common code as well as in the GL renderer. Depending on the application, this may result in major performance improvements.
  • Adapter video memory budget change notifications are implemented.
  • The Vulkan renderer supports setting multiple viewports and scissor rectangles.
  • Several Direct3D 10 and 11 features, which were already implemented, are accurately reported through capability flags:
  • *Per-format support for vertex and index buffers.
  • *Per-format support for all capabilities via D3D11_FEATURE_FORMAT_SUPPORT.
  • *No-overwrite maps on shader resources and constant buffers.
  • *Partial range binding of constant buffers.
  • For convenience, a new WINE_D3D_CONFIG environment variable may be used instead of modifying the HKEY_CURRENT_USER\Software\Wine\Direct3D registry key. The value is a comma- or semicolon-separated list of key-value pairs, e.g.:
  • *WINE_D3D_CONFIG="renderer=vulkan;VideoPciVendorID=0xc0de"
  • *If an individual setting is specified in both the environment variable and the registry, the former takes precedence.
  • The Direct3D graphics card database recognizes more graphics cards.
  • The Vulkan renderer limits the maximum Direct3D feature level based on available Vulkan features.

Direct3D helper libraries

  • A new HLSL compiler is implemented using the vkd3d-shader library.
  • A new HLSL disassembler is implemented using the vkd3d-shader library.
  • The HLSL preprocessor is reimplemented using the vkd3d-shader HLSL preprocessor.
  • The D3DX 10 Thread Pump is implemented.
  • Many more expressions are supported in Direct3D 10 effects.
  • Cubemap projection is implemented in the D3DX 9 helper library.

Audio / Video

  • The MPEG-1 audio decoder filter for layers 1 and 2, and the separate filter for layer 3, are both implemented on top of GStreamer.
  • The ASF reader filter is implemented.
  • The OpenAL32.dll wrapper library is removed, in favor of the native OpenAL32.dll library shipped by Windows applications.

Media Foundation

  • Content type resolution is improved in the Media Foundation Player.
  • Rate control is implemented.
  • The Enhanced Video Renderer default mixer and presenter are better supported.
  • The DirectShow filter is implemented in the Enhanced Video Renderer.
  • An initial framework is implemented for the Writer encoding API.
  • The topology loader is better supported.

Input devices

  • Controller hotplug support is greatly improved, and controller removal and insertion are correctly dispatched to applications.
  • Driving wheel device detection and reporting is better implemented, using the SDL library and HID usages as hints for the device types.
  • Force feedback effect support is improved, specifically with driving wheel controllers.
  • The HID Haptics specification is used for left / right motor rumble and trigger rumble. It makes it possible for device drivers to expose haptics support over HidRaw, and overcome EvDev limitations.
  • The Joystick Control Panel is redesigned, with new graphics and a dedicated view for XInput gamepads.
  • Sony DualShock and DualSense controllers are supported when the hidraw backend is used, and exposed to applications in the same way as they are on Windows.
  • The Windows.Gaming.Input module is introduced, one of the first WinRT modules in Wine, implementing a new programming interface to access gamepads, joysticks and driving wheel devices. For this new input API, hotplug notifications are also implemented, as well as force feedback effects and haptics. This API is the first one to support trigger rumble.

Internationalization

  • A proper locale database, in Windows locale.nls format, is generated from the Unicode CLDR database. The list of supported locales is essentially identical to that of the latest Windows version.
  • Unicode string comparison is based on the Windows Sortkey database and algorithms instead of the Unicode Collation Algorithm, yielding more compatible results.
  • Characters from high Unicode planes (in UTF-16 encoding) are supported in most functions, in particular for case mappings, BiDi formatting, and character shaping.
  • The UTF-8 encoding is supported as Ansi codepage. It is enabled when requested by the application's manifest.
  • Unicode character tables are based on version 15.0.0 of the Unicode Standard.
  • The timezone data is generated from the IANA timezone database version 2022g.

Text and fonts

  • Font linking is enabled for most system fonts, which should fix missing glyphs in CJK locales.
  • Font fallback in DirectWrite is reworked, with additional support for an large number of scripts.

Kernel

  • The ApiSetSchema database is implemented, replacing all the api-ms-* forwarding modules. This reduces both disk space and address space usage.
  • DOS file attributes are persistent, and stored on disk using the filesystem's extended attributes, in a format compatible with Samba.

Internet and networking

  • The Online Certificate Status Protocol (OCSP) is implemented.
  • More EcmaScript features are supported in JScript standard-compliant mode.
  • The JScript garbage collector is implemented.
  • Accessibility support is enabled in Wine Gecko package.
  • Web Storage, Performance object and more event objects are implemented in MSHTML.

Mono / .NET

  • The Mono engine is updated to version 7.4.0. The list of changes can be viewed at https://github.com/madewokherd/wine-mono/releases/tag/wine-mono-7.4.0

Builtin applications

  • All the builtin applications use Common Controls version 6, which enables theming and high-DPI rendering by default.
  • The Wine Debugger (winedbg) prints thread names in the 'info thread' listing, for applications that set the names of their threads. All internal Wine threads also set their own name.
  • The QWORD type is supported in the REGEDIT and REG registry tools.
  • Notepad has a status bar displaying the current cursor position. The Goto Line functionality is also implemented.
  • The builtin console programs print data in the OEM codepage, for better compatibility with applications reading their output.
  • The Service Control tool (sc.exe) supports the 'query' command.

Development tools

  • The PE conversion has made it necessary to implement a new mechanism to run static C++ constructors in Winelib ELF applications. Unfortunately, this requires the corresponding modules to be rebuilt with Wine 8.0. The rebuilt modules will still run correctly on older Wine versions, but older modules will no longer execute static constructors when run on Wine 8.0.
  • In regression tests, individual checks can be marked as "flaky". This is useful for checks that depend on external factors such as network timings. The errors are still reported but not counted as failures.
  • Test failure messages can be printed in color by setting the WINETEST_COLOR environment variable, to make them easier to spot in the test log.
  • The Resource Compiler (WRC) and Message Compiler (WMC) use the locale.nls database to detect languages and codepages, and thus support all the Windows locales.
  • The WineDump tool supports printing the contents of Enhanced Metafile spool files, as well as more contents from PDB files.

Build infrastructure

  • PE binaries can be built for multiple architectures from the same build tree, using the '--enable-archs' option to configure, for example '--enable-archs=i386,x86_64'. This can be used to enable the experimental WoW64 mode, where 32-bit applications can run without any 32-bit host libraries. Note that this mode is still under development and not yet recommended for general use.
  • Data types that are defined as 'long' on Windows are defined as 'long' instead of 'int' on all platforms with a 32-bit long type. This is more compatible, but it can cause printf format warnings with Unix compilers. In Winelib code, it can be disabled by defining WINE_NO_LONG_TYPES.
  • Import libraries can be generated without using dlltool, by passing the '--without-dlltool' option to winebuild. This is used to avoid dlltool bugs with delay import libraries.
  • Libraries that contain only resources and no code can be built with the '--data-only' option to winegcc, which makes them smaller and more efficient to load.

Bundled libraries

  • Faudio is updated to the upstream release 22.11.
  • LCMS2 is updated to the upstream release 2.14.
  • LibJPEG is updated to the upstream release 9e.
  • LibMPG123 is updated to the upstream release 1.31.1.
  • LibPng is updated to the upstream release 1.6.39.
  • LibTiff is updated to the upstream release 4.4.0.
  • LibXml2 is updated to the upstream release 2.10.3.
  • LibXslt is updated to the upstream release 1.1.37.
  • Zlib is updated to the upstream release 1.2.13.

Platform-specific features

  • The experimental WoW64 architecture is supported on macOS versions from 10.15.
  • 64-bit time_t is supported on 32-bit Linux with recent Glibc versions.
  • Exception unwinding on ARM platforms is extended with EHABI support on ARM32 and Dwarf support on ARM64.

Miscellaneous

  • RSA encryption and the RSA-PSS signing algorithm are implemented.
  • An initial version of the UI Automation API is implemented.
  • Function name demangling supports various C++11 features.

External dependencies

  • The vkd3d and LDAP libraries are bundled in the source tree and built as PE. The corresponding Unix libraries are no longer needed.
  • The OpenAL library is no longer used.