Wine 7.0 稳定发布

经过一年的开发和 30 个实验版本,Win32 API 的开放实现的稳定版本出现了 - Wine 7.0,其中包含了 9100 多个更改。新版本的主要成就包括将大多数 Wine 模块转换为 PE 格式、支持主题、扩展具有 HID 接口的操纵杆和输入设备堆栈,以及实现在 Windows 中运行 64 位程序的 WoW32 架构。 64 位环境。

Wine 已确认 5156 个(一年前 5049 个)程序可以在 Windows 上完整运行,另外 4312 个(一年前 4227 个)程序可以与其他设置和外部 DLL 完美配合。 3813 个程序(3703 年前)存在轻微运行问题,但不影响应用程序主要功能的使用。

Wine 7.0 的主要创新:

  • PE格式的模块
    • 几乎所有 DLL 都已转换为使用 PE(可移植可执行文件,在 Windows 上使用)可执行文件格式,而不是 ELF。 PE 的使用解决了支持各种复制保护方案的问题,这些复制保护方案验证磁盘和内存中的系统模块的身份。
    • 使用标准 NT 内核系统调用将 PE 模块与 Unix 库交互的能力已经实现,这允许您隐藏 Windows 调试器对 Unix 代码的访问并监视线程注册。
    • 现在,仅当磁盘上存在相应的 PE 文件时才会加载内置 DLL,无论它是真正的库还是存根。此更改允许应用程序始终看到与 PE 文件的正确绑定。要禁用此行为,您可以使用 WINEBOOTSTRAPMODE 环境变量。
  • 魔兽64
    • WoW64架构(64位Windows-on-Windows)已经实现,允许您在32位Unix进程中运行64位Windows应用程序。支持是通过连接一个层来实现的,该层将 32 位 NT 系统调用转换为对 NTDLL 的 64 位调用。
    • WoW64层是为大多数Unix库准备的,并允许32位PE模块访问64位Unix库。一旦所有模块都转换为 PE 格式,就可以运行 32 位 Windows 应用程序,而无需安装 32 位 Unix 库。
  • 主题
    • 主题支持已实现。包括“浅色”、“蓝色”和“经典蓝色”的设计主题,可以通过 WineCfg 配置器进行选择。
    • 添加了通过主题自定义所有界面控件的外观的功能。更改设计主题后,元素的外观会自动更新。
    • 所有内置 Wine 应用程序均已添加主题支持。应用程序已适应高像素密度(高 DPI)的屏幕。
  • 图形子系统
    • 添加了新的Win32u库,其中包括与内核级图形处理和窗口管理相关的GDI32和USER32库的部分内容。将来,我们将开始将 winex32.drv 和 winemac.drv 等驱动程序组件移植到 Win11u。
    • Vulkan 驱动程序支持 Vulkan 图形 API 规范 1.2.201。
    • 支持通过 Direct2D API 输出阴影几何对象,并能够检查单击是否命中(命中测试)。
    • Direct2D API 为使用 ID2D1Effect 接口应用的视觉效果提供了初步支持。
    • Direct2D API 添加了对 ID2D1MultiThread 接口的支持,该接口用于组织对多线程应用程序中的资源的独占访问。
    • WindowsCodecs 库集支持解码 WMP (Windows Media Photo) 格式的图像和编码 DDS (DirectDraw Surface) 格式的图像。我们不再支持以 ICNS 格式(适用于 macOS)对图像进行编码,Windows 上也不支持这种格式。
  • Direct3D
    • 新的渲染引擎得到了显着改进,将 Direct3D 调用转换为 Vulkan 图形 API。在大多数情况下,基于 Vulkan 的引擎对 Direct3D 10 和 11 的支持水平已与旧的基于 OpenGL 的引擎持平。要启用 Vulkan 渲染引擎,请将 Direct3D 注册表变量“renderer”设置为“vulkan”。
    • 实现了 Direct3D 10 和 11 的许多功能,包括延迟上下文、在设备上下文中操作的状态对象、缓冲区中的持久偏移、清除无序纹理视图、以无类型格式(DXGI_FORMAT_BC3_TYPELESS、DXGI_FORMAT_R32G32B32A32_TYPELESS)在资源之间复制数据等。
    • 添加了对多显示器配置的支持,允许您选择显示器以全屏模式显示 Direct3D 应用程序。
    • DXGI API 提供屏幕伽玛校正,基于 Direct3D 10 和 11 的应用程序可以使用该校正来更改屏幕亮度。启用虚拟帧缓冲区计数器 (SwapChain) 的检索。
    • Direct3D 12 添加了对 1.1 版根签名的支持。
    • 在通过Vulkan API的渲染代码中,当系统支持VK_EXT_host_query_reset扩展时,查询处理的效率得到了提高。
    • 添加了如果 OpenGL 或 Vulkan 无法用于显示,例如在基于 CEF(Chromium Embedded Framework)框架的程序中从不同进程输出到窗口时,通过 GDI 输出虚拟帧缓冲区(SwapChain)的功能。
    • 使用 GLSL 着色器后端时,可确保着色器指令的“精确”修饰符。
    • DirectDraw API 使用“RGB”、“MMX”和“Ramp”等软件设备添加了对系统内存中 3D 渲染的支持。
    • AMD Radeon RX 3M、AMD Radeon RX 5500/6800 XT/6800 XT、AMD Van Gogh、Intel UHD Graphics 6900 和 NVIDIA GT 630 卡已添加到 Direct1030D 显卡数据库中。
    • “UseGLSL”键已从 HKEY_CURRENT_USER\Software\Wine\Direct3D 注册表中删除,从 Wine 5.0 开始,您需要使用“shader_backend”。
    • 为了支持 Direct3D 12,您现在至少需要 3 版的 vkd1.2d 库。
  • D3DX
    • D3DX 10 实现改进了对视觉效果框架的支持,并添加了对 Windows Media Photo 图像格式 (JPEG XR) 的支持
    • 添加了D3DX10中提供的纹理创建函数,例如D3DX10CreateTextureFromMemory()。
    • ID3DX10Sprite 和 ID3DX10Font 软件接口已部分实现。
  • 声音和视频
    • DirectShow 的 GStreamer 附加组件和 Media Foundation 框架被合并到一个通用的 WineGStreamer 后端中,这应该会简化新内容解码 API 的开发。
    • 基于WineGStreamer后端,实现了Windows Media对象的同步和异步读取。
    • 媒体基础框架的实现得到了进一步细化,添加了对 IMFPMediaPlayer 功能和样本分配器的支持,并改进了对 EVR 和 SAR 渲染缓冲区的支持。
    • 提供 QuickTime 格式解码器的 wineqtdecoder 库已被删除(所有编解码器现在都使用 GStreamer)。
  • 输入设备
    • 支持 HID(人机接口设备)协议的输入设备堆栈得到了显着改进,提供了解析 HID 描述符、处理 HID 消息和提供 mini-HID 驱动程序等功能。
    • 在 winebus.sys 驱动程序的后端,设备描述到 HID 消息的转换得到了改进。
    • 为支持 HID 协议的操纵杆添加了新的 DirectInput 后​​端。在操纵杆中使用反馈效果的功能已经实现。改进的操纵杆控制面板。优化与 XInput 兼容设备的交互。在 WinMM 中,操纵杆支持已移至 DInput,而不是在 Linux 上使用 evdev 后端,在 macOS IOHID 上使用 IOHID。旧的操纵杆驱动程序 winejoystick.drv 已被删除。
    • 基于虚拟 HID 设备的使用且不需要物理设备,DInput 模块中添加了新的测试。
  • 文字和字体
    • 将字体集对象添加到 DirectWrite。
    • RichEdit 正确实现了 TextHost 接口。
  • 内核(Windows 内核接口)
    • 当在 Wine 中运行未识别的可执行文件(例如“wine foo.msi”)时,现在会调用 start.exe,它会调用与该文件类型关联的处理程序。
    • 添加了对同步机制 NtAlertThreadByThreadId 和 NtWaitForAlertByThreadId 的支持,类似于 Linux 中的 futexes。
    • 添加了对用于调试内核函数的 NT 调试对象的支持。
    • 添加了对动态注册表项的支持以保存性能数据。
  • C运行时
    • C 运行时实现了一整套数学函数,这些函数主要是从 Musl 库继承而来的。
    • 所有 CPU 平台都提供对浮点函数的正确支持。
  • 联网功能
    • 改进了 Internet Explorer 11 (IE11) 的兼容性模式,现在默认使用该模式来处理 HTML 文档。
    • mshtml 库实现了 ES6 JavaScript 模式 (ECMAScript 2015),该模式提供对 let 表达式和 Map 对象等功能的支持。
    • 现在,可以在必要时(而不是在 Wine 更新期间)将带有 Gecko 引擎附加内容的 MSI 软件包安装到 Wine 工作目录中。
    • 添加了对 DTLS 协议的支持。
    • 已实现NSI(网络存储接口)服务,存储并传输计算机上的路由和网络接口信息给其他服务。
    • WinSock API 处理程序(例如setsockopt 和getsockopt)已移至NTDLL 和afd.sys 驱动程序以符合Windows 体系结构。
    • Wine自己的网络数据库文件,例如/etc/protocols和/etc/networks,现在安装在Wine工作目录中,而不是访问类似的Unix数据库。
  • 替代平台
    • 添加了对基于 M1 ARM 芯片(Apple Silicon)的 Apple 设备的支持。
    • 现在,在 macOS 上支持 BCrypt 和 Secur32 功能需要安装 GnuTLS 库。
    • ARM 平台的 32 位可执行文件现在以 Thumb-2 模式构建,类似于 Windows。预加载器用于加载此类文件。
    • 对于 32 位 ARM 平台,已实现对展开异常的支持。
    • 对于 FreeBSD,支持查询低级系统信息(例如内存状态和电池电量水平)的数量已得到扩展。
  • 内置应用程序和开发工具
    • reg.exe 实用程序添加了对 32 位和 64 位注册表视图的支持。添加了对复制注册表项的支持。
    • WineDump 实用程序添加了对转储 Windows 元数据和显示有关 CodeView 条目的详细信息的支持。
    • Wine 调试器 (winedbg) 提供了从 32 位调试器调试 64 位进程的能力。
    • IDL 编译器 (widl) 中添加了加载 PE 文件中内置库的功能,提供了对 WinRT 特定属性和构造的支持,并实现了特定于平台的库搜索。
  • 装配系统
    • 在特定于体系结构的目录中,库现在以反映可执行文件的体系结构和类型的名称保存,例如,PE 格式的“i386-windows”和 unix 库的“x86_64-unix”,从而允许在同一环境中支持不同的体系结构。单一Wine安装并提供Winelib的交叉编译。
    • 为了在 PE 文件头中设置一个选项来控制到使用本机 DLL 的转换,'--prefer-native option' 标志已添加到 winebuild(DllMain 中的 DLL_WINE_PREATTACH 处理已停止)。
    • 添加了对 Dwarf 调试数据格式第 4 版的支持,现在构建 Wine 库时默认使用该格式。
    • 添加了构建选项“—enable-build-id”以在可执行文件中保存唯一的构建标识符。
    • 添加了对在 MSVC 兼容模式下使用 Clang 编译器的支持。
  • 杂项
    • 用户 shell (Windows Shell) 中典型目录的名称是根据从 Windows Vista 开始使用的方案指定的,即现在创建了“Documents”目录,而不是“我的文档”,并且大部分数据都保存到“AppData”目录中。
    • OpenCL 库层添加了对 OpenCL 1.2 规范的支持。
    • WinSpool 驱动程序添加了打印时对不同页面尺寸的支持。
    • 添加了对 MSDASQL(用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序)的初始支持。
    • .NET 平台实现的 Wine Mono 引擎已更新至版本 7.0.0。
    • Unicode 数据已更新为 Unicode 14 规范。
    • 源代码树包括 Faudio、GSM、LCMS2、LibJPEG、LibJXR、LibMPG123、LibPng、LibTiff、LibXml2、LibXslt 和 Zlib 库,这些库以 PE 格式编译,不需要 Unix 格式的版本。同时,这些库也可以从系统导入,以使用外部程序集而不是内置的PE选项。

来源: opennet.ru

添加评论