Wine

On this page 7

Wine is an open-source compatibility layer that runs Windows applications on Linux, macOS and other Unix-like operating systems by reimplementing the Windows API and translating its calls into native system calls. In OS compatibility, Wine is the standard example of running software made for another system without emulating hardware and without a copy of Windows.

The name is a recursive acronym, Wine Is Not an Emulator, which states its central design choice. Wine loads unmodified Windows executables and runs their code directly on the processor, supplying the libraries and services those programs expect to find.

How Wine runs Windows programs

Wine runs Windows programs by acting as a loader plus a reimplementation of Windows system libraries. It reads the Portable Executable (PE) format used by Windows binaries, maps the code into memory, and links it against Wine’s own versions of DLLs such as kernel32, user32 and gdi32.

Because the application and the host share the same CPU architecture in the typical case, instructions execute natively at full speed. The overhead arises only where Wine must translate a Windows API call into its Linux or macOS equivalent, for example turning a file-open request into a POSIX call or a window-drawing request into X11 or Wayland operations.

ComponentRoleWindows counterpart
Program loaderLoads PE executables and DLLsWindows loader in ntdll
wineserverCoordinates processes, handles, synchronizationParts of the Windows kernel
Built-in DLLsReimplement Windows librariesSystem DLLs
Wine prefixSimulated C: drive and registryA Windows installation
Graphics translationMaps Direct3D to OpenGL or VulkanDirect3D runtime and drivers
Main Wine components and their roles

A Wine prefix is a directory, by default ~/.wine, that holds a simulated drive_c, a registry and configuration. Separate prefixes keep applications isolated from each other, so a program that needs specific settings or extra runtimes does not disturb others.

Wine compared with emulation and virtual machines

Wine differs from emulation and virtualization because it replaces the operating system interface instead of simulating the hardware or running a full guest system. This choice gives it low overhead but makes compatibility depend on how completely Wine reproduces Windows behavior.

ApproachNeeds a Windows licensePerformanceCompatibility
WineNoNear native for most codeVaries by application
Virtual machineYesGood CPU, weaker 3D graphicsVery high
Full emulationYesSlowVery high
Dual bootYesNativeComplete, one system at a time
Native portNoNativeComplete, if the developer ports it
Ways to run Windows software on another system

When the host processor uses a different architecture, such as an Arm-based Mac, Wine must be combined with binary translation. On Apple silicon, Rosetta 2 translates x86-64 instructions while Wine handles the API layer, so the two techniques solve different halves of the problem.

Wine is also distinct from Windows’ own compatibility mode, which adjusts how a current Windows version presents itself to older programs. Wine solves a broader problem: the program is not on Windows at all, so the entire application binary interface and every system service it calls must be supplied from outside. Developers can also link Wine’s libraries into source code with Winelib, which helps when porting software rather than running existing binaries.

Wine-based projects and distributions

Several widely used products build on Wine and add gaming-focused components, configuration presets or commercial support. They share the same core but differ in audience and tuning.

ProjectFocusKey additions
ProtonWindows games on Linux and Steam DeckDXVK, VKD3D-Proton, per-game fixes
CrossOverCommercial support on macOS and LinuxTested profiles, vendor support
Game Porting ToolkitEvaluating Windows games on macOSDirect3D 12 to Metal translation
Lutris and BottlesManaging Wine installationsPrefix management, install scripts
Notable projects built on Wine

The graphics layers are central to gaming. DXVK translates Direct3D 9, 10 and 11 to Vulkan, and VKD3D-Proton translates Direct3D 12. These translators, more than the core Wine libraries, decide whether a modern game performs well.

Practical use and configuration

Using Wine well comes down to choosing the right version, isolating applications in prefixes and installing missing runtimes. Most issues are configuration problems rather than fundamental incompatibilities.

  • Wine branches: stable releases favor reliability, development releases add fixes faster, and Wine Staging carries experimental patches.
  • winecfg sets the reported Windows version, DLL overrides and drive mappings per prefix.
  • DLL overrides decide whether Wine uses its built-in library or a native Windows DLL supplied by an installer.
  • winetricks installs common runtimes such as Visual C++ redistributables, .NET or core fonts.
  • 32-bit and 64-bit prefixes matter, because some older installers expect a 32-bit environment.

Before investing time, check community compatibility reports for the specific application version. Ratings such as platinum, gold, silver and garbage in the Wine application database summarize how well a program runs and which workarounds are needed.

Limitations and common problems

Wine cannot run every Windows program, and the main barriers are kernel-level components, undocumented behavior and copy protection. Wine runs entirely in user space, so it cannot load Windows kernel drivers.

SymptomLikely causeTypical remedy
Game refuses to start onlineKernel-level anti-cheatOften none unless the vendor enables support
Hardware device not detectedRequires a Windows kernel driverUse a VM with device passthrough
Missing or broken textMissing fontsInstall core fonts with winetricks
Installer crashesMissing runtime or wrong prefix architectureAdd runtime, use a fresh prefix
Poor 3D performanceOld graphics translation pathEnable DXVK or update drivers
Typical Wine problems

Compatibility is also a moving target. A program that works today may break after an update that relies on a newly used Windows feature, and fixes may arrive weeks later. For business-critical software, a virtual machine often remains the safer choice.

The short version

Wine is like an interpreter standing between a Windows program and a different computer. The program keeps asking for Windows services, and Wine answers each request in the language that Linux or macOS understands.

Because Wine does not pretend to be a whole computer, programs run quickly. The catch is that Wine has to imitate Windows very precisely, so some programs, especially those with deep system hooks, still do not work.

Where it makes a difference

A small engineering firm moves its workstations to Linux but still depends on one legacy Windows tool for generating parts lists, a 32-bit program whose vendor no longer exists. Running a full Windows virtual machine on every desk would require licenses and extra memory for a single utility.

The administrator creates a dedicated 32-bit Wine prefix, installs the required Visual C++ runtime with winetricks and maps a network share as drive P: so the tool finds its templates. The program starts in a few seconds and prints correctly through the Linux print system. The outcome is that the firm keeps its workflow without Windows licenses, while one older machine with Windows remains as a fallback.