Wine 7 estrena nueva arquitectura para 64-bit y avanza en el soporte de Vulkan
Prácticamente un año después, ya tenemos entre nosotros a Wine 7.0, la nueva versión mayor de la capa de compatibilidad que consiste en una reimplementación de las API de Windows para sistemas Unix y tipo Unix, lo que abre la puerta a poder ejecutar aplicaciones compiladas para Windows en Linux, macOS, FreeBSD, etc.
Wine es un proyecto bastante veterano que durante el transcurso de la década pasada fue perdiendo protagonismo debido a la proliferación de las aplicaciones multiplataforma, situación que provocó un aumento de la cantidad de aplicaciones con versión oficial para Linux. Sin embargo, la aparición de Proton puso de nuevo el foco en Wine, que puede ser considerado como una de las obras de ingeniería (inversa) más valiosas del software libre.
Wine 7.0 llega con bastantes novedades, aunque algunas de ellas pueden sonar a más de lo mismo viendo su trayectoria. Para empezar, la arquitectura de Windows-on-Windows de 64bit (WoW64) ha sido implementada, soportando la ejecución de aplicaciones de Windows para 32-bit en sistemas Unix de 64-bit.
Ahora todos los módulos están compilados en formato PE salvo algunas excepciones. Los responsables esperan convertir los módulos que quedan en futuros lanzamientos de Wine, cosa que cuando se logre permitirá con WoW64 ejecutar aplicaciones de Windows para 32-bit sobre Unix de 64-bit sin necesidad de instalar las bibliotecas de Unix para 32-bit.
Los ficheros DLL incluidos solo se cargan si hay en disco un fichero PE que corresponda, ya sea un binario real o un módulo PE falso. De esta manera se garantiza que la aplicación siempre vea una asignación de fichero PE válida.
En cuanto a temas se ha incorporado el “Claro” (Light), que se une al Azul (Blue) y Azul Clásico (Classic Blue) y pueden ser intercambiados a través de WineCfg. A partir de Wine 7 todos los controles comunes soportan temas, siendo refrescados automáticamente. Las aplicaciones incluidas soportan HiDPI y también los temas (si bien el refresco automático no ha sido aclarado).
Los desarrolladores de Wine han implementado una nueva biblioteca de Win32u en la parte del núcleo para los gráficos y la gestión de las ventanas. En consecuencia, grandes porciones de las bibliotecas GDI32 y USER32 han sido convertidas a Win32u. El driver Vulkan soporta hasta la versión 1.2.201 de la API gráfica y se ha introducido soporte inicial para los efectos de Direct2D y WindowsCodecs soporta ahora la decodificación de Windows Media Photo y el renderizado de DirectDraw Surface.
Sobre Direct3D, el renderizador de Vulkan sigue evolucionando y debería de funcionar en la mayoría de los casos y con las versiones 10 y 11 de Direct3D a la par que el viejo renderizador de OpenGL, a pesar de no estar estar habilitado por defecto todavía.
Otra novedad relacionada con Direct3D es el soporte para múltiples monitores, que en la práctica permite elegir el monitor en el que se proyecta una aplicación que usa dicha API en modo de pantalla completa, aunque importante tener en cuenta que sobre X11 hay que disponer de xrandr 1.4 o posterior. Por otro lado, el soporte de Direct3D 12 requiere en Wine 7.0 de la versión 1.2 o posterior de la biblioteca de VKD3D.
Se ha implementado el ajuste del gamma de la pantalla con la API DXGI, un componente que es empleado en algunas ocasiones por aplicaciones Direct3D 10 y 11 para ajustar el “brillo” de la pantalla. Por otro lado, las siguientes gráficas son ahora correctamente detectadas a la hora de emplear Direct3D a través de Wine 7: AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630 y NVIDIA GT 1030.
Para la reproducción de audio y vídeo nos encontramos con que DirectShow y Media Foundation de GStreamer han sido unificados en un único backend, facilitando así la implementación de nuevas API de decodificación. El lector de objetos síncrono y asíncrono de Windows Media ha sido implementado basándose en el backend WineGStreamer y la biblioteca de decodificación de QuickTime ha sido eliminada, por lo que GStreamer ha pasado a ser un requisito incluso en macOS.
El Dispositivo de Interfaz Humana (HID) es ahora más completo y los backends del controlador ‘winebus.sys’ han sido mejorados para la generación de informes de HID relacionados con los dispositivos. El nuevo backend de joystick de DirectInput se aprovecha de nuevas las capacidades del HID y el panel de control de joysticks ha sido mejorado.
El motor de Mono ha sido actualizado a la versión 7 con una destacada cantidad de cambios (sobresaliendo una mayor utilización de .NET Core), se ha incluido soporte de Unicode 14 para la internacionalización y el wrapper de OpenCL soporta hasta la versión 1.2 de la API.
Y hasta aquí lo más interesante de Wine 7. La versión de la capa de compatibilidad que nos ocupa puede obtenerse de manera oficial para Android, Ubuntu, Debian, Fedora y macOS a partir de la sección de descargas del proyecto, mientras que las compilaciones para SUSE, Slackware y FreeBSD son mantenidas por sus respectivas comunidades.
Los que estén interesados tienen a disposición todos los detalles de este lanzamiento en el anuncio oficial y las notas de lanzamiento.