Después de un año de desarrollo y 26 versiones experimentales, se presenta el lanzamiento estable de la implementación abierta de la API Win32: Wine 9.0, que incluye más de 7000 cambios. Entre los logros clave de la nueva versión se destaca la implementación de la arquitectura WoW64 para ejecutar aplicaciones de 32 bits en un entorno de 64 bits, la integración de un controlador para el soporte de Wayland, el soporte de la arquitectura ARM64, la implementación de la API DirectMusic y el soporte para tarjetas inteligentes.
En Wine se confirma el funcionamiento completo de 5336 (el año pasado 5266, hace dos años 5156, hace tres años 5049) programas para Windows, además, 4397 (el año pasado 4370, hace dos años 4312, hace tres años 4227) programas funcionan perfectamente con configuraciones adicionales y DLL externas. Hay 3943 programas (el año pasado 3888, hace dos años 3813, hace tres años 3703) que presentan pequeños problemas en su funcionamiento, los cuales no impiden el uso de las funciones principales de las aplicaciones.
Novedades clave de Wine 9.0:
- Se ha añadido el controlador winewayland.drv, que permite utilizar Wine en entornos basados en el protocolo Wayland sin necesidad de XWayland y componentes de X11. El desarrollo se centra en asegurar el funcionamiento de un entorno limpio de Wayland con soporte para ejecutar aplicaciones de Windows, sin requerir la instalación de paquetes relacionados con X11, lo que permite alcanzar un mejor rendimiento y respuesta de los juegos al eliminar capas innecesarias. El uso de un entorno limpio de Wayland para Wine también permite deshacerse de los problemas de seguridad propios de X11 (por ejemplo, los juegos no confiables para X11 pueden espiar otras aplicaciones, ya que el protocolo X11 permite acceder a todos los eventos de entrada y realizar la sustitución de pulsaciones de teclas ficticias).
El controlador se ha marcado como experimental y está en desarrollo, pero, no obstante, ya cuenta con soporte para muchas funcionalidades, como la gestión de ventanas, el trabajo con múltiples monitores, el soporte de escalado de salida en pantallas de alta densidad de píxeles (high-DPI), el trabajo con coordenadas relativas al rastrear el movimiento del ratón y el soporte para la API gráfica Vulkan. Por defecto, el controlador está desactivado y para habilitarlo se debe añadir «wayland» al parámetro del registro «HKCU\Software\Wine\Drivers» y asegurarse de que no esté configurada la variable de entorno DISPLAY: wine reg.exe add HKCU\\Software\\Wine\\Drivers \/v Graphics \/d x11,wayland
- Se ha realizado la traducción de todos los módulos a la interfaz de llamadas al sistema NT, en lugar de realizar llamadas directas entre los niveles PE y Unix, lo que marca la finalización de años de trabajo en la traducción de todas las bibliotecas DLL para utilizar el formato de archivos ejecutables PE (Portable Executable).
- Se ha continuado el desarrollo de la capa WoW64 (Windows-on-Windows de 64 bits), que permite ejecutar aplicaciones Windows de 32 bits en sistemas Unix de 64 bits. Todos los módulos que acceden a bibliotecas Unix utilizan convertidores de llamadas al sistema WoW64 (thunk), que permiten que los módulos de 32 bits en formato PE accedan a bibliotecas Unix de 64 bits.
Se ha mejorado el nuevo modo de arranque de WoW64, en el que el código de 32 bits se ejecuta dentro de un proceso de 64 bits (en el antiguo modo WoW64, las aplicaciones de 32 bits se ejecutaban en procesos de Unix de 32 bits). Se ha añadido soporte para el uso del nuevo modo WoW64 en la plataforma macOS. Dado que en el nuevo modo WoW64 hay ciertos problemas aún no resueltos, como la falta de soporte para el modo de 16 bits y la disminución del rendimiento de OpenGL debido a la falta de soporte para la extensión ARB_buffer_storage, aún no está habilitado por defecto y requiere una compilación con la opción '—enable-archs=i386,x86_64' en el script configure.
- Se ha añadido la capacidad de ejecutar archivos ejecutables de Windows existentes en sistemas con arquitectura ARM64. Se ha implementado la posibilidad de compilar Wine para ABI ARM64EC (Compatible con Emulación ARM64) y soporte para cargar módulos ARM64EC, utilizados para facilitar la portabilidad de aplicaciones originalmente escritas para la arquitectura x86_64 a sistemas ARM64, mediante la provisión de la capacidad de ejecutar en un entorno ARM64 módulos individuales con código x86_64 utilizando un emulador. Se ha añadido soporte para el formato de archivos PE ARM64X, que permite cargar un único archivo ejecutable en procesos x64/Arm64EC y ARM64. Se ha implementado una interfaz para emular sistemas x86 de 32 bits, pero la biblioteca con el emulador aún no se incluye en la versión principal de Wine (para ejecutar código x86 en un entorno ARM64 se puede utilizar el emulador externo FEX).
- Subsistema gráfico
- El controlador PostScript ha sido rediseñado para soportar archivos spool en formato Windows, donde se almacenan los datos de las tareas impresas. Se han eliminado las llamadas directas al controlador desde el entorno Unix.
- En los temas de diseño de WinRT se ha añadido soporte para el modo oscuro. Se ha añadido una configuración en WineCfg para habilitar el diseño oscuro de la interfaz.
- Se ha agregado soporte para la especificación Vulkan 1.3.272 en el controlador de la API gráfica Vulkan (en Wine 8.0 se soportaba 1.3.237).
- Se han optimizado las funciones de la biblioteca GdiPlus, lo que ha permitido aumentar el rendimiento al trabajar con gráficos.
- Direct3D
- Se ha logrado la suspensión del análisis del hilo de comandos multihilo en ausencia de comandos de renderizado a procesar, lo que permite reducir el consumo de energía al nivel de procesamiento de un solo hilo al ejecutar programas que no utilizan todo el ancho de banda del hilo de comandos.
- Se implementó soporte para efectos adicionales en Direct3D 10.
- Se han realizado optimizaciones de rendimiento en el código de WineD3D y en el backend que utiliza la API gráfica Vulkan.
- En el código de renderizado basado en la API Vulkan se ha agregado una verificación de las capacidades soportadas por el dispositivo y se han proporcionado al programa detalles sobre el nivel funcionalidad disponible de Direct3D.
- Se han implementado las funciones D3DXFillTextureTX y D3DXFillCubeTextureTX.
- En el backend clásico de shaders OpenGL ARB se ha agregado soporte para la definición de sombras mediante la extensión ARB_fragment_program_shadow.
- En D3DXLoadMeshHierarchyFromX y funciones similares se ha agregado soporte para cargar datos personalizados mediante la interfaz ID3DXLoadUserData.
- Sonido y video
- Se ha propuesto una implementación inicial de la API DirectMusic. Se ha añadido soporte para colecciones, instrumentos y muestras de sonido en formato SoundFont. Se ha incluido soporte para el efecto Doppler. Se han implementado pruebas para verificar la correcta implementación en el funcionamiento del secuenciador dmime y el sintetizador MIDI dmsynth.
- Se incorporó una biblioteca FluidSynth en la API de DirectMusic.
- Se ha implementado soporte para cargar fuentes de sonido (SoundFont—formatos para síntesis basada en muestras, utilizados para reproducir archivos MIDI) en los formatos DLS1 y DLS2, así como en el formato SF2, utilizado en Linux.
- Se ha añadido la posibilidad de reproducir contenido MIDI mediante la biblioteca dmsynth, utilizando el sintetizador de software FluidSynth y la API DirectSound para la salida de sonido.
- Se ha añadido un decodificador para video en el formato del codec de video Indeo IV50.
- DirectShow
- Se ha implementado un componente DMO (DirectX Media Object) con un decodificador para el formato WMV (Windows Media Video).
- Se ha añadido un filtro de captura de audio (DirectShow Audio Capture Filter).
- En el filtro de separación de flujos MPEG-1 (DirectShow MPEG-1 Stream Splitter), además de los flujos de audio, se ha añadido soporte para flujos de video y flujos de servicio.
- Se ha implementado un filtro para decodificar video en el formato MPEG-1 (DirectShow MPEG-1 Video Decoder).
- Dispositivos de entrada
- En DirectInput se ha implementado el soporte para el mapeo de acciones (action maps), que permite asociar botones del controlador de juego a acciones específicas en los juegos.
- Integración con el escritorio
- Se ha asegurado la exportación a el entorno de usuario principal de las asignaciones que permiten ejecutar aplicaciones gestionadas por Wine como manejadores de protocolos al abrir una URL (por ejemplo, ejecutar spotify.exe al abrir enlaces del tipo «spotify:user:spotify:playlist:848218482355482821»).
- Se ha implementado la extracción de datos EDID (Extended Display Identification Data) con información sobre los parámetros del monitor conectado, como el nombre y modelo del dispositivo.
- Se ha proporcionado la posibilidad de cerrar la ventana del escritorio, desplegada en modo de pantalla completa, usando el botón «Exit desktop» en el menú «Start».
- Internacionalización
- Se ha ampliado el soporte para IME (Editors de Métodos de Entrada). Se ha trabajado en asegurar la compatibilidad con las implementaciones nativas de Windows de IME y mejorar la integración con IME de Linux.
- Se ha asegurado la generación de la base de datos de localizaciones en formato locale.nls a partir de la base de datos Unicode CLDR (Unicode Common Locale Data Repository) versión 44. Se ha añadido soporte para localizaciones adicionales bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN y za-CN.
- Se ha realizado la traducción de la interfaz al idioma georgiano. Se han proporcionado traducciones completas para 16 idiomas y parciales para 31 idiomas.
- Las tablas de caracteres Unicode se han actualizado a la versión del estándar 15.1.0. Se ha actualizado la base de datos de zonas horarias.
- Núcleo (interfaces del núcleo de Windows)
- Como versión predeterminada de Windows se ha definido Windows 10.
- Para los archivos ejecutables en formato PE se ha implementado el soporte para la aleatorización del espacio de direcciones (ASLR), aunque las direcciones de carga de código en memoria aún no están completamente aleatorizadas.
- Se ha implementado el soporte para montones débilmente fragmentados (LFH, Low Fragmentation Heap), lo que ha permitido aumentar el rendimiento en las operaciones de asignación de memoria.
- Se ha añadido soporte para la reserva de memoria (placeholder) en el mecanismo de asignación de memoria virtual, permitiendo a la aplicación reservar un área específica de memoria virtual para su uso futuro.
- Cargadores de 64 bits (loader y preloader) de archivos ejecutables y bibliotecas ensamblados en formato PIE (Position-Independent Executables) para liberar parte del espacio de direcciones de 32 bits.
- Se ha asegurado un correcto desmontaje de pila (stack unwinding) para llamadas al sistema NT y llamadas de retorno de usuario.
- Capacidades de red
- En el motor MSHTML se ha implementado el soporte para el mecanismo de recolección de basura «Cycle Collection».
- Se ha añadido soporte para el modo de procesamiento síncrono de solicitudes XMLHttpRequest en MSHTML.
- Se ha añadido soporte para el objeto WeakMap en jscript.dll, que permite trabajar con colecciones de pares clave/valor donde la clave es un objeto al que se puede adjuntar un valor arbitrario. Se han implementado los métodos WeakMap.get(), WeakMap.delete(), WeakMap.clear() y WeakMap.has().
- El motor del navegador Gecko ha sido actualizado a la versión 2.47.4.
- Se ha implementado soporte para notificaciones de cambio en el estado de la interfaz de red.
- Criptografía y seguridad
- Se ha añadido soporte para tarjetas inteligentes en la biblioteca Winscard.dll, implementado a través de la biblioteca de sistema PCSClite.
- Se ha añadido soporte para el protocolo de intercambio de claves de Diffie-Hellman en BCrypt.
- Se ha implementado un paquete Negotiate que proporciona una capa para utilizar la interfaz SSPI (Interfaz de Proveedor de Soporte de Seguridad) para interactuar con los proveedores SSP (Proveedor de Soporte de Seguridad).
- Aplicaciones integradas
- En el depurador Wine Debugger (winedbg) se ha utilizado la biblioteca Zydis para desensamblar instrucciones de máquina X86.
- Se ha añadido en la interfaz WineCfg la posibilidad de configurar versiones antiguas de Windows (hasta XP) en plataformas de 64 bits, lo que permite ejecutar aplicaciones obsoletas utilizando el modo WoW64.
- En todas las aplicaciones gráficas incorporadas se ha implementado la salida de información sobre errores en un diálogo separado, en lugar de mostrarse en la consola.
- El programa systeminfo ahora muestra información de la base de datos WMI (Instrumentación de Gestión de Windows).
- Se ha añadido la aplicación klist para mostrar tickets de Kerberos.
- En la aplicación taskkill se ha implementado la posibilidad de finalizar forzosamente procesos secundarios.
- En la utilidad start se ha añadido el parámetro «/machine» para seleccionar la arquitectura utilizada al ejecutar archivos ejecutables híbridos que soportan x86 y ARM.
- Se ha implementado la mayor parte de la funcionalidad del programa tasklist.
- Se ha añadido una implementación básica de la aplicación findstr.
- Herramientas para desarrolladores
- En la utilidad WineDump se ha implementado la capacidad de mostrar el contenido de archivos de registro de Windows (formato REGF), así como datos para todas las arquitecturas (x86/ARM64) soportadas en archivos PE híbridos.
- En el compilador IDL se ha añadido soporte para los atributos «composable», «default_overload», «deprecated» y «protected».
- Se ha eliminado la biblioteca libwine.so, que fue declarada obsoleta en la versión de Wine 6.0 y no se ha utilizado en Wine desde entonces. Los programas en formato ELF compilados en versiones antiguas de Wine (5.0 y anteriores) con libwine.so necesitan ser recompilados para ejecutarse en Wine 9.0.
- Bibliotecas integradas y dependencias externas
- Se integran las bibliotecas FluidSynth 2.3.3, Musl 1.2.3 (solo funciones matemáticas) y Zydis 4.0.0.
- Componentes actualizados a nuevas versiones: 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 y Zlib 1.3. El motor Wine Mono con implementación de la plataforma .NET se actualizó a la versión 8.1.0.
- En el controlador winewayland.drv, se utilizan como dependencias externas la biblioteca cliente de Wayland, así como las bibliotecas xkbcommon y xkbregistry.
- Para el soporte de tarjetas inteligentes se utiliza la biblioteca externa PCSClite (en macOS — PCSC).
- Para compilar archivos PE en plataformas distintas de i386, ahora se requiere un compilador cruzado que soporte las directivas “.seh” para manejar excepciones.
Fuente: opennet.ru
