Wine 9.0 稳定发布

经过一年的开发和 26 个实验版本,Win32 API 的开放实现的稳定版本 - Wine 9.0 诞生了,其中包含了 7000 多个更改。新版本的主要成就包括实现了在64位环境中运行32位程序的WoW64架构、支持Wayland的驱动程序集成、对ARM64架构的支持、DirectMusic API的实现以及对智能卡的支持。

Wine 已确认 5336 个(一年前 5266、两年前 5156、三年前 5049)程序可以在 Windows 上正常运行,另外 4397 个(一年前 4370、两年前 4312、三年前 4227)程序可以与 Windows 完美运行。附加设置和外部 DLL。 3943个程序(一年前3888个、两年前3813个、三年前3703个)在运行中存在小问题,但不影响应用程序主要功能的使用。

Wine 9.0 的主要创新:

  • 添加了驱动 winewayland.drv,允许您在基于 Wayland 协议的环境中使用 Wine,而无需使用 XWayland 和 X11 组件。该开发旨在提供一个纯粹的 Wayland 环境,支持运行不需要安装 X11 相关软件包的 Windows 应用程序,从而通过消除不必要的层来实现更高的游戏性能和响应能力。使用 Wine 的纯 Wayland 环境还可以消除 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-on-Windows)的开发仍在继续,该层允许在 32 位 Unix 系统上运行 64 位 Windows 应用程序。所有访问 Unix 库的模块都使用 WoW64 系统调用 thunk,以允许 32 位 PE 格式的模块访问 64 位 Unix 库。

    改进了新的 WoW64 启动模式,该模式在 32 位进程中运行 64 位代码(在旧的 WoW64 模式中,32 位应用程序在 32 位 Unix 进程中运行)。添加了对在 macOS 平台上使用新的 WoW64 模式的支持。由于新的 WoW64 模式有一些缺点,例如缺乏对 16 位模式的支持以及由于缺乏对 ARB_buffer_storage 扩展的支持而降低了 OpenGL 性能,因此默认情况下尚未启用它,需要使用选项“—enable-”进行构建配置脚本中的 archs=i386,x86_64 "。

  • 添加了在 ARM64 架构系统上运行现有 Windows 可执行文件的功能。已实现为 ARM64EC ABI(兼容 ARM64 仿真)构建 Wine 并支持加载 ARM64EC 模块,通过提供使用 x64_86 执行各个模块的能力,可简化最初为 x64_64 架构编写的应用程序到 ARM86 系统的移植使用模拟器在 ARM64 环境中编写代码。添加了对 ARM64X PE 文件格式的支持,允许在 x64/Arm64EC 和 ARM64 进程中加载​​单个可执行文件。用于模拟 32 位 x86 系统的接口已经实现,但带有模拟器的库尚未包含在主 Wine 包中(您可以使用外部 FEX 模拟器在 ARM86 环境中运行 x64 代码)。
  • 图形子系统
    • 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 格式以及 Linux 中使用的 SF2 格式的声音字体(SoundFont - 用于播放 MIDI 文件的基于样本的合成格式)。
    • 添加了使用 dmsynth 库、使用 FluidSynth 软件合成器和 DirectSound API 进行音频输出来播放 MIDI 内容的功能。
    • 添加了 Indeo IV50 视频编解码器格式的视频解码器。
  • DirectShow的
    • 带有 WMV(Windows Media Video)格式解码器的 DMO(DirectX Media Object)组件已实现。
    • 添加了音频捕获过滤器(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 Management Instrumentation)数据库的信息的显示。
    • 添加了 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

添加评论