Após um ano de desenvolvimento e 26 versões experimentais, foi lançada a versão estável da implementação open source da Win32 API — Wine 9.0, que incorpora mais de 7000 alterações. Entre as principais realizações da nova versão, destaca-se a implementação da arquitetura WoW64 para executar programas de 32 bits em um ambiente de 64 bits, a integração de um driver para suporte ao Wayland, suporte à arquitetura ARM64, implementação da API DirectMusic e suporte a smart cards.
No Wine, foi confirmada a plena funcionalidade de 5336 (um ano atrás 5266, dois anos atrás 5156, três anos atrás 5049) programas para Windows; outros 4397 (um ano atrás 4370, dois anos atrás 4312, três anos atrás 4227) programas funcionam bem com configurações adicionais e DLLs externas. Existem pequenas questões de funcionamento em 3943 programas (um ano atrás 3888, dois anos atrás 3813, três anos atrás 3703), que não impedem o uso das funções principais dos aplicativos.
Principais novidades do Wine 9.0:
- Adicionado o driver winewayland.drv, que permite usar o Wine em ambientes baseados no protocolo Wayland sem a necessidade de XWayland e componentes X11. O desenvolvimento visa garantir o funcionamento de um ambiente puro de Wayland com suporte para executar aplicativos do Windows, sem a necessidade de instalar pacotes relacionados ao X11, o que permite maior desempenho e responsividade em jogos, eliminando camadas desnecessárias. O uso de um ambiente puro de Wayland para o Wine também elimina problemas de segurança associados ao X11 (por exemplo, jogos não confiáveis para X11 podem espionar outros aplicativos, uma vez que o protocolo X11 permite acesso a todos os eventos de entrada e a substituição de toques falsos).
O driver é marcado como experimental e em desenvolvimento, mas já possui suporte para muitas funcionalidades, como gerenciamento de janelas, suporte a múltiplos monitores, suporte à escalação de saída em telas de alta densidade de pixels (high-DPI), rastreamento de movimentos do mouse com coordenadas relativas e suporte à API gráfica Vulkan. Por padrão, o driver não está ativo, e para habilitá-lo, deve-se adicionar 'wayland' na chave de registro 'HKCU\Software\Wine\Drivers' e assegurar que a variável de ambiente DISPLAY não esteja definida: wine reg.exe add HKCU\\Software\\Wine\\Drivers /v Graphics /d x11,wayland
- Foi realizada a tradução de todos os módulos para a interface de chamadas de sistema NT, em vez de realizar chamadas diretas entre os níveis PE e Unix, marcando o término de anos de trabalho para traduzir todas as bibliotecas DLL para utilizar o formato de arquivos executáveis PE (Portable Executable).
- Continuou-se o desenvolvimento da camada WoW64 (Windows-on-Windows de 64 bits), que permite a execução de aplicativos Windows de 32 bits em sistemas Unix de 64 bits. Todos os módulos que acessam bibliotecas Unix utilizam os conversores de chamadas de sistema WoW64 (thunk), permitindo que módulos de 32 bits em formato PE acessem bibliotecas Unix de 64 bits.
Foi aprimorado um novo modo de inicialização WoW64, onde o código de 32 bits é executado dentro de um processo de 64 bits (no modo antigo WoW64, aplicativos de 32 bits eram executados em processos Unix de 32 bits). Adicionada a suporte para a nova modalidade WoW64 na plataforma macOS. Como o novo modo WoW64 possui algumas limitações, como a falta de suporte ao modo de 16 bits e a redução do desempenho do OpenGL devido à ausência de suporte à extensão ARB_buffer_storage, ele não está habilitado por padrão e requer compilação com a opção '—enable-archs=i386,x86_64' no script configure.
- Adicionada a capacidade de executar arquivos executáveis existentes do Windows em sistemas com arquitetura ARM64. Implementada a possibilidade de compilar o Wine para ABI ARM64EC (Compatível com Emulação ARM64) e suporte para carregar módulos ARM64EC, utilizados para facilitar a portabilidade de aplicativos originalmente escritos para a arquitetura x86_64 para sistemas ARM64, permitindo a execução em um ambiente ARM64 de módulos com código x86_64 através de um emulador. Adicionado suporte ao formato de arquivos PE ARM64X, que permite carregar um único arquivo executável em processos x64/Arm64EC e ARM64. Implementada uma interface para emular sistemas x86 de 32 bits, mas a biblioteca com o emulador ainda não está incluída na versão principal do Wine (para executar código x86 em um ambiente ARM64, pode-se usar o emulador externo FEX).
- Subsistema gráfico
- O driver PostScript foi reformulado para suportar arquivos spool no formato Windows, que armazenam dados sobre tarefas a serem impressas. Removidas as chamadas diretas para o driver a partir do ambiente Unix.
- Nos temas de WinRT, foi adicionado suporte para o modo escuro. No WineCfg, foi adicionada uma configuração para ativar o tema escuro da interface.
- O driver para a API gráfica Vulkan agora suporta a especificação Vulkan 1.3.272 (na Wine 8.0, suportava 1.3.237).
- Foi realizada a otimização das funções da biblioteca GdiPlus, permitindo aumentar a produtividade no trabalho com gráficos.
- Direct3D
- Garante a pausa na análise do fluxo de comandos multithread em condições de ausência de comandos de renderização a serem processados, o que reduz o consumo de energia ao nível do processamento de thread único durante a execução de programas que não utilizam toda a largura de banda do fluxo de comandos.
- No Direct3D 10, foi implementado suporte a efeitos adicionais.
- Foram feitas otimizações de desempenho no código WineD3D e no backend que utiliza a API gráfica Vulkan.
- No código de renderização baseado na API Vulkan, foi adicionada uma verificação das capacidades suportadas pelo dispositivo e a entrega de informações ao aplicativo sobre o nível de funcionalidade do Direct3D disponível.
- Implementadas as funções D3DXFillTextureTX e D3DXFillCubeTextureTX.
- No backend clássico de shaders OpenGL ARB, foi adicionada a suporte para definição de sombras usando a extensão ARB_fragment_program_shadow.
- Na função D3DXLoadMeshHierarchyFromX e em funções semelhantes, foi adicionada a suporte para carregar dados personalizados através da interface ID3DXLoadUserData.
- Áudio e vídeo
- Foi proposta uma implementação inicial da API DirectMusic. Adicionado suporte a coleções, instrumentos e amostras sonoras no formato SoundFont. Suporte ao efeito Doppler foi incluído. Foram implementados testes para verificar a correção da implementação ao trabalhar com o sequenciador dmime e o sintetizador MIDI dmsynth.
- Para utilização na API DirectMusic, foi incorporada a biblioteca FluidSynth.
- Implementado suporte para carregar fontes sonoras (SoundFont — formatos de síntese baseados em amostras, usados para reprodução de arquivos MIDI) nos formatos DLS1 e DLS2, além do formato SF2, utilizado no Linux.
- Adicionada a capacidade de reprodução de conteúdo MIDI usando a biblioteca dmsynth, utilizando o sintetizador de software FluidSynth e a API DirectSound para a saída de som.
- Adicionado um decodificador para vídeos no formato do codec de vídeo Indeo IV50.
- DirectShow
- Implementado o componente DMO (DirectX Media Object) com um decodificador para o formato WMV (Windows Media Video).
- Adicionado um filtro de captura de áudio (DirectShow Audio Capture Filter).
- No filtro de divisão de streams MPEG-1 (DirectShow MPEG-1 Stream Splitter), além dos streams de áudio, foi adicionada a suporte para streams de vídeo e streams auxiliares.
- Implementado um filtro para decodificar vídeo no formato MPEG-1 (DirectShow MPEG-1 Video Decoder).
- Dispositivos de entrada
- No DirectInput foi implementado suporte para mapeamento de ações (action maps), permitindo vincular botões no controlador de jogos a ações específicas em jogos.
- Integração com a área de trabalho
- Foi garantido que as associações exportadas para o ambiente de usuário principal possam chamar aplicativos executados sob Wine como manipuladores de protocolos ao abrir URLs (por exemplo, iniciar spotify.exe ao abrir links do tipo "spotify:user:spotify:playlist:848218482355482821").
- Implementado a extração de dados EDID (Extended Display Identification Data) com informações sobre os parâmetros do monitor conectado, como nome e modelo do dispositivo.
- Foi possibilitada a possibilidade de fechar a janela da área de trabalho, expandida em modo de tela cheia, usando o botão "Sair do desktop" no menu "Iniciar".
- Internacionalização
- Suporte a IME (Input Method Editors) foi expandido. Trabalhou-se para garantir compatibilidade com implementações nativas do Windows de IME e melhorar a integração com Linux IME.
- Foi gerada uma base de dados de localidades no formato locale.nls a partir da base de dados Unicode CLDR (Unicode Common Locale Data Repository) versão 44. Adicionado suporte a localidades adicionais bew-ID, blo-BJ, csw-CA, ie-EE, mic-CA, prg-PL, skr-PK, tyv-RU, vmw-MZ, xnr-IN e za-CN.
- Foi realizado a tradução da interface para o idioma georgiano. Foram fornecidas traduções completas para 16 idiomas, e parciais para 31 idiomas.
- As tabelas de símbolos Unicode foram atualizadas para a versão 15.1.0 do padrão. A base de dados de fusos horários foi atualizada.
- Núcleo (interfaces do núcleo Windows)
- Definido como versão padrão do Windows, o Windows 10.
- Para arquivos executáveis no formato PE, foi implementado suporte para randomização do espaço de endereçamento (ASLR), mas os endereços de carregamento do código na memória ainda não estão completamente randomizados.
- Implementado suporte para a pilha pouco fragmentada (LFH, Low Fragmentation Heap), permitindo aumentar o desempenho nas operações de alocação de memória.
- O mecanismo de alocação de memória virtual adicionou suporte para reserva de memória (placeholder), permitindo que o aplicativo reserve uma determinada área de memória virtual para uso futuro.
- Carregadores de 64 bits (loader e preloader) de arquivos executáveis e bibliotecas foram compilados no formato PIE (Position-Independent Executables) para liberar parte do espaço de endereçamento de 32 bits.
- Foi garantido o desenrolar correto da pilha (stack unwinding) para chamadas de sistema NT e chamadas de retorno do usuário.
- Capacidades de rede
- No motor MSHTML, foi implementado suporte ao mecanismo de coleta de lixo "Cycle Collection".
- O MSHTML adicionou suporte ao modo de processamento síncrono para requisições XMLHttpRequest.
- A jscript.dll agora oferece suporte ao objeto WeakMap para trabalhar com coleções de pares chave/valor, onde a chave é um objeto que pode ter um valor associado. Implementados os métodos WeakMap.get(), WeakMap.delete(), WeakMap.clear() e WeakMap.has().
- O motor do navegador Gecko foi atualizado para a versão 2.47.4.
- Adicionado suporte para notificações de alteração de estado da interface de rede.
- Criptografia e segurança
- A biblioteca Winscard.dll agora suporta cartões inteligentes, implementada através da biblioteca do sistema PCSClite.
- O BCrypt foi atualizado para incluir suporte ao protocolo de troca de chaves Diffie-Hellman.
- Pacote Negotiate implementado, fornecendo uma camada para o uso da interface SSPI (Security Support Provider Interface) para acessar provedores SSP (Security Support Provider).
- Aplicativos Embutidos
- No depurador Wine Debugger (winedbg), a biblioteca Zydis foi utilizada para a desmontagem de instruções de máquina X86.
- A interface WineCfg agora inclui a opção de definir versões antigas do Windows (até XP) em plataformas de 64 bits, permitindo a execução de aplicativos legados usando o modo WoW64.
- Todos os aplicativos gráficos integrados agora mostram informações de erro em um diálogo separado, em vez de exibi-las no console.
- O programa systeminfo agora exibe informações do banco de dados WMI (Windows Management Instrumentation).
- Adicionado o aplicativo klist para exibir tickets Kerberos.
- O aplicativo taskkill agora permite forçar a finalização de processos filhos.
- A ferramenta start agora inclui o parâmetro “/machine” para selecionar a arquitetura usada ao iniciar arquivos executáveis híbridos que suportam x86 e ARM.
- A maior parte da funcionalidade do programa tasklist foi implementada.
- Adicionada uma implementação básica do aplicativo findstr.
- Ferramentas para Desenvolvimento
- A ferramenta WineDump agora pode exibir o conteúdo de arquivos de registro do Windows (formato REGF) e mostrar dados para todas as arquiteturas (x86/ARM64) suportadas em arquivos PE híbridos.
- O compilador IDL agora suporta os atributos 'composable', 'default_overload', 'deprecated' e 'protected'.
- A biblioteca libwine.so foi removida, pois foi declarada obsoleta na versão do Wine 6.0 e não tem sido utilizada no Wine. Programas no formato ELF compilados em versões antigas do Wine (5.0 ou anteriores) com libwine.so requerem recompilação para serem executados no Wine 9.0.
- Bibliotecas integradas e dependências externas
- O conjunto integra as bibliotecas FluidSynth 2.3.3, Musl 1.2.3 (apenas funções matemáticas) e Zydis 4.0.0.
- Os componentes 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 e Zlib 1.3 foram atualizados para novas versões. O mecanismo Wine Mono com implementação da plataforma .NET foi atualizado para a versão 8.1.0.
- No driver winewayland.drv, a biblioteca cliente Wayland, assim como as bibliotecas xkbcommon e xkbregistry, são utilizadas como dependências externas.
- Para suporte a cartões inteligentes, é utilizada a biblioteca externa PCSClite (no macOS — PCSC).
- Agora, para compilar arquivos PE em plataformas diferentes de i386, é necessário ter um compilador cruzado que suporte diretivas '.seh' para tratamento de exceções.
Fonte: opennet.ru
