11.2. WINE 概述和概念

WINE 是一个复杂的系统,因此在 FreeBSD 系统上运行它之前,值得了解一下它是什么以及它是如何工作的。

11.2.1. 什么是 WINE ?

正如本章简介中提到的,WINE 是一个兼容层,允许 Windows® 应用程序在其他操作系统上运行。在理论上,这意味着这些程序应该在 FreeBSD 、 macOS 和 Android 等系统上运行。

当 WINE 运行一个 Windows® 可执行文件时,会发生两件事:

  • 首先,WINE 实现了一个模仿各种版本的 Windows® 的环境。例如,如果一个应用程序要求访问一个资源,如 RAM,WINE 有一个内存接口,看起来和行动(就应用程序而言)都像 Windows®。

  • 然后,假设该应用程序使用该接口,WINE 就会接收到对内存空间的传入请求,并将其转化为与主机系统兼容的东西。以同样的方式,当应用程序检索该数据时,WINE 帮助从主机系统中获取该数据并将其传回给 Windows® 应用程序。

11.2.2. WINE 和 FreeBSD 系统

在 FreeBSD 系统上安装 WINE 将需要一些不同的组件:

  • 用于运行 Windows® 可执行文件、配置 WINE 子系统或编译支持 WINE 的程序等任务的 FreeBSD 应用程序。

  • 大量实现 Windows® 核心功能的库(例如 /lib/wine/api-ms-core-memory-l1-1.dll.so,它是上述内存接口的一部分)。

  • 一些 Windows® 可执行文件,它们是(或模仿)常见的实用程序(例如 /lib/wine/notepad.exe.so,它提供标准的 Windows® 文本编辑器)。

  • 额外的 Windows® 组件,特别是字体(如 Tahoma 字体,它存储在安装根目录的 share/wine/fonts/tahoma.ttf 中)。

11.2.3. WINE 中图形与文本模式/终端程序的对比

作为一个终端工具是“头等公民”的操作系统,我们很自然地认为 WINE 将包含对文本模式程序的广泛支持。然而,大多数 Windows® 的应用程序,特别是最流行的,都是以图形用户界面(GUI)为设计理念的。因此,WINE 的实用程序被默认设计为启动图形程序。

然而,有三种方法可以运行这些所谓的控制台用户接口(CUI)程序:

  • 裸流方法将直接显示输出到标准输出。

  • wineconsole 工具可以与用户或 curses 一起使用,以利用 WINE 系统为 CUI 程序提供的一些增强功能。

这些方法在 WINE Wikiopen in new window 上有更详细的描述。

11.2.4. WINE 衍生项目

WINE 本身是一个成熟的开源项目,所以它被用作更复杂的解决方案的基础也就不足为奇。

11.2.4.1. 商业 WINE 的实施

许多公司已经采用了 WINE,并使其成为他们自己专有产品的核心(WINE 的 LGPL 许可证允许这样做)。如下是其中最著名的两个:

  • Codeweavers CrossOver

这个解决方案提供了一个简化的“一键式”WINE安装,它包含了额外的增强和优化功能(尽管该公司将其中许多功能回馈给WINE项目的上游)。Codeweavers 的一个重点领域是使最流行的应用程序能够顺利安装和运行。

虽然该公司曾经为他们的 CrossOver 解决方案制作了一个原生的 FreeBSD 版本,但它似乎早已被放弃了。虽然一些资源(如专门的论坛)仍然存在,但它们也有一段时间没有活动了。

  • Steam Proton

游戏公司 Steam 也使用 WINE 使 Windows® 游戏能够在其他系统上安装和运行。它的主要目标是基于 Linux 的系统,尽管对 macOS 也存在一些支持。

虽然 Steam 不提供原生的 FreeBSD 客户端,但有几个选项可以使用 FreeBSD 的 Linux 兼容层来使用 Linux® 客户端。

11.2.4.2. WINE 配套程序

除了专有的产品之外,其他项目也发布了旨在与标准的、开源的 WINE 版本协同工作的应用程序。这些程序的目标包括使安装更容易,以及提供方便的方法来安装流行的软件。

这些解决方案将在后面关于GUI前端的章节中详细介绍,包括以下这些:

  • winetricks

  • Homura

11.2.5. WINE 的替代方案

对于 FreeBSD 用户,使用 WINE 的一些替代方案如下:

  • 双启动。一个直接的选择是在该操作系统上原生地运行所需的 Windows® 应用程序。这当然意味着要在现有的 FreeBSD 上启动 Windows®,所以如果需要同时访问两个系统的程序,这个方法是不可行的。

  • 虚拟机。虚拟机(VM),正如本章前面提到的,是模拟全套硬件的软件进程,在其上可以安装和运行其他操作系统(包括 Windows®)。现代工具使虚拟机易于创建和管理,但这种方法是有代价的。主机系统的很大一部分资源必须分配给每个虚拟机,而且只要虚拟机在运行,主机就不能回收这些资源。虚拟机管理器的几个例子包括开源解决方案 qemu 、 bhyve 和 VirtualBox。更多细节请参见虚拟化一章。

  • 远程访问。像许多其他类似 UNIX® 的系统一样,FreeBSD 可以运行各种应用程序,使用户能够远程访问 Windows® 计算机并使用他们的程序或数据。除了像 xrdp 这样连接到标准的 Windows® 远程桌面协议的客户端之外,还可以使用其他开源标准,如 vnc(只要另一端有兼容的服务器)。