Convert Figma logo to code with AI

wine-mirror logowine

No description available

3,122
1,058
3,122
11

Top Related Projects

24,814

Compatibility tool for Steam Play based on Wine and additional components

14,565

A free Windows-compatible Operating System

Fork of VKD3D. Development branches for Proton's Direct3D 12 implementation.

13,053

Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine

8,115

Lutris desktop client

Quick Overview

Wine (Wine Is Not an Emulator) is an open-source compatibility layer that allows Windows applications to run on Unix-like operating systems, including Linux, macOS, and BSD. It translates Windows API calls into POSIX calls on-the-fly, eliminating the performance and memory penalties of other methods and allowing you to cleanly integrate Windows applications into your desktop.

Pros

  • Enables running Windows applications on non-Windows operating systems
  • Free and open-source software with a large community of contributors
  • Regularly updated with support for a wide range of Windows applications and games
  • Integrates seamlessly with native Unix-like environments

Cons

  • Not all Windows applications are fully compatible or run perfectly
  • Performance may be lower compared to running natively on Windows
  • Some complex applications or those with heavy system integration may not work
  • Debugging issues can be challenging due to the complexity of the translation layer

Getting Started

To get started with Wine on a Linux system:

  1. Install Wine from your distribution's package manager:

    sudo apt install wine # For Ubuntu/Debian
    sudo dnf install wine # For Fedora
    
  2. Run a Windows executable:

    wine path/to/program.exe
    
  3. Configure Wine settings using the configuration tool:

    winecfg
    
  4. For more advanced usage and troubleshooting, refer to the official Wine documentation at https://www.winehq.org/documentation

Note: Wine is not a code library, so code examples are not applicable in this context.

Competitor Comparisons

24,814

Compatibility tool for Steam Play based on Wine and additional components

Pros of Proton

  • Optimized for gaming performance, especially on Steam
  • Includes additional compatibility layers and tools (e.g., DXVK, VKD3D)
  • Regular updates focused on improving game compatibility

Cons of Proton

  • More specialized, primarily targeting games and Steam platform
  • May have less compatibility with non-gaming Windows applications
  • Potentially larger resource footprint due to additional components

Code Comparison

Wine:

/* Convert a Unicode string to ASCII */
void wine_unicode_to_ascii( const WCHAR *src, char *dst, int len )
{
    while (len-- > 0) *dst++ = *src ? *src++ : 0;
}

Proton:

static void proton_unicode_to_ascii(const WCHAR *src, char *dst, int len)
{
    while (len-- > 0) *dst++ = *src && *src < 0x80 ? *src++ : '?';
}

The Proton version handles non-ASCII characters differently, replacing them with '?' instead of 0, which may be more suitable for certain gaming scenarios.

14,565

A free Windows-compatible Operating System

Pros of ReactOS

  • Aims to be a complete operating system, not just a compatibility layer
  • Potentially better performance for Windows applications
  • More comprehensive Windows-like experience, including drivers and system services

Cons of ReactOS

  • Less mature and stable compared to Wine
  • Smaller developer community and slower development pace
  • Limited hardware support due to its nature as a full OS

Code Comparison

ReactOS (system call implementation):

NTSTATUS NTAPI NtCreateFile(
    PHANDLE FileHandle,
    ACCESS_MASK DesiredAccess,
    POBJECT_ATTRIBUTES ObjectAttributes,
    PIO_STATUS_BLOCK IoStatusBlock,
    PLARGE_INTEGER AllocationSize,
    ULONG FileAttributes,
    ULONG ShareAccess,
    ULONG CreateDisposition,
    ULONG CreateOptions,
    PVOID EaBuffer,
    ULONG EaLength)
{
    // Implementation details...
}

Wine (equivalent function):

NTSTATUS WINAPI NtCreateFile(
    PHANDLE handle, ACCESS_MASK access, POBJECT_ATTRIBUTES attr,
    PIO_STATUS_BLOCK io, PLARGE_INTEGER alloc_size,
    ULONG attributes, ULONG sharing, ULONG disposition,
    ULONG options, PVOID ea_buffer, ULONG ea_length )
{
    // Implementation details...
}

Both projects aim to provide Windows compatibility, but ReactOS focuses on creating a full operating system, while Wine is a compatibility layer for running Windows applications on other operating systems.

Fork of VKD3D. Development branches for Proton's Direct3D 12 implementation.

Pros of vkd3d-proton

  • Focused specifically on DirectX 12 to Vulkan translation
  • Optimized for gaming performance on Linux systems
  • Actively developed with frequent updates

Cons of vkd3d-proton

  • Limited scope compared to Wine's broader compatibility layer
  • Requires Vulkan support, which may not be available on all systems
  • Potentially less stable due to rapid development cycle

Code Comparison

vkd3d-proton (DirectX 12 to Vulkan translation):

VkResult vkd3d_create_image_resource(struct d3d12_device *device,
                                     const D3D12_RESOURCE_DESC *desc,
                                     const D3D12_CLEAR_VALUE *optimized_clear_value,
                                     D3D12_RESOURCE_STATES initial_state,
                                     const D3D12_HEAP_PROPERTIES *heap_properties,
                                     struct d3d12_resource **resource)

Wine (Windows API implementation):

NTSTATUS WINAPI NtCreateFile(PHANDLE FileHandle, ACCESS_MASK DesiredAccess,
                             POBJECT_ATTRIBUTES ObjectAttributes, PIO_STATUS_BLOCK IoStatusBlock,
                             PLARGE_INTEGER AllocationSize, ULONG FileAttributes, ULONG ShareAccess,
                             ULONG CreateDisposition, ULONG CreateOptions, PVOID EaBuffer, ULONG EaLength)

The code snippets demonstrate the different focus areas of the two projects, with vkd3d-proton handling graphics-related tasks and Wine implementing broader Windows API functionality.

13,053

Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine

Pros of DXVK

  • Specialized focus on DirectX to Vulkan translation, offering better performance for many games
  • Faster development cycle and more frequent updates
  • Easier to integrate into existing Wine installations

Cons of DXVK

  • Limited scope compared to Wine's broader compatibility layer
  • Requires Vulkan support, which may not be available on all systems
  • Potential for compatibility issues with certain games or applications

Code Comparison

DXVK (D3D11 to Vulkan translation):

VkResult STDMETHODCALLTYPE D3D11DeviceContext::Map(
        ID3D11Resource*               pResource,
        UINT                          Subresource,
        D3D11_MAP                     MapType,
        UINT                          MapFlags,
        D3D11_MAPPED_SUBRESOURCE*     pMappedResource) {
  // Vulkan-specific mapping implementation
}

Wine (D3D11 to OpenGL translation):

HRESULT CDECL wined3d_device_context_map(struct wined3d_device_context *context,
        struct wined3d_resource *resource, unsigned int sub_resource_idx,
        struct wined3d_map_desc *map_desc, const struct wined3d_box *box, uint32_t flags)
{
    // OpenGL-specific mapping implementation
}

The code snippets demonstrate the different approaches: DXVK translates DirectX calls to Vulkan, while Wine typically uses OpenGL as the target API.

8,115

Lutris desktop client

Pros of Lutris

  • User-friendly interface for managing and launching games
  • Supports multiple gaming platforms and emulators, not just Wine
  • Active community with frequent updates and game-specific installers

Cons of Lutris

  • Larger codebase and more complex architecture
  • Depends on Wine and other external components
  • May introduce additional overhead compared to using Wine directly

Code Comparison

Wine (C):

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    TRACE("(%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
    return TRUE;
}

Lutris (Python):

def get_game_launcher(game):
    if game.runner.name == "wine":
        return winelib.create_prefix(game)
    elif game.runner.name == "steam":
        return steam.get_steam_launcher(game)
    # ... other runners

Summary

Wine is a low-level compatibility layer for running Windows applications on Unix-like systems, while Lutris is a game management platform that utilizes Wine (among other tools) to provide a more user-friendly gaming experience. Wine offers direct control and potentially better performance, whereas Lutris provides convenience and a unified interface for various gaming platforms at the cost of some complexity.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

INTRODUCTION

Wine is a program which allows running Microsoft Windows programs (including DOS, Windows 3.x, Win32, and Win64 executables) on Unix. It consists of a program loader which loads and executes a Microsoft Windows binary, and a library (called Winelib) that implements Windows API calls using their Unix, X11 or Mac equivalents. The library may also be used for porting Windows code into native Unix executables.

Wine is free software, released under the GNU LGPL; see the file LICENSE for the details.

QUICK START

From the top-level directory of the Wine source (which contains this file), run:

./configure
make

Then either install Wine:

make install

Or run Wine directly from the build directory:

./wine notepad

Run programs as wine program. For more information and problem resolution, read the rest of this file, the Wine man page, and especially the wealth of information found at https://www.winehq.org.

REQUIREMENTS

To compile and run Wine, you must have one of the following:

  • Linux version 2.6.22 or later
  • FreeBSD 12.4 or later
  • Solaris x86 9 or later
  • NetBSD-current
  • Mac OS X 10.12 or later

As Wine requires kernel-level thread support to run, only the operating systems mentioned above are supported. Other operating systems which support kernel threads may be supported in the future.

FreeBSD info: See https://wiki.freebsd.org/Wine for more information.

Solaris info: You will most likely need to build Wine with the GNU toolchain (gcc, gas, etc.). Warning : installing gas does not ensure that it will be used by gcc. Recompiling gcc after installing gas or symlinking cc, as and ld to the gnu tools is said to be necessary.

NetBSD info: Make sure you have the USER_LDT, SYSVSHM, SYSVSEM, and SYSVMSG options turned on in your kernel.

Mac OS X info: You need Xcode/Xcode Command Line Tools or Apple cctools. The minimum requirements for compiling Wine are clang 3.8 with the MacOSX10.10.sdk and mingw-w64 v8. The MacOSX10.14.sdk and later can only build wine64.

Supported file systems: Wine should run on most file systems. A few compatibility problems have also been reported using files accessed through Samba. Also, NTFS does not provide all the file system features needed by some applications. Using a native Unix file system is recommended.

Basic requirements: You need to have the X11 development include files installed (called xorg-dev in Debian and libX11-devel in Red Hat). Of course you also need make (most likely GNU make). You also need flex version 2.5.33 or later and bison.

Optional support libraries: Configure will display notices when optional libraries are not found on your system. See https://gitlab.winehq.org/wine/wine/-/wikis/Building-Wine for hints about the packages you should install. On 64-bit platforms, you have to make sure to install the 32-bit versions of these libraries.

COMPILATION

To build Wine, do:

./configure
make

This will build the program "wine" and numerous support libraries/binaries. The program "wine" will load and run Windows executables. The library "libwine" ("Winelib") can be used to compile and link Windows source code under Unix.

To see compile configuration options, do ./configure --help.

For more information, see https://gitlab.winehq.org/wine/wine/-/wikis/Building-Wine

SETUP

Once Wine has been built correctly, you can do make install; this will install the wine executable and libraries, the Wine man page, and other needed files.

Don't forget to uninstall any conflicting previous Wine installation first. Try either dpkg -r wine or rpm -e wine or make uninstall before installing.

Once installed, you can run the winecfg configuration tool. See the Support area at https://www.winehq.org/ for configuration hints.

RUNNING PROGRAMS

When invoking Wine, you may specify the entire path to the executable, or a filename only.

For example, to run Notepad:

wine notepad            (using the search Path as specified in
wine notepad.exe         the registry to locate the file)

wine c:\\windows\\notepad.exe      (using DOS filename syntax)

wine ~/.wine/drive_c/windows/notepad.exe  (using Unix filename syntax)

wine notepad.exe readme.txt          (calling program with parameters)

Wine is not perfect, so some programs may crash. If that happens you will get a crash log that you should attach to your report when filing a bug.

GETTING MORE INFORMATION