Após um ano de desenvolvimento e 25 versões experimentais, foi lançado o versão estável da implementação aberta da API Win32 — Wine 11.0, que incorpora mais de 6300 alterações e 600 correções de bugs. Entre as principais conquistas desta nova versão, destacam-se o suporte total ao NTSYNC, a implementação do mecanismo Reparse Point e a ativação de uma nova arquitetura WoW64.
No Wine, é confirmada a funcionalidade completa de 5419 programas para Windows (ano passado 5372, dois anos atrás 5336, três anos atrás 5266), além de outros 4500 programas (ano passado 4435, dois anos atrás 4397, três anos atrás 4370) que funcionam bem com configurações adicionais e DLLs externas. Com 4086 programas (ano passado 4020, dois anos atrás 3943, três anos atrás 3888), observam-se pequenos problemas de funcionamento que não impedem o uso das funções principais dos aplicativos.
Novidades principais do Wine 11.0:
- Suporte total ao driver ntsync, que permite aumentar significativamente o desempenho de jogos para Windows executados através do Wine. O driver faz parte do núcleo Linux a partir da versão 6.14 e implementa o dispositivo simbólico /dev/ntsync e um conjunto de primitivas de sincronização usadas no núcleo do Windows NT. Um aumento significativo no desempenho é alcançado pela eliminação da sobrecarga associada ao uso de RPC no espaço do usuário.
- Adicionada a possibilidade de configurar prioridades de threads no Linux e macOS.
- Na ntdll, foi adicionado o API de sincronização "Synchronization barriers", que permite pausar a execução de várias threads até que um determinado ponto de execução seja alcançado em todas as threads (por exemplo, aguardar que todas as threads atinjam um determinado estágio ao executar o mesmo código em paralelo).
- A nova implementação da camada WoW64 (Windows-on-Windows de 64 bits), que permite executar aplicativos de 32 bits em sistemas Unix de 64 bits, foi classificada como totalmente suportada. Ao contrário da antiga implementação do WoW64, na qual aplicativos de 32 bits eram executados em processos Unix de 32 bits, o novo WoW64 garante a execução do código de 32 bits dentro de um processo de 64 bits. Implementado o suporte para executar aplicativos de 16 bits no modo WoW64.
Em todos os módulos que acessam bibliotecas Unix, são usados conversores de chamadas de sistema WoW64 (thunk), permitindo que módulos de 32 bits no formato PE acessem bibliotecas Unix de 64 bits. Foi adicionada a possibilidade de executar instalações antigas WoW64 em um novo modo através da definição da variável de ambiente "WINEARCH=wow64". Prefixos de 32 bits criados ao definir WINEARCH=win32 foram declarados obsoletos e não são mais suportados no novo modo WoW64. O carregador separado wine64 foi removido, sendo substituído por um carregador universal que determina o modo com base na arquitetura do arquivo executável.
- Núcleo (interfaces do núcleo Windows)
- Foi implementado o mecanismo Reparse Point, que permite anexar dados extras a arquivos e diretórios, identificáveis por meio de tags. Suportam-se os tipos de Reparse Point, como links simbólicos e pontos de montagem.
- Para melhorar o desempenho do rastreamento de operações de gravação na memória, foi utilizado o mecanismo UFFD (userfaultfd), que permite criar manipuladores para acessos a páginas de memória não alocadas (page faults) no espaço do usuário. Nos testes realizados, a aplicação do UFFD reduziu o tempo de carregamento de níveis no jogo "Streets of Rage 4" de 6-8 segundos para 1,5-2 segundos, correspondendo aos tempos de inicialização na plataforma Windows.
- Estão sendo utilizados os números de chamadas de sistema NT, idênticos às últimas versões do Windows, o que é necessário para suportar aplicativos que utilizam números de chamadas de sistema fixos.
- Em sistemas ARM64, foi implementada a possibilidade de simular páginas de memória de 4K em ambientes com núcleos Linux que utilizam páginas de memória maiores (16K ou 64K). A simulação permite a execução de aplicativos simples, e para programas mais complexos, recomenda-se usar núcleos Linux com páginas de memória de 4 kilobytes.
- Subsistema gráfico
- Em sistemas X11 (winex11), para OpenGL, o backend de renderização que utiliza EGL é utilizado por padrão. O backend GLX foi declarado obsoleto, mas ainda está disponível como uma opção de fallback e é usado na ausência do EGL.
- Foi adicionada a suporte inicial para objetos D3DKMT, que oferecem acesso de baixo nível a dispositivos gráficos a partir do espaço do usuário. As extensões Vulkan VK_KHR_external_memory_win32, VK_KHR_external_semaphore_win32, VK_KHR_external_fence_win32 e VK_KHR_win32_keyed_mutex foram implementadas.
- No modo WoW64 (Windows-on-Windows de 64 bits), foi implementado o suporte para o mapeamento de memória para OpenGL usando a API Vulkan, permitindo acelerar a execução de aplicativos OpenGL de 32 bits no Wine.
- Foi implementada a emulação do buffer de exibição (front buffer) para OpenGL em plataformas sem suporte embutido.
- No driver para a API gráfica Vulkan, foi adicionada a suporte para a especificação Vulkan 1.4.335.
- Na coleção de bibliotecas WindowsCodecs, foi ampliado o suporte a metadados em arquivos de imagem e implementado o suporte para a conversão entre formatos de cor inteiros e formatos com ponto flutuante.
- Foi removida a dependência da biblioteca OSMesa (Off-screen Mesa). Foi implementada a possibilidade de desenhar bitmaps via OpenGL usando o runtime OpenGL acelerado por hardware.
- Integração com a área de trabalho
- No driver winewayland.drv, que permite usar o Wine em ambientes baseados no protocolo Wayland sem a utilização do XWayland e componentes X11, foi implementado o suporte para a área de transferência, métodos de entrada, janelas não retangulares e transparência.
- A integração com o X11 foi aprimorada: agora são enviados ao gerenciador de janelas pedidos de ativação de janelas e o protocolo EWMH é utilizado para sincronizar o estado das janelas ativas entre X11 e Win32.
- Foi implementado o suporte ao modo de tela cheia exclusivo. O suporte ao modo de tela cheia em D3D foi melhorado, assim como o funcionamento de jogos antigos baseados em DDraw.
- A performance de algumas funções de manipulação de janelas foi aumentada. O compartilhamento de memória foi utilizado para interação entre processos.
- Direct3D
- No Direct3D 11, foi adicionado o suporte para aceleração de hardware na decodificação de vídeo no formato H.264, implementado através da API gráfica Vulkan.
- No Direct3D 11, foi implementado o suporte para filtragem minmax de texturas, utilizando a extensão OpenGL GL_ARB_texture_filter_minmax ou a extensão Vulkan VK_EXT_sampler_filter_minmax.
- No Direct3D 11, foram implementadas funções para carregar texturas.
- Uma série maior de funcionalidades do Direct3D foi implementada para renderização através do Vulkan, como mesclagem de vértices, sombreamento plano, planos de recorte personalizados e diferentes formatos de recursos.
- Na cópia incorporada do vkd3d-shader, foi melhorado o suporte para os modelos de sombreamento 1, 2 e 3.
- No método D3DXSaveSurfaceToFileInMemory, foi implementado o suporte para imagens PNG, JPEG e BMP.
- No Direct3D 10 e 11, foi implementado o suporte para compressão e descompressão dos formatos BC4 e BC5, bem como a geração de níveis MIP (MipMap) ao carregar texturas.
- Foram implementados os métodos ID3DXEffect::SetRawValue() e ID3DXSkinInfo::UpdateSkinnedMesh().
- Dispositivos de entrada
- A compatibilidade com controladores foi melhorada, utilizando o backend hidraw.
- Apoio aprimorado ao efeito de vibração (Force feedback) ao usar volantes e controladores.
- Melhor suporte para gamepads na API Windows.Gaming.Input e ao usar o backend evdev.
- Foi adicionada uma aba no app de controle de gamepads para configuração da API Windows.Gaming.Input.
- A compatibilidade do DirectInput com jogos antigos foi aumentada.
- Bluetooth
- No driver Bluetooth, foi adicionado suporte para escaneamento, configuração de detecção e emparelhamento de dispositivos.
- Foi adicionada a suporte para serviços Bluetooth Low Energy.
- Os aplicativos agora podem criar conexões RFCOMM de baixo nível com dispositivos externos, usando a API Winsock.
- Suporte a scanners.
- Implementado suporte à API TWAIN 2.0, permitindo acesso a scanners a partir de aplicativos de 64 bits.
- Suporte ao componente DAT_IMAGENATIVEXFER para transferir imagens de scanners para o aplicativo foi implementado.
- As configurações e o scanner selecionado foram salvos no registro.
- Adicionado suporte para digitalização de várias páginas e alimentadores automáticos de documentos.
- Eliminada a travagem dos aplicativos durante a chamada da interface de digitalização.
- Adicionado suporte para o download de drivers nativos do Windows para scanners.
- Internacionalização
- Foi garantida a geração da base de dados de localidades no formato locale.nls a partir da base de dados Unicode CLDR (Unicode Common Locale Data Repository) versão 48. Foram adicionados suporte para localidades adicionais 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 e suz-Sunu-NP.
- As tabelas de caracteres Unicode foram atualizadas para a versão do padrão 17.0.0. A base de dados de fusos horários foi atualizada.
- Capacidades de rede
- No motor MSHTML em modo compatibilidade, foi garantido o trabalho com atributos de elementos como nós DOM completos. Foram implementados objetos DOMParser, XDomainRequest e msCrypto.
- Adicionada suporte a arrays tipados no JavaScript.
- Para ICMPv6, o comando ping foi implementado.
- BD
- A biblioteca MSADO (ActiveX Data Objects) agora oferece suporte para gravação de alterações em banco de dados. A maioria das funções do objeto Recordset foi implementada.
- Na biblioteca odbc32, o suporte para drivers ANSI win32, que não foram feitos para trabalhar com Unicode, foi melhorado. Foram implementadas as funções SQLDriverConnectA(), SQLSpecialColumnsW(), SQLGetInfoW(), SQLGetInfoW(), SQLStatisticsW() e QLColumnsW().
- Aplicativos Embutidos
- Na WineCfg, uma aba para configurar o dispositivo MIDI padrão foi adicionada.
- No utilitário cmd foi implementada a autocompletação da entrada de nomes de arquivos em modo interativo, adicionada a suporte a instruções complexas e realizada a comando "mklink /j" para criar Reparse Point.
- No utilitário conhost (Console Hosting) foi adicionada a suporte para obter o histórico pressionando as teclas F1 e F3.
- Foram implementados os comandos timeout, runas e subst.
- No utilitário find foram adicionadas as opções "/c" para exibir o número de correspondências e "/i" para correspondências sem diferenciar maiúsculas de minúsculas.
- No utilitário whoami agora é possível configurar o formato da saída.
- Diversos
- Na implementação da linguagem de descrição de interface WIDL (Wine Interface Definition Language) foi adicionada a suporte para geração de metadados do Windows Runtime (WinRT). Foi garantida a geração e instalação de arquivos WinMD (Windows Metadata) para a API WinRT (Windows Runtime).
- No utilitário winedump foi adicionada a suporte para o despejo de recursos MUI, números de chamadas de sistema, módulos NE embutidos e grandes arquivos PDB (> 4 GB).
- Foi realizado um refatoramento na implementação do Common Control, a biblioteca COMCTL32 foi dividida em módulos separados para as versões 5 e 6.
- No BCrypt foi adicionada a suporte para o padrão de formação de chaves PBKDF2.
- Foi adicionada a suporte para os diretórios UserProgramFiles, AccountPictures e Screenshots.
- Foram integradas as bibliotecas LLVM Compiler-RT 8.0.1 e TomCrypt 1.18.2. Para determinar a CPU na plataforma FreeBSD, foi utilizada a biblioteca HwLoc.
- Os componentes foram atualizados para novas versões: 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.
Fonte: opennet.ru
