源代码
Wine 团队自豪地宣布,稳定版 Wine 9.0 现已发布。
该版本历经一年的开发努力,共进行了 7000 多处修改。它包含了大量改进,具体如下。主要亮点包括新的 WoW64 架构和试验性 Wayland 驱动程序。
源代码请访问 https://dl.winehq.org/wine/source/9.0/wine-9.0.tar.xz
各种发行版的二进制软件包可从 https://www.winehq.org/download 获取。
您可以在 https://www.winehq.org/documentation 上找到相关文档
Wine 的可用性要归功于许多人的努力。完整列表请参见文件 AUTHORS。
Wine 9.0 的新功能
WoW64
从 Windows 代码到 Unix 代码的所有转换均通过 NT syscall 接口完成。这是一个重要的里程碑,标志着多年来将模块转换为 PE 格式并在 Windows 和 Unix 之间引入适当边界的架构重构工作已经完成。
所有调用 Unix 库的模块都包含 WoW64 块,以便从 32 位 PE 代码中调用 64 位 Unix 库。这意味着可以在纯 64 位 Unix 安装上运行 32 位 Windows 应用程序。这被称为新的 WoW64 模式,而旧的 WoW64 模式是在 32 位 Unix 进程中运行 32 位应用程序。
新 WoW64 模式默认尚未启用。可以通过在配置中加入 –enable-archs=i386,x86_64 选项来启用。预计这将适用于大多数应用程序,但仍有一些限制,尤其是:
不支持 16 位代码。
OpenGL 性能降低,缺乏 ARB_buffer_storage 扩展支持。
新的 WoW64 模式最终允许 32 位应用程序在最近的 macOS 版本上运行,这些版本取消了对 32 位 Unix 进程的支持。
Wayland 驱动程序
有一个实验性的 Wayland 图形驱动程序。它仍在开发中,但已经实现了许多功能,例如基本窗口管理、多显示器、高 DPI 缩放、相对运动事件和 Vulkan 支持。
Wayland 驱动程序默认尚未启用。可以通过运行 HKCU\Software\Wine\Drivers 注册表键启用:
wine reg.exe add HKCU\Software\Wine\Drivers /v Graphics /d x11,wayland
然后确保 DISPLAY 环境变量未设置。
ARM64
PE/Unix 分离的完成意味着可以在 ARM64 上运行现有的 Windows 二进制程序。
加载器支持加载 ARM64X 和 ARM64EC 模块。
实现了 32 位 x86 仿真接口。Wine 目前没有提供仿真库,但可以使用导出接口的外部库,方法是在 HKLM\Software\Microsoft\Wow64\x86 注册表键值中指定其名称。FEX 仿真器在以 PE 方式构建时实现了该接口。
最初支持使用实验性 LLVM 工具链为 ARM64EC 架构构建 Wine。一旦该工具链准备就绪,将使用它进行适当的 ARM64X 构建并启用 64 位 x86 仿真。
图形
重新实现了 PostScript 驱动程序,以便通过 Windows 格式的 spool 文件工作,避免从 Unix 端直接调用。
WinRT 主题支持暗色主题选项,并可在 WineCfg 中进行相应切换。
Vulkan 驱动程序支持高达 1.3.272 版本的 Vulkan 规范。
对 GdiPlus 的一些功能进行了优化,以获得更好的图形性能。
Direct3D
多线程命令流在不处理渲染命令时会休眠而不是旋转。这降低了不占用命令流全部可用带宽的程序的功耗。功耗应与禁用多线程命令流时相当。
Direct3D 10 效果支持更多指令。
对核心 WineD3D 和 Vulkan 后端进行了各种优化。
Vulkan 渲染器会正确验证底层设备是否支持所需功能,并向应用程序报告相应的 Direct3D 功能级别。
实现了 D3DXFillTextureTX 和 D3DXFillCubeTextureTX。
传统 OpenGL ARB 着色器后端通过 ARB_fragment_program_shadow 支持阴影采样。
HLSL 编译器支持矩阵多数编译标志。
D3DXLoadMeshHierarchyFromX 和相关函数支持通过 ID3DXLoadUserData 加载用户数据。
音频/视频
实现了多个 DirectMusic 模块的基础。添加了许多测试以验证 dmime 音序器和 dmsynth MIDI 合成器的行为。
实现了 DLS1 和 DLS2 声音字体加载,以及与 Linux 标准 MIDI 声音字体兼容的 SF2 格式。
在 dmsynth 中实现了 MIDI 播放,集成了 FluidSynth 库中的软件合成器,并使用 DirectSound 进行音频输出。
DirectSound 支持多普勒频移。
采用 Indeo IV50 Windows 视频解码器。
DirectShow
支持 Windows Media Video (WMV) 解码器 DirectX Media Object (DMO)。
执行 DirectShow 音频捕获过滤器。
DirectShow MPEG-1 流分割器过滤器支持视频流、系统流和音频流。
DirectShow MPEG-1 视频解码器滤波器已投入使用。
输入设备
实现了 DirectInput 动作映射,提高了与许多老游戏的兼容性,这些游戏使用 DirectInput 将手柄输入映射到游戏中的动作。
桌面集成
URL/URI 协议关联可作为 URL 处理程序导出到 Linux 桌面。
从物理显示器的扩展显示识别数据(EDID)中获取显示器信息,如名称和型号 ID。
在全屏桌面模式下,可通过 “开始 “菜单中的 “退出桌面 “条目关闭桌面窗口。
国际化
改进了 IME 实现,更好地支持本地 Windows IME 实现。添加了许多测试,以验证这些自定义 IME 的预期行为。
改进了 Linux IME 集成,尽可能使用现场输入或现场输入样式,并提供更准确的 IME 消息序列。
本地语言数据由版本 44 的 Unicode CLDR 数据库生成。支持以下额外的本地语言:bew-ID、blo-BJ、csw-CA、ie-EE、mic-CA、prg-PL、skr-PK、tyv-RU、vmw-MZ、xnr-IN 和 za-CN。
用户界面已翻译成格鲁吉亚语,使完全翻译语言总数达到 16 种,部分翻译语言达到 31 种。
统一码字符表基于统一码标准 15.1.0 版本。
时区数据由 IANA 时区数据库 2023c 版生成。
macOS 也支持使用脚本名称的地域,如 zh-Hans。
内核
新前缀的默认 Windows 版本设置为 Windows 10。
现代 PE 二进制文件支持地址空间布局随机化 (ASLR),以避免地址空间冲突问题。请注意,所选加载地址尚未正确随机化。
实施低碎片堆 (LFH),以提高内存分配性能。
虚拟内存分配器支持内存占位符,允许应用程序保留虚拟空间。
64 位加载器和预加载器以位置无关可执行文件(PIE)的形式构建,以释放部分 32 位地址空间。
在 NT 系统调用和用户回调中,堆栈解卷工作正常。
互联网和网络
所有内置的 MSHTML 对象都是适当的 Gecko 循环收集器参与者。
MSHTML 支持同步 XMLHttpRequest 模式。
在 JScript 中实现了 WeakMap 对象。
Gecko 引擎已更新至 2.47.4 版。
实现了网络接口更改通知。
加密和安全
Winscard dll 使用 Unix PCSClite 库支持智能卡。
BCrypt 支持 Diffie-Hellman 密钥。
实现了 Negotiate 安全包。
Mono / .NET
Mono 引擎已更新至 8.1.0 版。
内置应用程序
Wine 调试器 (winedbg) 使用 Zydis 库进行更精确的 x86 反汇编。
WineCfg 支持以 64 位前缀选择旧版本(XP 之前)Windows,以便在新的 WoW64 模式下使用旧版本应用程序。
所有图形内置程序都会在消息框中报告错误,而不是在控制台上打印消息。
systeminfo 应用程序可打印来自 Windows 管理工具数据库的各种数据。
klist 程序会列出 Kerberos 票据。
taskkill 程序支持终止子进程。
启动程序支持 /machine 选项,用于选择运行 x86/ARM 混合可执行文件时使用的架构。
任务列表程序的大部分功能都已实现。
findstr 应用程序提供了基本功能。
开发工具
WineDump 工具支持打印 Windows 注册表文件(REGF 格式)的内容,以及打印混合 x86/ARM64 PE 文件中两种架构的数据。
IDL 编译器支持可编译、default_overload、废弃和受保护属性。
删除了 libwine.so 库。自 Wine 6.0 起,该库已不再使用并被弃用。使用 Wine 5.0 或更早版本构建的 Winelib ELF 应用程序需要重新构建才能在 Wine 9.0 上运行。
捆绑库
DirectMusic 捆绑并使用 2.3.3 版的 FluidSynth 库。
捆绑了 Musl 1.2.3 版数学库,用于 C 运行时的数学函数。
捆绑的 Zydis 库版本为 4.0.0,用于 x86 反汇编支持。
Vkd3d 已更新至上游版本 1.10。
Faudio 已更新至上游版本 23.12。
LDAP 已更新至上游版本 2.5.16。
LCMS2 已更新至上游版本 2.15。
LibMPG123 已更新至上游版本 1.32.2。
LibPng 升级到上游版本 1.6.40。
LibTiff 已更新至上游版本 4.6.0。
LibXml2 已更新至上游版本 2.11.5。
LibXslt 升级到上游版本 1.1.38。
Zlib 已更新至上游版本 1.3。
外部依赖
构建 Wayland 驱动程序时会用到 Wayland 客户端库以及 xkbcommon 和 xkbregistry 库。
PCSClite 库用于支持智能卡。在 macOS 上,PCSC 框架可替代 PCSClite。
在除 i386 之外的所有平台上,PE 编译都需要使用支持 .seh 异常处理指令的交叉编译器。