Wine is a compatibility layer for running Windows software on Linux, BSD and MacOS.
Emulator, it is a re-implementation of Windows APIs using standard POSIX calls. WINE lets you run Windows regular software applications on Linux just as fast as it runs on Windows and it will run most games with slightly lower frame-rates.
Introduction: "Wine Is Not an Emulator"
A Windows game running under Wine.
Wine is a free software implementation of the common Windows APIs. It does not emulate anything. Software written to run using the Windows API which does not use system calls should run just as fast or faster than they do on Windows.. This differs from software like DOSBox which emulates a complete IBM-compatible computer in order to run MS-Dos programs. Emulating an entire PC menas that DOSBox can be used on other architectures such as PowerPC and ARM. Wine is limited to x86-64 only.
The Wine Is Not An Emulator isn't entirely true when it comes to 3D graphics. Wine has a built-in translation layer which translates DirectX calls to OpenGL. There is also an optional DirectX to Vulkan translation layer called DXVK available. The Steam games store from Valve has it's own 3D translation layer called Proton which is essentially DXVK with some additional patches.
The State Of Wine as of 2019
Wine originally released way back in July 1993. It is a very old project. It took more than a decade from it's release to the point where it would run commonly used Windows software without major problems.
Wine is, as of late 2019, in a state where you can use it to run most Windows software, including games, almost perfectly. 3D games will have a performance-penalty caused by the translation of draw-calls from DirectX to either OpoenGL (built-in) or Vulkan (DXVK).
Some Windows programs, specially the very latest versions of more advanced programs, will have some issues. The Wine website offers at "Wine Application Database" at appdb.winehq.org. That database lists a lot of software and there's version-specific ratings for each application which indicate how well they run under Wine. For example, if you look up photoshop in the Wine Application Database you will find that version 16 ("2015") has a "Gold" rating, 19.0 ("CC 2018") has a "Silver" rating and version 20.0 (2019) has a "Garbage" rating. This means that you should avoid Photoshop version 20 and use one of the older versions if you want to have a good experience using Photoshop on a GNU/Linux machine. Do notice the Wine version listed if you check the Wine Application Database, it matters. How someone rated a Windows programs compatibility with a 10 year old Wine version says very little about the current Wine versions ability to run that program.
Wine has a built-in translation layer for DirectX 10 and 11 which uses OpenGL to draw graphics. It has also got a library called vkd3d which translates DirectX 12 to Vulkan. Both of those translation layers come with a overhead.
The majority of Wine's libraries are native re-implementations of Windows libraries. Those libraries do not have any inherent performance penalties and they are, in some cases, faster than the Windows libraries. This is not true when it comes to graphics APIs. Wine implements Direct3D 12 by translating DirectX calls to Vulkan. This has a performance-overhead and it does result in lower frame-rates. How big that performance-penalty is will depend on the processors single-core performance.
Howto Enable DXVK (DirectX 10 and 11 by Vulkan)
The Windows-game "Monster Girl Island" running under WINE with DXVK for 3D rendering.
DXVK (github page) is a translation layer which converts DirectX 10 and 11 draw calls to Vulkan. It is not included the standard Wine package which will, by default, translate DX10 and DX11 to OpenGL.
Fedora 31 will enable DXVK if you install the
WINEPREFIX=$HOME/.wine setup_dxvk install
$HOME/.wine if you are using a non-default Wine location.
DXVK comes with a heads-up display which can display frame-count and other information as an overlay. It can be enabled by setting the environment variable
DXVK_HUD. It can be set to display an array of data including
frametimes and more. See the dxvk github page for all. Setting
DXVK_HUD=devinfo,fps which displays GPU and driver version and framerate. Setting
DXVK_HUD=full enables everything the HUD can show.
Wine versions with additional features
Valve has their own Wine branch called Proton which is Wine with some additional game-enhancing features. Code from Proton is to a large degree back-ported into Wine. Proton can be used stand-alone but isn't really developed to be used that way, it is primarily a product Valve develops under an open source model in order to make Windows games sold in their Steam store run native on Linux.
Proton's github is at https://github.com/ValveSoftware/Proton
- Wine's homepage is at www.winehq.org.