# 13.2.WINE 概述和概念

## 13.2.1. 什么是 WINE？

正如本章的 [概述](https://docs.freebsd.org/en/books/handbook/wine/#wine-synopsis) 所提到的，WINE 是一个兼容层，允许 Windows® 应用程序在其他操作系统上运行。从理论上讲，这意味着这些程序应该能够在 FreeBSD、macOS 和 Android 等系统上运行。

当 WINE 运行一款 Windows® 可执行文件时，发生了两件事：

* 首先，WINE 实现了一个模拟多种版本 Windows® 的环境。例如，如果某个应用程序请求访问内存等资源，WINE 会提供一个内存接口，该接口看起来并表现得（就应用程序而言）像 Windows®。
* 然后，当该应用程序利用这个接口时，WINE 会将请求的内存空间转换为与宿主系统兼容的形式。当应用程序检索该数据时，WINE 会协助从宿主系统中获取它，并将其返回给 Windows® 应用程序。

## 13.2.2. WINE 与 FreeBSD 系统

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

* 用于运行 Windows® 可执行文件、配置 WINE 子系统或编译支持 WINE 的程序的 FreeBSD 应用程序。
* 实现 Windows® 核心功能的大量库（例如，/lib/wine/api-ms-core-memory-l1-1-1.dll.so，它是前述内存接口的一部分）。
* 一些 Windows® 可执行文件，它们是（或模拟）常用的工具（例如，/lib/wine/notepad.exe.so，它提供标准的 Windows® 文本编辑器）。
* 额外的 Windows® 资源，特别是字体（如 Tahoma 字体，它存储在安装根目录的 share/wine/fonts/tahoma.ttf 中）。

## 13.2.3. WINE 中的图形程序与文本模式/终端程序

作为一个将终端工具视为“第一等公民”的操作系统，人们自然会认为 WINE 会对文本模式程序提供广泛支持。然而，绝大多数 Windows® 应用程序，尤其是最流行的应用程序，都是为图形用户界面（GUI）设计的。因此，WINE 的工具默认设计为启动图形程序。

不过，有三种方法可以运行所谓的控制台用户界面（CUI）程序：

* *Bare Streams* 方法会直接将输出显示到标准输出。
* *wineconsole* 工具可以与 *user* 或 *curses* 后端一起使用，以利用 WINE 系统为 CUI 应用程序提供的某些增强功能。

这些方法的详细说明可以参见 [WINE Wiki](https://wiki.winehq.org/Wine_User's_Guide#Text_mode_programs_.28CUI:_Console_User_Interface.29)。

## 13.2.4. WINE 衍生项目

WINE 本身是一个成熟的开源项目，因此它被用作更复杂解决方案的基础并不奇怪。

### 13.2.4.1. 商业 WINE 实现

一些公司将 WINE 作为其自有专有产品的核心（WINE 的 LGPL 许可允许这样做）。其中最著名的两个是：

* **Codeweavers CrossOver**

  该解决方案提供了简化的“一键安装” WINE，并包含额外的增强和优化（尽管公司将许多这些优化回馈给了 WINE 项目）。Codeweavers 的重点之一是确保最流行的应用程序能够顺利安装和运行。

  尽管该公司曾为其 CrossOver 解决方案提供过原生 FreeBSD 版本，但似乎早已放弃了这个版本。虽然仍有一些资源（例如 [专用论坛](https://www.codeweavers.com/compatibility/crossover/forum/freebsd)），但它们也有一段时间没有活动了。
* **Steam Proton**

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

  虽然 Steam 没有提供原生的 FreeBSD 客户端，但有多种方法可以使用 FreeBSD 的 Linux 兼容层来运行 Linux® 客户端。

### 13.2.4.2. WINE 配套程序

除了专有产品，其他一些项目发布了旨在与标准开源版本的 WINE 一起工作的应用程序。这些解决方案的目标包括简化安装或提供简便的方法来安装流行软件。

这些解决方案将在后面的 [GUI 前端](https://docs.freebsd.org/en/books/handbook/wine/#wine-management-guis) 部分中详细介绍，包括：

* **winetricks**
* **Mizutamari**

## 13.2.5. WINE 的替代方案

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

* **双系统**：一种直接的选择是在 Windows® 操作系统上原生运行所需的 Windows® 应用程序。这个方法的缺点是需要退出 FreeBSD 以启动 Windows®，因此如果需要同时访问两个系统中的程序，这个方法不可行。
* **虚拟机**：如本章前面提到的，虚拟机（VM）是模拟完整硬件集的软件进程，可以安装并运行其他操作系统（包括 Windows®）。现代工具使得创建和管理虚拟机变得简单，但这种方法有其代价。虚拟机需要占用大量宿主系统的资源，而这些资源在虚拟机运行时无法被宿主系统回收。一些虚拟机管理器的例子包括开源的 qemu、bhyve 和 VirtualBox。有关更多详细信息，请参见关于 [虚拟化](https://docs.freebsd.org/en/books/handbook/virtualization/#virtualization) 的章节。
* **远程访问**：像许多其他类 UNIX® 系统一样，FreeBSD 可以运行各种应用程序，允许用户远程访问 Windows® 计算机并使用其程序或数据。除了像 xrdp 这样的客户端可以连接到标准的 Windows® 远程桌面协议外，还可以使用其他开源标准，如 vnc（前提是对方有兼容的服务器）。
