如何在 Ubuntu 16.04 LTS 上安装 Wine?2025年3月17日 | 阅读 10 分钟 引言Wine 是一款开源免费的兼容层,它允许为 Microsoft Windows 开发的计算机游戏和应用程序在类 Unix 操作系统上运行。Wine 为 Windows 的运行时系统(也称为运行时环境)提供兼容层,该层将 Windows API 调用转换为 POSIX API 调用,重构 Windows 目录结构,并提供替代的 Windows 系统库实现、通过 wine 服务器提供的系统服务以及其他许多元素(如 msiexec、Windows 注册表编辑器和 Internet Explorer)。主要来说,Wine 通过逆向工程(黑盒测试)来规避版权问题。
Wine 的历史1993 年,Eric Youngdale 和 Bob Amstadt 发起了 Wine 项目,旨在在 Linux 上运行 Windows 应用程序。Wine 的灵感来源于 Sun Microsystems 的两款产品:用于 Solaris OS 的 Wahi 和 Public Windows Initiative,后者曾试图将 Windows API 完全重新实现为公共领域的 ISO 标准,但因微软的阻力于 1996 年被拒绝。 最初,Wine 针对的是 Windows 3.x 的 16 位应用程序,但现在则专注于 32 位和 64 位版本,自 2010 年以来,这些版本已成为新操作系统上的主流。该项目源于 1993 年 6 月在 Usenet 上的 comp.os.linux 讨论。自 1994 年以来,Alexander Julliard 一直负责管理该项目。 该项目对开发人员来说非常困难且耗时,这通常是由于 Windows API 文档不准确或不完整。虽然微软详细记录了几乎所有的 Win32 函数,但像协议和文件格式等一些领域,微软并未提供不完整或公开可用的规范,并且 Windows 包含低级未公开的函数、晦涩的 bug 和未公开的行为,Wine 必须精确地复制这些才能使某些应用程序正常工作。Wine 团队在许多文件格式和函数调用方面进行了逆向工程,例如在“thunking”(代码转换)领域。 最初,Wine 项目采用类似于 X Window 系统的 MIT 许可证发布 Wine。然而,由于担心专有版本的 Wine 不将修改共享回主项目,自 2002 年 3 月起,项目已采用 LGPL 许可证。 Wine 的设计Wine 的目标是部分或完全实现 Wine 用户希望在类 Unix 系统上运行的程序所需的 Windows API。 底层架构Microsoft Windows 编程接口主要由 DLL(动态链接库)组成。这些 DLL 包括用于内核系统调用和 NTOS 内核模式程序的几个包装器子例程。典型的 Windows 程序调用一些 Windows 动态链接库,这些库又调用用户模式的 user32/gdi 库,它们进而利用负责通过系统调用处理内核的 kernel32.dll。
Wine 主要通过一个名为 wineserver 的守护进程来复制 Windows 中通常由内核提供的层次结构和功能,该守护进程的目的是运行常见的 Windows 功能、将信号转换为正常的 Windows 异常以及与 X Window 系统集成。尽管 Wineserver 运行着一些 Windows 内核方面的内容,但由于 Wine 的底层架构,无法与它一起使用原生的 Windows 驱动程序。 应用程序和库Wine 允许其 Windows 程序加载 Unix 共享对象和 Windows DLL。它内置的最常见的 Windows DLL 实现,如 USER32、GDI32、KERNEL32 和 NTDLL,采用共享对象技术,因为它们必须使用几乎所有操作系统内的函数。 更高级别的库,如 WineD3D,以 DLL 格式免费提供。在许多情况下,用户可以选择加载 Windows 中的任何 DLL 而不是 Wine 实现的 DLL。这样做可以提供 Wine 尚未实现的功能,但也可能导致应用程序因依赖 Wine 中不存在的其他内容而出现故障。 游戏和图形虽然几乎所有办公软件都不使用复杂的 GPU 加速图形 API,但系统游戏则会。Wine 需要将绘图指令传递给宿主操作系统,甚至将其转换为宿主可以接受的内容。 DirectX 是微软用于输入、音频和渲染的一组 API。截至 2019 年,Wine 的 4.0 版本包括对 Vulkan API 的 DirectX 12 实现和对 OpenGL 的 DirectX 11.2 实现。此外,Wine 的 4.0 版本还允许 Wine 通过将绘图命令管理到宿主操作系统,或通过 MoltenVK 将其转换为 macOS 的 Metal API 来运行 Vulkan 应用程序。
截至 2019 年 2 月,Wine 的 4.3 版本使用 FAudio 库来实现 XAudio2 音频 API。
Wine 的 4.0 版本支持 Direct2D 的 1.2 版本。
Wine 自 4.0 版本以来就提供了对这些库内置实现的控制器支持。它们被制作为 Unix 共享对象,因为它们需要访问底层操作系统的控制器接口,特别是通过 SDL。 Direct3DWine 的大部分 DirectX 工作都投入到创建 WineD3D 中,它是一个将 DirectDraw 和 Direct3D API 调用转换为 OpenGL 的翻译层。截至 2019 年,该组件支持 DirectX 的 11 版本。截至 2016 年 12 月 12 日,Wine 足以使用 D3D11 运行 Overwatch。 此外,WineD3D DLL 不仅在 Wine 中使用,还在 Windows 本身中使用,这使得旧款 GPU 能够运行支持新版本 DirectX 的游戏,并使旧款基于 DDraw 的游戏能够正确渲染。 Wine 的用户界面通常,Wine 通过 wine.program.exe 命令行解释器进行驱动。 Winecfgwinecfg 工具启动一个图形界面,其中包含管理常用选项的控件。它是一个随 Wine 一起添加的图形配置实用程序。使用 winecfg 可以轻松配置 Wine,无需直接编辑注册表,但如果需要,可以使用附带的注册表编辑器进行编辑。 第三方应用程序一些应用程序需要比通常安装软件更多的调整才能正常工作,例如手动配置 Wine 使用 Windows DLL。Wine 项目不将这类解决方法集成到 Wine 代码库中,而是更专注于开发 Wine 的 Windows API 实现。虽然它专注于 Wine 的稳定兼容性开发,但对于需要解决方法的用户来说,执行这些应用程序仍然很困难。 因此,已经开发了各种第三方应用程序来简化那些在 Wine 中不能立即工作的应用程序的使用。Wine Wiki 维护着一个关于已废弃和当前第三方应用程序的页面。
Wine 的功能Wine 的 Direct3D 部分开发者继续使用新的功能,包括像素着色器,以增强游戏支持。此外,Wine 可以直接使用原生 DLL,从而增强功能,但之后需要 Windows 许可证,除非 DLL 与应用程序本身共享。 此外,Wine 还包含许多 Windows 程序的开源实现,包括 Windows Explorer、Internet Explorer、控制面板、WordPad 和记事本。Wine AppDB(应用程序数据库)是一个由社区维护的在线数据库,记录了哪些 Windows 程序可以在 Wine 中实现。 向后兼容性Wine 确保了与许多 Windows 应用程序的良好向后兼容性,包括那些为 Windows 3.1x 指定的应用程序。它可以模拟某些程序所需的多种 Windows 版本。但是,对 Windows 2.x 和 Windows 1.x 的支持已从 Wine 开发的 1.3.12 版本中移除。 在 Wine 中,向后兼容性通常优于 Windows,因为较新版本的 Windows 可能会强制用户更新 Windows 应用程序,并且可能会永久损坏过时的软件,因为没有人会为操作系统的更改调整程序。 64 位应用程序2008 年 12 月,Wine 的 1.1.10 版本开始支持 64 位 Windows 应用程序。截至 2019 年 4 月,该支持被视为稳定。两个 Wine 版本是分开创建的,只创建 wine64 会生成一个只能运行 x86-64 应用程序的环境。 截至 2019 年 4 月,Wine 支持稳定的 WoW64 构建,允许 64 位和 32 位 Windows 应用程序在同一个 Wine 实例中运行。首先,必须创建 64 位版本,然后创建代表 64 位版本以运行此类构建的 32 位版本。 MS-DOS早期的 Microsoft Windows 版本运行在 MS-DOS 之上,许多 Windows 程序可能依赖于 MS-DOS 程序。Wine 对 MS-DOS 的支持并不好,但从 1.3.12 开发版本开始,Wine 会尝试在 DOSBox 中运行 MS-DOS 程序(前提是系统已安装 DOSBox)。由于一个 bug,当前 Wine 版本会错误地识别 Windows 2.x 和 Windows 1.x 程序,并尝试在 DOSBox 中执行它们。 WinelibWine 提供 Winelib,它允许其共享对象 Windows API 实现被用作任何 Unix 程序的原始库。它允许将 Windows 代码编译成原生的 Unix 可执行文件。此外,Winelib 自 2010 年 10 月起在 ARM 平台上实现。 非 x86 架构Solaris SPARC 支持已在 1.5.26 版本中被放弃。
Wine 支持 ARM 处理器以及在其上运行的 Windows 版本。截至 2019 年 4 月,Wine 可以运行为开放 Windows RT 设备设计的 Win32/ARM 应用程序。对 Windows CE 的支持缺失。
2013 年 2 月 3 日,Alexander Julliard 在布鲁塞尔的 FOSDEM 会议上演示了 Wine 在 Google 的 Android 操作系统上的早期运行。2017 年底,为 Android 发布了实验性的 WINE 构建。此后,它已由官方开发者定期更新。默认构建不运行 QEMU 的跨架构模拟,因此 ARM 版本只能运行使用 Win32 API 的 ARM 应用程序。 Microsoft 应用程序默认情况下,Wine 使用 Mono 和 Gecko 的 Windows 版本来替换 Microsoft 的 .NET Framework 和 Internet Explorer。Wine 内置了 VBScript 和 JScript 的实现。任何人都可以通过 winetricks 手动下载并运行这些程序的 Microsoft 安装程序。 其他 Wine 版本
在本教程中,我们将安装 Wine 在 Ubuntu 16.04 LST 操作系统上。此安装过程包括以下步骤。 Wine 安装1) **找到 Windows 软件中心** ![]() 打开它并在搜索栏中键入 **wine**。 ![]() 点击 **安装** 按钮开始安装。安装完成后,它会显示一条通知,表明应用程序已成功安装。 现在,搜索 wine 以检查它是否在菜单中。键入 **wine**,它会显示类似以下的输出。 ![]() 好的,wine 已成功安装,现在我们可以通过右键单击并选择 **用 wine Windows 程序打开** 来执行任何 Windows 应用程序。如下图所示。 ![]() |
我们请求您订阅我们的新闻通讯以获取最新更新。