经过一年的开发和 28 个实验版本,Win32 API 的开放实现的稳定版本 - Wine 8.0 诞生了,其中包含了 8600 多个更改。 新版本的关键成就标志着Wine模块翻译成该格式的工作已经完成。
Wine 已确认 5266 个(一年前 5156 个、两年前 5049 个)Windows 程序可以完全运行,另外 4370 个(一年前 4312 个、两年前 4227 个)程序可以与附加设置和外部 DLL 完美配合。 3888个程序(一年前3813个,两年前3703个)存在轻微的运行问题,但不影响应用程序主要功能的使用。
Wine 8.0 的主要创新:
- PE格式的模块
- 经过四年的工作,所有DLL库到使用PE(Portable Executable,用于Windows)可执行文件格式的转换已经完成。 PE 的使用允许使用适用于 Windows 的调试器,并解决了支持验证磁盘和内存中系统模块身份的各种复制保护方案的问题。 在 32 位主机上运行 64 位应用程序和在 ARM 系统上运行 x86 应用程序的问题也已得到解决。 在 Wine 8.x 的后续实验版本中计划解决的剩余任务中,有一个模块过渡到 NT 系统调用接口,而不是在 PE 和 Unix 层之间进行直接调用。
- 已经实现了一个特殊的系统调用管理器,用于将调用从 PE 转换为 Unix 库,以减少执行完整 NT 系统调用的开销。 例如,优化可以减少使用 OpenGL 和 Vulkan 库时的性能下降。
- Winelib 应用程序保留使用 ELF (.dll.so) 库的混合 Windows/Unix 程序集的能力,但此类没有 32 位库的应用程序将不支持通过 NT 系统调用接口提供的功能,例如 WoW64。
- 魔兽64
- WoW64(64位Windows-on-Windows)层为所有Unix库提供,允许PE格式的32位模块访问64位Unix库,在摆脱直接PE/Unix调用后,将使其无需安装 32 位 Unix 库即可执行 32 位 Windows 应用程序。
- 在没有 32 位 Wine 加载程序的情况下,32 位应用程序可以在新的实验性类似 Windows WoW64 模式下运行,其中 32 位代码在 64 位进程内运行。 使用“—enable-archs”选项构建 Wine 时会启用该模式。
- 图形子系统
- 默认配置使用浅色主题(“Light”)。 您可以使用 WineCfg 实用程序更改主题。
- 图形驱动程序(winex11.drv、winemac.drv、wineandroid.drv)被转换为在 Unix 级别执行系统调用并通过 Win32u 库访问驱动程序。
- 打印处理器架构已经实现,用于消除打印机驱动程序中PE和Unix层之间的直接调用。
- Direct2D API 现在支持效果。
- Direct2D API 添加了录制和播放命令列表的功能。
- Vulkan 图形 API 的驱动程序添加了对 Vulkan 1.3.237 规范的支持(Wine 7 中支持 Vulkan 1.2)。
- 默认配置使用浅色主题(“Light”)。 您可以使用 WineCfg 实用程序更改主题。
- Direct3D
- 为 HLSL(高级着色器语言)添加了新的着色器编译器,基于 vkd3d-shader 库实现。 同样基于vkd3d-shader,还准备了HLSL反汇编器和HLSL预处理器。
- D3DX 10 中引入的线程泵接口已实现。
- Direct3D 10 效果添加了对许多新表达式的支持。
- D3DX 9 的支持库现在支持 Cubemap 纹理投影。
- 声音和视频
- 基于GStreamer框架,实现了对解码MPEG-1格式音频的过滤器的支持。
- 添加了用于读取 ASF(高级系统格式)格式的流式音频和视频的过滤器。
- 中间库层 OpenAL32.dll 已被删除,现在使用随应用程序提供的本机 Windows 库 OpenAL32.dll。
- Media Foundation Player 改进了内容类型检测。
- 控制数据传输速率(速率控制)的能力已经实现。
- 改进了对增强视频渲染器 (EVR) 中默认混合器和演示器的支持。
- 添加了 Writer Encoding API 的初始实现。
- 改进了拓扑加载器支持。
- 输入设备
- 显着改进了对控制器热插拔的支持。
- 提出了一种基于SDL库的游戏方向盘判定代码的改进实现。
- 改进了使用游戏轮时对力反馈效果的支持。
- 使用 HID Haptic 规范控制左右振动电机的能力已实现。
- 更改了操纵杆控制面板的设计。
- 通过使用 hidraw 后端提供对 Sony DualShock 和 DualSense 控制器的支持。
- WinRT 模块 Windows.Gaming.Input 旨在实现用于访问游戏手柄、操纵杆和游戏轮的软件接口。 对于新的 API,除其他外,还实现了对设备热插拔通知、触觉和振动效果的支持。
- 国际化
- 确保从 Unicode CLDR(Unicode 公共区域设置数据存储库)存储库生成 locale.nls 格式的正确区域设置数据库。
- Unicode 字符串比较函数已改为使用数据库和 Windows Sortkey 算法而不是 Unicode Collation 算法,从而使行为更接近 Windows。
- 大多数功能都增加了对较高 Unicode 代码范围(平面)的支持。
- 可以使用 UTF-8 作为 ANSI 编码。
- 字符表已更新为 Unicode 15.0.0 规范。
- 文字和字体
- 大多数系统字体都启用了字体链接,解决了中文、韩文和日文系统上缺少字形的问题。
- 重新设计了 DirectWrite 中的后备字体。
- 内核(Windows 内核接口)
- 已实现 ApiSetSchema 数据库,它取代了 api-ms-* 模块并减少了磁盘和地址空间消耗。
- DOS 文件属性使用扩展 FS 属性以 Samba 兼容格式保存在磁盘上。
- 联网功能
- 添加了对 OCSP(在线证书状态协议)的支持,用于检查已吊销的证书。
- JavaScript 标准合规模式中可用的 EcmaScript 功能范围已得到扩展。
- 为 JavaScript 实现了垃圾收集器。
- Gecko 引擎包包含适合残疾人士的功能。
- MSHTML 添加了对 Web 存储 API、性能对象和用于事件处理的其他对象的支持。
- 嵌入式应用
- 所有内置应用程序均已转换为使用 Common Controls 6 库,并支持设计主题和渲染,同时考虑到高像素密度的屏幕。
- Wine 调试器 (winedbg) 中调试线程的增强功能。
- 注册表实用程序(REGEDIT 和 REG)现在支持 QWORD 类型。
- 记事本添加了状态栏,其中包含有关光标位置的信息以及跳转到指定行号的 Goto Line 功能
- 内置控制台提供 OEM 代码页中的数据输出。
- “query”命令已添加到 sc.exe(服务控制)实用程序中。
- 装配系统
- 已经提供了为多种体系结构构建 PE 格式的可执行文件的能力(例如,“—enable-archs=i386,x86_64”)。
- 在所有具有 32 位 long 类型的平台上,Windows 中定义为 long 的数据类型现在在 Wine 中重新定义为“long”而不是“int”。 在 Winelib 中,可以通过 WINE_NO_LONG_TYPES 定义禁用此行为。
- 添加了不使用 dlltool 生成库的功能(通过在 winebuild 中设置“—without-dlltool”选项启用)。
- 为了提高加载效率并减少无代码、纯资源库的大小,winegcc 实现了“--data-only”选项。
- 杂项
- 内置库的更新版本 Faudio 22.11、LCMS2 2.14、LibJPEG 9e、LibMPG123 1.31.1、LibPng 1.6.39、LibTiff 4.4.0、LibXml2 2.10.3、LibXslt 1.1.37、Zlib 1.2.13。
- .NET 平台实现的 Wine Mono 引擎已更新至版本 7.4。
- 已实现对基于RSA算法和RSA-PSS数字签名的加密的支持。
- 添加了 UI 自动化 API 的初始版本。
- 源代码树包括 LDAP 和 vkd3d 库,它们以 PE 格式编译,无需提供这些库的 Unix 程序集。
- OpenAL 库已停止使用。
来源: opennet.ru