经过一年的开发和 26 个实验版本,Win32 API 的开放实现的稳定版本 - Wine 9.0 诞生了,其中包含了 7000 多个更改。新版本的主要成就包括实现了在64位环境中运行32位程序的WoW64架构、支持Wayland的驱动程序集成、对ARM64架构的支持、DirectMusic API的实现以及对智能卡的支持。
已确认 5336 个程序(一年前为 5266 个,两年前为 5156 个,三年前为 5049 个)在 Wine 中可以正常运行。 Windows另有 4397 个程序(一年前为 4370 个,两年前为 4312 个,三年前为 4227 个)在添加额外设置和外部 DLL 后运行良好。3943 个程序(一年前为 3888 个,两年前为 3813 个,三年前为 3703 个)存在一些小问题,但不影响应用程序的基本功能。
Wine 9.0 的主要创新:
- 新增了 winewayland.drv 驱动程序,使得 Wine 无需使用 XWayland 或 X11 组件即可在基于 Wayland 的环境中运行。此项开发旨在提供一个支持启动的纯 Wayland 环境。 Windows- 这些应用程序无需安装与 X11 相关的软件包,从而消除了不必要的层,提高了游戏的性能和响应速度。使用纯 Wayland 环境运行 Wine 还可以消除 X11 固有的安全问题(例如,不受信任的 X11 游戏可以监视其他应用程序,因为 X11 协议允许访问所有输入事件并执行按键替换)。
该驱动程序被标记为实验性且正在开发中,但尽管如此,它已经支持许多功能,例如窗口管理、使用多个显示器、支持在高像素密度(高 DPI)屏幕上缩放输出、使用跟踪鼠标移动时的相对坐标并支持 Vulkan 图形 API。默认情况下,驱动程序未激活,要启用它,您应该将“wayland”添加到注册表参数“HKCU\Software\Wine\Drivers”,并确保未设置 DISPLAY 环境变量: wine reg.exe add HKCU\ \Software\\Wine\\Drivers /v Graphics /d x11,wayland
- 所有模块都已转换为NT系统调用接口,而不是在PE和Unix层之间直接调用,标志着多年来将所有DLL转换为使用PE(可移植可执行)可执行文件格式的工作完成。
- WoW64层(64位)的开发仍在继续。 Windows-上-Windows),这允许您运行 32 位程序。 Windows- 适用于 64 位 Unix 系统的应用程序。所有访问 Unix 库的模块都使用 WoW64 系统调用转换器(thunk),从而允许 PE 格式的 32 位模块访问 64 位 Unix 库。
新的 WoW64 启动模式已得到改进,允许 32 位代码在 64 位进程中运行(在旧的 WoW64 模式下,32 位应用程序在 32 位 Unix 进程中运行)。该平台已添加对使用新 WoW64 模式的支持。 macOS由于新的 WoW64 模式存在一些小错误,例如缺乏 16 位支持以及由于缺乏对 ARB_buffer_storage 扩展的支持而导致的 OpenGL 性能降低,因此默认情况下尚未启用,需要在配置脚本中使用“--enable-archs=i386,x86_64”选项进行构建。
- 增加了执行现有可执行文件的功能 Windows 在采用 ARM64 架构的系统上,Wine 现在可以构建支持 ARM64EC(ARM64 仿真兼容)ABI 的版本,并且可以加载 ARM64EC 模块。这些模块通过允许使用模拟器在 ARM64 环境中执行单个 x86_64 代码模块,从而简化了将最初为 x86_64 架构编写的应用程序移植到 ARM64 系统的过程。此外,Wine 还新增了对 ARM64X PE 文件格式的支持,该格式允许单个可执行文件同时加载到 x64/Arm64EC 和 ARM64 进程中。Wine 已实现了用于模拟 32 位 x86 系统的接口,但模拟器库尚未包含在 Wine 主发行版中(可以使用外部 FEX 模拟器在 ARM64 环境中运行 x86 代码)。
- 图形子系统
- PostScript 驱动程序已重新设计,以支持以下格式的假脱机文件 Windows存储打印作业数据的组件。从 Unix 环境直接调用驱动程序的操作将被排除在外。
- WinRT 主题中添加了深色模式支持。 WineCfg 中添加了一项设置以启用深色界面设计。
- Vulkan 图形 API 的驱动程序添加了对 Vulkan 1.3.272 规范的支持(Wine 8.0 支持 1.3.237)。
- GdiPlus 库的功能已经过优化,可以提高图形性能。
- Direct3D
- 当没有正在处理的渲染命令时,多线程命令流的解析被暂停,这允许在执行不占用整个命令流带宽的程序时将能耗降低到单线程处理的水平。
- Direct3D 10 包括对附加效果的支持。
- 使用 Vulkan 图形 API 对 WineD3D 代码和后端进行性能优化。
- 基于 Vulkan API 的渲染代码现在会检查设备支持哪些功能,并告诉应用程序可用的 Direct3D 功能级别。
- D3DXFillTextureTX 和 D3DXFillCubeTextureTX 函数已实现。
- 经典的 OpenGL ARB 着色器后端添加了对使用 ARB_fragment_program_shadow 扩展定义阴影的支持。
- D3DXLoadMeshHierarchyFromX 和类似函数添加了对使用 ID3DXLoadUserData 接口加载用户数据的支持。
- 声音和视频
- DirectMusic API 的初步实现已被提出。添加了对 SoundFont 格式的集合、乐器和声音样本的支持。添加了对多普勒效应的支持。已实施测试以验证操作 dmime 音序器和 dmsynth MIDI 合成器时的正确实施。
- FluidSynth 库内置于 DirectMusic API 中以供使用。
- 实现了对加载 DLS1 和 DLS2 格式以及 SF2 格式的声音素材库(SoundFont - 用于播放 MIDI 文件的基于采样的合成格式)的支持。 Linux.
- 添加了使用 dmsynth 库、使用 FluidSynth 软件合成器和 DirectSound API 进行音频输出来播放 MIDI 内容的功能。
- 添加了 Indeo IV50 视频编解码器格式的视频解码器。
- DirectShow的
- 已实现带有 WMV 格式解码器的 DMO(DirectX 媒体对象)组件(Windows 媒体视频)。
- 添加了音频捕获过滤器(DirectShow Audio Capture Filter)。
- 除了音频流之外,MPEG-1 Stream Splitter (DirectShow MPEG-1 Stream Splitter) 现在还支持视频流和服务流。
- 已实现用于解码 MPEG-1 格式视频的过滤器(DirectShow MPEG-1 视频解码器)。
- 输入设备
- DirectInput 支持动作映射,允许您将游戏控制器上的按钮绑定到游戏中的特定动作。
- 桌面集成
- 绑定已导出到主用户环境,允许在 Wine 下运行的应用程序在打开 URL 时被调用为协议处理程序(例如,在打开“spotify:user:spotify:playlist:848218482355482821”等链接时启动 Spotify.exe)。
- 实现了 EDID(扩展显示识别数据)数据的提取,其中包含有关所连接显示器的参数信息,例如设备的名称和型号。
- 可以使用“开始”菜单中的“退出桌面”按钮关闭以全屏模式部署的桌面窗口。
- 国际化
- 对输入法编辑器 (IME) 的支持已得到扩展。已开展工作以确保与原生应用的兼容性。 Windows IME 实现和改进的集成 Linux IME
- 已提供从 Unicode CLDR(Unicode 通用区域设置数据存储库)版本 44 数据库生成 locale.nls 格式的区域设置数据库。支持其他区域设置 bew-ID、blo-BJ、csw-CA、ie-EE、mic-CA 、 prg-PL 已添加、skr-PK、tyv-RU、vmw-MZ、xnr-IN 和 za-CN。
- 该界面已翻译成格鲁吉亚语。提供 16 种语言的完整翻译和 31 种语言的部分翻译。
- Unicode 字符表已更新至标准版本 15.1.0。时区数据库已更新。
- 内核(内核接口) Windows)
- 已发布的版本 Windows 默认定义 Windows 10.
- 对于PE格式的可执行文件,实现了对地址空间随机化(ASLR)的支持,但将代码加载到内存中的地址尚未完全随机化。
- 已经实现了对弱碎片堆(LFH,低碎片堆)的支持,这提高了内存分配操作的性能。
- 虚拟内存分配机制中添加了对内存预留(占位符)的支持,允许应用程序预留虚拟内存的特定区域以供将来使用。
- 可执行文件和库的 64 位加载器(加载器和预加载器)以 PIE(位置无关可执行文件)格式编译,以释放部分 32 位地址空间。
- 为 NT 系统调用和用户回调调用提供了正确的堆栈展开。
- 联网功能
- MSHTML引擎支持“Cycle Collection”垃圾回收机制。
- MSHTML 添加了对同步处理 XMLHttpRequest 请求的支持。
- jscript.dll 添加了对 WeakMap 对象的支持,以处理键/值对的集合,其中键是可以附加任意值的对象。实现了 WeakMap.get()、WeakMap.delete()、WeakMap.clear() 和 WeakMap.has() 方法。
- Gecko 浏览器引擎已更新至版本 2.47.4。
- 已实现对有关网络接口状态更改的通知的支持。
- 密码学和安全
- Winscard.dll 库中添加了对智能卡的支持,通过 PCSClite 系统库实现。
- BCrypt 添加了对 Diffie-Hellman 密钥交换协议的支持。
- Negotiate 包已经实现,提供了一个使用 SSPI(安全支持提供商接口)接口来访问 SSP(安全支持提供商)提供商的层。
- 嵌入式应用
- Wine 调试器 (winedbg) 使用 Zydis 库来反汇编 X86 机器指令。
- WineCfg 界面已更新,以支持 64 位平台上的旧版本。 Windows (在 XP 之前),它允许您使用 WoW64 模式运行旧版应用程序。
- 所有内置图形应用程序现在都在单独的对话框中显示错误信息,而不是在控制台中显示它们。
- systeminfo 程序提供来自 WMI 数据库的信息显示(Windows 管理仪器)。
- 添加了 klist 应用程序来显示 Kerberos 票证。
- taskkill 应用程序实现了强制终止子进程的功能。
- 在启动实用程序中添加了“/machine”选项,以选择运行支持 x86 和 ARM 的混合可执行文件时使用的体系结构。
- 任务列表程序的大部分功能已经实现。
- 添加了 findstr 应用程序的基本实现。
- 开发工具
- WineDump 工具能够显示注册表文件的内容。 Windows (REGF 格式),以及显示混合 PE 文件中支持的所有架构(x86/ARM64)的数据。
- IDL 编译器添加了对“composable”、“default_overload”、“deprecated”和“protected”属性的支持。
- 删除了 libwine.so,它在 Wine 6.0 中已被弃用,并且早已不再在 Wine 中使用。在较旧版本的 Wine(5.0 及更早版本)中使用 libwine.so 构建的 ELF 格式的程序需要重新构建才能在 Wine 9.0 中运行。
- 内置库和外部依赖项
- FluidSynth 2.3.3、Musl 1.2.3(仅数学函数)和 Zydis 4.0.0 库已集成到该软件包中。
- 组件 Vkd3d 1.10、Faudio 23.12、OpenLDAP 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 已更新到新版本。 .NET 平台实现的 Wine Mono 引擎已更新至版本 8.1.0。
- 驱动程序 winewayland.drv 使用 Wayland 客户端库作为外部依赖项,以及 xkbcommon 和 xkbregistry 库。
- 为了支持智能卡,使用了外部 PCSClite 库(在 macOS — PCSC)。
- 现在,在非 i386 平台上构建 PE 文件需要支持“.seh”指令的交叉编译器来处理异常。
来源: opennet.ru
