13.2.WINE 概述和概念¶
WINE 是一个复杂的系统,因此在 FreeBSD 系统上运行它之前,值得了解一下它是什么以及它是如何工作的。
13.2.1.什么是 WINE ?¶
正如本章简介中提到的,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.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)程序:
裸流 方法将直接显示输出到标准输出。
wineconsole 工具可以与 用户 或 curses 一起使用,以利用 WINE 系统为 CUI 程序提供的一些增强功能。
这些方法在 WINE Wiki 上有更详细的描述。
13.2.4.WINE 衍生项目¶
WINE 本身是一个成熟的开源项目,所以它被用作更复杂的解决方案的基础也就不足为奇。
13.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® 客户端的选择。
13.2.5.WINE 的替代方案¶
对于 FreeBSD 用户,使用 WINE 的一些替代方案如下:
双系统。一个直接的选择是在该操作系统上原生地运行所需的 Windows® 应用程序。这当然意味着要在现有的 FreeBSD 上启动 Windows®,所以如果需要同时访问两个系统的程序,这个方法是不可行的。
虚拟机。虚拟机(VM),正如本章前面提到的,是模拟全套硬件的软件进程,在其上可以安装和运行其他操作系统(包括 Windows®)。现代工具使虚拟机易于创建和管理,但这种方法是有代价的。主机系统的很大一部分资源必须分配给每个虚拟机,而且只要虚拟机在运行,主机就不能回收这些资源。虚拟机管理器的几个例子包括开源解决方案 qemu、 bhyve 和 VirtualBox。更多细节请参见虚拟化一章。
远程访问。像许多其他类似 UNIX® 的系统一样,FreeBSD 可以运行各种应用程序,使用户能够远程访问 Windows® 计算机并使用他们的程序或数据。除了像 xrdp 这样连接到标准的 Windows® 远程桌面协议的客户端之外,还可以使用其他开源标准,如 vnc(只要另一端有兼容的服务器)。