Después de un año de desarrollo y 25 versiones experimentales, se presenta la versión estable de la implementación abierta de la API Win32: Wine 11.0, que contiene más de 6300 cambios y 600 correcciones de errores. Entre los logros clave de la nueva versión, se destaca el soporte completo para NTSYNC, la implementación del mecanismo Reparse Point y la utilización de una nueva implementación de la arquitectura WoW64.
Wine ha confirmado el funcionamiento completo de 5419 programas para Windows (el año pasado 5372, hace dos años 5336, hace tres años 5266), además, otros 4500 programas (el año pasado 4435, hace dos años 4397, hace tres años 4370) funcionan perfectamente con configuraciones adicionales y DLL externas. Se observan pequeños problemas en 4086 programas (el año pasado 4020, hace dos años 3943, hace tres años 3888), los cuales no afectan el uso de las funciones principales de las aplicaciones.
Novedades clave de Wine 11.0:
- Soporte completo para el controlador ntsync, que permite mejorar significativamente el rendimiento de los juegos de Windows ejecutados a través de Wine. Este controlador forma parte del núcleo de Linux desde la versión 6.14 y proporciona un dispositivo de caracteres /dev/ntsync y un conjunto de primitivas para sincronización utilizadas en el núcleo de Windows NT. Se logra un aumento significativo en el rendimiento al eliminar los costos de sobrecarga asociados con el uso de RPC en el espacio de usuario.
- Se ha añadido la posibilidad de configurar la prioridad de los hilos en Linux y macOS.
- Se ha añadido la API de sincronización "Synchronization barriers" en ntdll, lo que permite suspender la ejecución de varios hilos hasta que se alcance un punto específico de ejecución en todos los hilos (por ejemplo, esperar hasta que todos los hilos alcancen una determinada etapa al ejecutar paralelamente el mismo código).
- Se ha trasladado al rango de totalmente soportados una nueva implementación de la capa WoW64 (Windows-on-Windows de 64 bits), que permite ejecutar aplicaciones de Windows de 32 bits en sistemas Unix de 64 bits. A diferencia de la antigua implementación de WoW64, donde las aplicaciones de 32 bits se ejecutaban en procesos Unix de 32 bits, la nueva versión de WoW64 permite ejecutar código de 32 bits dentro de un proceso de 64 bits. Se ha implementado soporte para la ejecución de aplicaciones de 16 bits en modo WoW64.
En todos los módulos que se comunican con bibliotecas Unix, se utilizan convertidores de llamadas del sistema WoW64 (thunk), que permiten que los módulos de 32 bits en formato PE accedan a bibliotecas Unix de 64 bits. Se ha añadido la opción de ejecutar instalaciones antiguas de WoW64 en un nuevo modo estableciendo la variable de entorno "WINEARCH=wow64". Los prefijos de 32 bits creados al establecer WINEARCH=win32 se han declarado obsoletos y no son compatibles en el nuevo modo WoW64. Se ha eliminado el cargador separado wine64, que ha sido reemplazado por un cargador universal que determina el modo según la arquitectura del archivo ejecutable.
- Núcleo (interfaces del núcleo de Windows)
- Se ha implementado el mecanismo Reparse Point, que permite adjuntar datos adicionales a archivos y directorios, identificables a través de etiquetas. Se admiten tipos de Reparse Point como enlaces simbólicos y puntos de montaje.
- Para mejorar el rendimiento del seguimiento de operaciones de escritura en memoria, se ha implementado el mecanismo UFFD (userfaultfd), que permite crear manejadores para solicitudes de páginas de memoria no asignadas (page faults) en el espacio del usuario. En las pruebas realizadas, el uso de UFFD ha permitido reducir el tiempo de carga de niveles en el juego "Streets of Rage 4" de 6-8 segundos a 1.5-2 segundos, lo que corresponde a los tiempos de carga en la plataforma Windows.
- Se han utilizado los números de llamadas del sistema NT, idénticos a las últimas versiones de Windows, lo que es necesario para el soporte de aplicaciones que utilizan números de llamadas del sistema predefinidos.
- En sistemas ARM64, se ha implementado la posibilidad de simular páginas de memoria de 4K en entornos con núcleos Linux que utilizan páginas de memoria más grandes (16K o 64K). La simulación permite ejecutar aplicaciones simples, y para programas más complejos se recomienda utilizar núcleos de Linux con páginas de memoria de 4 kilobytes.
- Subsistema gráfico
- En sistemas X11 (winex11), por defecto se utiliza un backend de renderizado para OpenGL que emplea EGL. El backend GLX se ha declarado obsoleto, pero sigue estando disponible como alternativa y se utiliza en ausencia de EGL.
- Se ha añadido soporte inicial para objetos D3DKMT, que proporcionan acceso de bajo nivel a dispositivos gráficos desde el espacio de usuario. Se han implementado las extensiones de Vulkan VK_KHR_external_memory_win32, VK_KHR_external_semaphore_win32, VK_KHR_external_fence_win32 y VK_KHR_win32_keyed_mutex.
- En el modo WoW64 (Windows-on-Windows de 64 bits) se ha implementado soporte para el mapeo de memoria para OpenGL a través de la API Vulkan, lo que permite acelerar el funcionamiento de aplicaciones OpenGL de 32 bits en Wine.
- Se ha implementado la emulación del búfer de visualización (front buffer) para OpenGL en plataformas sin su soporte integrado.
- Se ha añadido soporte para la especificación Vulkan 1.4.335 en el controlador para la API gráfica Vulkan.
- En el conjunto de bibliotecas WindowsCodecs se ha ampliado el soporte para metadatos en archivos de imágenes, así como se ha implementado la conversión entre formatos de color enteros y formatos de punto flotante.
- Se ha eliminado la dependencia de la biblioteca OSMesa (Off-screen Mesa). Se ha implementado la posibilidad de renderizar mapas de bits a través de OpenGL utilizando un runtime de OpenGL acelerado por hardware.
- Integración con el escritorio
- En el controlador winewayland.drv, que permite utilizar Wine en entornos basados en el protocolo Wayland sin usar XWayland y componentes X11, se ha implementado soporte para el portapapeles, métodos de entrada, ventanas no rectangulares y transparencia.
- Se ha mejorado la integración con X11: se asegura el envío de solicitudes de activación de ventanas al gestor de ventanas y se ha utilizado el protocolo EWMH para la coordinación del estado de las ventanas activas entre X11 y Win32.
- Se ha implementado soporte para el modo de pantalla completa exclusivo. Se ha mejorado el soporte para el modo de pantalla completa en D3D y se ha optimizado el funcionamiento de juegos antiguos basados en DDraw.
- Se ha aumentado el rendimiento de algunas funciones relacionadas con ventanas. Se ha utilizado memoria compartida para la interacción entre procesos.
- Direct3D
- En Direct3D 11 se ha añadido soporte para la aceleración de hardware en la decodificación de video en formato H.264, implementada a través de la API gráfica Vulkan.
- En Direct3D 11 se ha implementado soporte para la filtración minmax de texturas, utilizando la extensión de OpenGL GL_ARB_texture_filter_minmax o la extensión de Vulkan VK_EXT_sampler_filter_minmax.
- En Direct3D 11 se han implementado funciones de carga de texturas.
- Se ha implementado una amplia gama de capacidades de Direct3D en la renderización a través de Vulkan, como la mezcla de vértices, el sombreado plano, los planos de recorte personalizados y varios formatos de recursos.
- En la copia integrada de vkd3d-shader se ha mejorado el soporte para modelos de sombreado 1, 2 y 3.
- El método D3DXSaveSurfaceToFileInMemory ahora incluye soporte para imágenes PNG, JPEG y BMP.
- Para Direct3D 10 y 11 se implementó soporte para la compresión y descompresión de formatos BC4 y BC5, así como la generación de niveles MIP (MipMap) al cargar texturas.
- Se han implementado los métodos ID3DXEffect::SetRawValue() y ID3DXSkinInfo::UpdateSkinnedMesh().
- Dispositivos de entrada
- Se ha mejorado la compatibilidad con joysticks mediante el uso del backend hidraw.
- Se ha mejorado el soporte para el efecto de retroalimentación por vibración (Force feedback) al usar volantes y joysticks.
- Se ha mejorado el soporte para gamepads en la API Windows.Gaming.Input y al utilizar el backend evdev.
- En el applet de gestión de controladores de juegos se ha añadido una pestaña para configurar la API Windows.Gaming.Input.
- Se ha aumentado la compatibilidad de DirectInput con juegos antiguos.
- Bluetooth
- El controlador de Bluetooth ha añadido la capacidad de escanear, configurar la detección y emparejar dispositivos.
- Se ha añadido soporte para servicios Bluetooth Low Energy.
- Las aplicaciones ahora pueden crear conexiones RFCOMM de bajo nivel con dispositivos externos utilizando la API Winsock.
- Soporte para escáneres
- Se ha implementado soporte para API TWAIN 2.0, permitiendo acceder a escáneres desde aplicaciones de 64 bits.
- Se ha implementado soporte para el componente DAT_IMAGENATIVEXFER para transmitir imágenes del escáner a la aplicación.
- Se asegura la conservación en el registro del escáner seleccionado y de las configuraciones del escáner.
- Se ha añadido soporte para escaneo de múltiples páginas y alimentadores automáticos de documentos.
- Se ha interrumpido el bloqueo de la aplicación durante la llamada a la interfaz de escaneo.
- Se ha añadido soporte para cargar controladores nativos de Windows para escáneres.
- Internacionalización
- Se ha generado una base de datos de configuraciones locales en formato locale.nls a partir de la base de datos Unicode CLDR (Unicode Common Locale Data Repository) versión 48. Se ha añadido soporte para configuraciones locales adicionales bua-RU, bqi-IR, cop-EG, ht-HT, kek-GT, lzz-TR, mww-Hmnp-US, oka-CA, pi-Latn-GB, pms-IT, sgs-LT, suz-Deva-NP y suz-Sunu-NP.
- Las tablas de símbolos Unicode se han actualizado a la versión de estándar 17.0.0. Se ha actualizado la base de datos de zonas horarias.
- Capacidades de red
- En el motor MSHTML en modo de compatibilidad con estándares se ha logrado trabajar con atributos de elementos como nodos DOM completos. Se han implementado los objetos DOMParser, XDomainRequest y msCrypto.
- En JavaScript se ha añadido soporte para arrays tipados.
- Se ha implementado el comando ping para ICMPv6.
- BD
- En la biblioteca MSADO (ActiveX Data Objects) se ha añadido soporte para registrar cambios en la base de datos. Se han implementado la mayoría de las funciones del objeto Recordset.
- En la biblioteca odbc32 se ha mejorado el soporte para controladores win32 ANSI que no están diseñados para trabajar con Unicode. Se han implementado las funciones SQLDriverConnectA(), SQLSpecialColumnsW(), SQLGetInfoW(), SQLStatisticsW() y QLColumnsW().
- Aplicaciones integradas
- En WineCfg se ha añadido una pestaña para configurar el dispositivo MIDI predeterminado.
- En la utilidad cmd se ha implementado el autocompletado de nombres de archivos en el modo interactivo, se ha añadido soporte para instrucciones complejas y se ha implementado el comando “mklink /j” para crear un Reparse Point.
- En la utilidad conhost (Console Hosting) se ha añadido soporte para obtener el historial al presionar las teclas F1 y F3.
- Se han implementado los comandos timeout, runas y subst.
- En la utilidad find se han añadido las opciones “/c” para mostrar el número de coincidencias y “/i” para coincidencias sin considerar mayúsculas.
- En la utilidad whoami se ha añadido la opción de configurar el formato de salida.
- Varios
- En la implementación del lenguaje de descripción de interfaces WIDL (Wine Interface Definition Language) se ha añadido soporte para la generación de metadatos de Windows Runtime (WinRT). Se asegura la generación e instalación de archivos WinMD (Windows Metadata) para la API de WinRT (Windows Runtime).
- En la utilidad winedump se ha añadido soporte para el volcado de recursos MUI, números de llamadas del sistema, módulos NE integrados y archivos PDB grandes (> 4 GB).
- Se ha realizado una refactorización de la implementación de Common Control, la biblioteca COMCTL32 se ha dividido en módulos separados para las versiones 5 y 6.
- En BCrypt se ha añadido soporte para el estándar de formación de claves PBKDF2.
- Se ha añadido soporte para los directorios UserProgramFiles, AccountPictures y Screenshots.
- Se han integrado las bibliotecas LLVM Compiler-RT 8.0.1 y TomCrypt 1.18.2. Para la detección de la CPU en la plataforma FreeBSD se ha utilizado la biblioteca HwLoc.
- Se han actualizado a nuevas versiones los componentes Vkd3d 1.18, Faudio 25.12, FluidSynth 2.4.2, LCMS2 2.17, LibMPG123 1.33.0, Libpng 1.6.51, LibTiff 4.7.1, LibXml2 2.12.10, LibXslt 1.1.43.
Fuente: opennet.ru
