Efter et års udvikling og 30 eksperimentelle versioner præsenteres den stabile frigivelse af den åbne implementering af Win32 API — Wine 7.0, som har fået over 9100 ændringer. Blandt de vigtigste resultater af den nye version er overgangen af de fleste Wine-moduler til PE-format, understøttelse af temaer, udvidelse af stakken for joystick og inputenheder med HID-interface samt implementering af WoW64-arkitekturen til at køre 32-bit programmer i 64-bit miljø.
Wine bekræfter fuld funktionalitet for 5156 (mod tidligere 5049) Windows-programmer, og yderligere 4312 (mod tidligere 4227) programmer fungerer perfekt med ekstra konfigurationer og eksterne DLL'er. For 3813 programmer (mod tidligere 3703) observeres der små problemer, der ikke hindrer brugen af programmets kernefunktioner.
Nøglefunktioner i Wine 7.0:
- PE-formatmoduler
- Næsten alle DLL-biblioteker er blevet omdannet til at bruge PE-eksisterende filformat (Portable Executable, anvendt i Windows) i stedet for ELF. Brug af PE løser problemer med understøttelse af forskellige kopibeskyttelsesmetoder, der verificerer identiteten af systemmoduler på disken og i hukommelsen.
- Muligheden for interaktion af PE-moduler med Unix-biblioteker via standard systemopkald i NT-kernen er blevet implementeret, hvilket skjuler adgangen til Unix-kode for Windows-debuggere og muliggør registrering af tråde.
- Indbyggede DLL'er indlæses nu kun, når der findes den korrekte PE-fil på disken, uanset om det er ægte bibliotek eller stub. Denne ændring sikrer, at applikationen altid ser den rigtige binding til PE-filer. For at deaktivere denne adfærd kan miljøvariablen WINEBOOTSTRAPMODE anvendes.
- WoW64
- WoW64-arkitekturen (64-bit Windows-on-Windows) er blevet implementeret, hvilket muliggør kørsel af 32-bit Windows-applikationer i 64-bit Unix-processer. Understøttelsen er realiseret gennem en lag, der oversætter 32-bit NT-systemopkald til 64-bit opkald til NTDLL.
- WoW64-lagsystemet er forberedt til de fleste Unix-biblioteker og gør det muligt for 32-bit PE-moduler at tilgå 64-bit Unix-biblioteker. Når alle modulerne er oversat til PE-format, vil det være muligt at køre 32-bit Windows-applikationer uden at installere 32-bit Unix-biblioteker.
- Designtemaer
- Der er implementeret support for designtemaer. Inkluderet er temaerne "Light", "Blue" og "Classic Blue", som kan vælges via konfigurationsprogrammet WineCfg.
- Muligheden for at tilpasse udseendet af alle interface kontrolelementer via designtemaer er tilføjet. Der er sikret automatisk opdatering af elementers udseende efter ændring af designtema.
- Alle indbyggede applikationer i Wine har fået støtte for designtemaer. Applikationerne er blevet tilpasset skærme med høj pixel tæthed (High DPI).
- Grafikunderstøttelse
- Der er tilføjet et nyt bibliotek Win32u, som indeholder dele af bibliotekerne GDI32 og USER32 relateret til grafikbehandling og vindueshåndtering på kerne niveau. I fremtiden vil der blive arbejdet på at flytte komponenter fra drivere som winex11.drv og winemac.drv til Win32u.
- I Vulkan-driveren er støtte for grafik API-specifikationen Vulkan 1.2.201 implementeret.
- Support for output via Direct2D API til stregerede geometriske objekter er givet, med mulighed for at kontrollere klik (hit-test).
- I Direct2D API er der tilføjet indledende support for visuelle effekter anvendt gennem ID2D1Effect interface.
- Direct2D API har fået tilføjet støtte til ID2D1MultiThread interface, som anvendes til at organisere eksklusiv adgang til ressourcer i multitrådede applikationer.
- I WindowsCodecs-bibliotekerne er der implementeret support til dekodning af billeder i WMP-format (Windows Media Photo) og kodning af billeder i DDS-format (DirectDraw Surface). Støtten for kodning af billeder i ICNS-format (til macOS), som ikke understøttes i Windows, er blevet droppet.
- Direct3D
- Den nye rendering-motor er betydeligt forbedret og oversætter Direct3D-kald til grafik API Vulkan. I de fleste situationer er niveauet for støtte til Direct3D 10 og 11 i Vulkan-baserede motorer blevet bragt til paritet med den gamle OpenGL-baserede motor. For at aktivere rendering-motoren via Vulkan skal registreringsvariablen Direct3D "renderer" indstilles til værdien "vulkan".
- Flere funktioner fra Direct3D 10 og 11 er blevet implementeret, herunder deferred contexts, der arbejder i konteksten af enhedens tilstandsobjekter, konstante offset offsets i buffere, rydning af uordnede repræsentationer af teksturer, samt kopiering af data mellem ressourcer i typeløse formater (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) osv.
- Der er tilføjet support til flermonitor-konfigurationer, som gør det muligt at vælge en skærm til at vise Direct3D-applikationen i fuldskærmstilstand.
- I DXGI API'et er der implementeret en funktion til gamma-korrektion af skærmen, som kan anvendes af applikationer baseret på Direct3D 10 og 11 til at ændre skærmens lysstyrke. Der er mulighed for at hente tællere for virtuelle framebuffer (SwapChain).
- I Direct3D 12 er der tilføjet support for root-signaturer version 1.1.
- I tegnekoden via Vulkan API'et er effektiviteten af forespørgselsbehandling forbedret, når systemet understøtter udvidelsen VK_EXT_host_query_reset.
- Der er tilføjet mulighed for output af virtuelle framebuffer (SwapChain) gennem GDI, hvis OpenGL eller Vulkan ikke kan anvendes til visning, for eksempel ved output i et vindue fra forskellige processer, såsom i applikationer baseret på CEF (Chromium Embedded Framework).
- Ved brug af backend til GLSL-shaders er det sikret, at modificatoren 'precise' anvendes til shader-instruktioner.
- I DirectDraw API'et er der tilføjet support til 3D-rendering i systemhukommelse ved hjælp af softwareenheder som 'RGB', 'MMX' og 'Ramp'.
- AMD Radeon RX 5500M, AMD Radeon RX 6800/6800 XT/6900 XT, AMD Van Gogh, Intel UHD Graphics 630 og NVIDIA GT 1030 er blevet tilføjet til grafikkortdatabasen for Direct3D.
- Nøglen 'UseGLSL' er blevet fjernet fra registreringsdatabasen HKEY_CURRENT_USER\Software\Wine\Direct3D, og fra Wine 5.0 skal 'shader_backend' bruges i stedet.
- For at understøtte Direct3D 12 er det nu nødvendigt at have vkd3d-biblioteket i version 1.2 eller nyere.
- D3DX
- I D3DX 10-implementeringen er understøttelsen af rammeværket for visuelle effekter forbedret, og der er tilføjet support til billedformatet Windows Media Photo (JPEG XR).
- D3DX10-funktioner til at oprette teksturer, såsom D3DX10CreateTextureFromMemory(), er blevet tilføjet.
- Programmeringsgrænsefladerne ID3DX10Sprite og ID3DX10Font er delvist implementeret.
- Lyd og video
- GStreamer-udvidelserne til DirectShow og Media Foundation er blevet samlet i en fælles backend kaldet WineGStreamer, hvilket forventes at forenkle udviklingen af nye API'er til indholdsdecodering.
- Der er implementeret Windows Media-objekter til synkront og asynkront læsning baseret på WineGStreamer-backend'en.
- Udviklingen af Media Foundation-implementeringen er fortsat, med tilføjelse af funktionaliteten IMFPMediaPlayer, en sample allocator, forbedret EVR-support og SAR-renderingsbuffere.
- Biblioteket wineqtdecoder, der gav en decoder til QuickTime-formatet (nu bruges GStreamer til alle codecs), er blevet fjernet.
- Input-enheder
- Stakken til inputenheder, der understøtter HID-protokollen (Human Interface Devices), er betydeligt forbedret, hvilket inkluderer funktioner som parsing af HID-deskriptorer, behandling af HID-beskeder og levering af mini-drivere til HID.
- Oversættelsen af enhedsbeskrivelser til HID-beskeder er forbedret i backends for driveren winebus.sys.
- En ny backend til DirectInput for joysticks, der understøtter HID-protokollen, er blevet tilføjet. Muligheden for at bruge feedback-effekter i joysticks er implementeret. Forbedret kontrolpanelet interaktionen med joysticks. Interaktionen med enheder, der er kompatible med XInput, er optimeret. I WinMM er understøttelsen af joysticks flyttet til DInput, i stedet for at bruge evdev backend i Linux og IOHID i macOS. Den gamle joystick-driver winejoystick.drv er blevet fjernet.
- I DInput-modulet er der tilføjet nye tests baseret på brugen af virtuelle HID-enheder, som ikke kræver, at et fysisk apparat er til stede.
- Tekst og skrifttyper
- Et Font Set-objekt er blevet tilføjet i DirectWrite.
- TextHost-interfacet er korrekt implementeret i RichEdit.
- Kernen (Windows kernel interfaces)
- Når en ukendt eksekverbar fil startes i Wine (f.eks. 'wine foo.msi'), kaldes start.exe nu, som kalder håndtererne relateret til filtypen.
- Understøttelse af synkroniseringsmekanismerne NtAlertThreadByThreadId og NtWaitForAlertByThreadId, der er tilnærmelsesvis tilsvarende futexer i Linux, er tilføjet.
- Understøttelse af NT-debbuggingsobjekter, anvendt til at debugge kernefunktioner, er blevet tilføjet.
- Understøttelse af dynamiske registreringsnøgler til opbevaring af præstationsdata er blevet tilføjet.
- C Runtime
- I C runtime er der implementeret et komplet sæt matematiske funktioner, som hovedsageligt er overført fra Musl-biblioteket.
- Korrekt understøttelse af funktioner til beregninger med flydende komma er sikret for alle CPU-platforme.
- Netværksfunktioner
- Kompatibilitetsmodus med Internet Explorer 11 (IE11) er forbedret og bruges nu som standard til behandling af HTML-dokumenter.
- JavaScript-tilstand ES6 (ECMAScript 2015) er blevet implementeret i mshtml-biblioteket, hvilket sikrer understøttelse af funktioner som let-udtryk og Map-objektet.
- Installation af Wine MSI-pakker med tilføjelser til Gecko-motoren i arbejdsbiblioteket udføres nu efter behov, ikke under opdatering af Wine.
- Support for DTLS-protokollen er tilføjet.
- Servicen NSI (Network Store Interface) er blevet implementeret, som opbevarer og videregiver oplysninger om routing og netværksinterfaces på computeren til andre tjenester.
- API-håndterere som WinSock, såsom setsockopt og getsockopt, er blevet flyttet til NTDLL-biblioteket og afd.sys-driveren for at overholde Windows-arkitekturen.
- Nu oprettes Wine-arbejdskataloget med egne filer til netværksdatabaser, såsom /etc/protocols og /etc/networks, i stedet for at henvise til tilsvarende Unix-databaser.
- Alternativt Platforme
- Understøttelse af Apple-hardware baseret på ARM-chips M1 (Apple Silicon) er blevet tilføjet.
- For at understøtte funktioner fra BCrypt og Secur32 kræves installation af GnuTLS-biblioteket på macOS-platformen.
- 32-bit eksekverbare filer til ARM-platforme bliver nu samlet i Thumb-2-tilstand, ligesom på Windows. Preloaderen anvendes til indlæsning af sådanne filer.
- Understøttelse af exception unwinding er implementeret for 32-bit ARM-platforme.
- Antallet af understøttede forespørgsler om lavniveau systeminformation, såsom hukommelsesstatus og batteriniveau, er udvidet for FreeBSD.
- Indbyggede applikationer og udviklingsværktøjer
- reg.exe-værktøjet har fået støtte til 32- og 64-bit repræsentationer af registreringsdatabasen. Understøttelse af kopiering af registreringsnøgler er også blevet tilføjet.
- WineDump-værktøjet har fået mulighed for at udskrive dump af Windows-metad data og vise detaljeret information om CodeView-poster.
- Wine Debugger (winedbg) muliggør nu debugging af 32-bit processer fra en 64-bit debugger.
- IDL-kompilereren (widl) har fået mulighed for at indlæse biblioteker indlejret i PE-filer, understøttelse af specifikke WinRT-attributter og konstruktioner, samt mulighed for at søge efter biblioteker baseret på platform.
- Bygningssystem
- I platformsspecifikke biblioteksmapper gemmes biblioteker nu med navne, der afspejler arkitektur og type af eksekverbare filer, for eksempel 'i386-windows' for PE-formatet og 'x86_64-unix' for unix-biblioteker, hvilket muliggør understøttelse af forskellige arkitekturer i én installation af Wine og sikrer kryds-kompilering af Winelib.
- For at indstille PE-filer med en mulighed der styrer overgangen til brugen af native DLL-biblioteker, er der tilføjet flaget '--prefer-native option' i winebuild (behandling af DLL_WINE_PREATTACH i DllMain er stoppet).
- Understøttelse af version 4 af Dwarf-debuggedataformatet, som nu bruges som standard ved opbygning af Wine-biblioteker, er blevet tilføjet.
- Tilføjet en kompileringsmulighed ‘—enable-build-id’ for at gemme unikke byg-ID'er i de eksekverbare filer.
- Tilføjet støtte til at bruge Clang-kompilatoren i MSVC-kompatibilitetsmode.
- Diverse
- Navngivning af standardmapper i brugergrænsefladen (Windows Shell) er tilpasset det schema, der anvendes siden Windows Vista, dvs. i stedet for ‘My Documents’ oprettes nu mappen ‘Documents’, og størstedelen af dataene gemmes i mappen ‘AppData’.
- Der er tilføjet støtte til OpenCL 1.2-specifikationen i lagringen for OpenCL-biblioteket.
- WinSpool-driveren har fået tilføjet støtte til forskellige varianter af papirstørrelser ved udskrivning.
- Der er tilføjet indledende støtte til MSDASQL, Microsoft OLE DB-udbyderen for ODBC-drivere.
- Wine Mono-motoren, der implementerer .NET-platformen, er opdateret til version 7.0.0.
- Unicode-dataene er opdateret til Unicode 14-specifikationen.
- Følgende biblioteker er indbygget i kildekodedræet: Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt og Zlib, som compiles i PE-format og ikke kræver en Unix-version. Disse biblioteker kan også importeres fra systemet til brug for eksterne builds i stedet for de indbyggede PE-versioner.
Kilde: opennet.ru
