Wine

**Wine** on avoimen lähdekoodin sovellus, jonka tarkoituksena on mahdollistaa Microsoft Windowsille kirjoitettujen ohjelmien käyttäminen Unixin kaltaisissa käyttöjärjestelmissä. Wineen kuuluu myös Winelib-ohjelmakirjasto, jonka avulla kehittäjät voivat kääntää Windows-ohjelmia auttaakseen niiden porttaamista (muuntamista) Unixin kaltaisille käyttöjärjestelmille. Vaikka nimestä näkee joskus käytettävän muotoja *WINE* ja *wine*, projektin kehittäjät ovat ilmoittaneet virallisen muodon olevan *Wine*.

Wine ei ole emulaattori vaan yhteensopivuuskerros, joka toteuttaa Windows API:n. Wine-projektissa on vaihtoehtoiset toteutukset Windows-ohjelmien käyttämistä DLL-kirjastoista ja prosessi joka korvaa Windows NT:n ytimen. Koska Wine ei ole emulaattori, sillä voi ajaa tavallisia x86/x86-64-arkkitehtuurille tehtyjä Windows-ohjelmia ainoastaan tietokoneessa, jossa on vastaava yhteensopiva prosessori. Wine ei myöskään ole tietoturvaan käytettävä "hiekkalaatikko".

Tekijänoikeusongelmien välttämiseksi Wine kirjoitetaan enimmäkseen mustan laatikon testausta hyväksi käyttäen. Menetelmässä toteutus tehdään julkisesti saatavan dokumentaation mukaan, jonka jälkeen tehdään testitapaukset varmistamaan sen paikkansapitävyys: useissa tapauksissa MSDN:n dokumentaatio on hyvin virheellistä.

Nimi *Wine* oli alun perin akronyymi sanoista **WIN**dows **E**mulator, mutta se muuttui myöhemmin rekursiiviseksi akronyymiksi **W**ine **I**s **N**ot an **E**mulator''.

## Kehitys

Wine-projekti alkoi kesäkuussa 1993 Sun Microsystemsin esittelemän Wabin inspiroimana. Varhaisia kehittäjiä olivat Bob Amstad, Eric Youngdale, Alexandre Julliard ja Miguel de Icaza. Alun perin se oli tarkoitettu ajamaan 16-bittisiä Windows 3.x -ohjelmia, mutta nykyään painopiste on Win32 APIssa ja 32-bittisissä Windows-ohjelmissa.
64-bittisten ohjelmien tuesta ilmoitettiin joulukuussa 2008.
Alexandre Julliard on ollut projektin johtaja vuodesta 1994.

Sen sijaan, että Wine olisi täysi emulaattori, se tarjoaa yhteensopivuuskerroksen, joka sisältää vaihtoehtoisia toteutuksia normaaleille Windows-ohjelmien kutsuille.

Koska x86-64 ABI eroaa Windowsissa ja muissa käyttöjärjestelmissä Wine käsittelee kutsukäytäntöjen erot. Esimerkiksi `long` datatyyppi on Windowsissa 32-bittiä ja useilla muilla alustoilla 64-bittiä x86-64:ssä. Myös rekisterien käytössä parametrien välityksessä on eroja.

Wineä kehitetään pääsääntöisesti Linuxille, mutta myös FreeBSD ja Solaris ovat tuettuja.

Projekti on ollut aikaa vievää ja vaikeaa kehittäjille, ainakin keskeneräisen, puutteellisen tai väärän Win32 API:n dokumentaation takia. Vaikka useimmat Win32:n funktiot on dokumentoitu, joillekin osa-alueille kuten tiedostomuodoille ja protokollille ei ole virallisia Microsoftin määrittelyitä. Lisäksi Windows-APIssa on useita Microsoftin tekemiä ohjelmien yhteensopivuuskorjauksia, joita ei ole dokumentoitu missään.

Vasta 25. lokakuuta 2005, yli 12&nbsp;vuoden kehityksen jälkeen, Winestä julkaistiin ensimmäinen varsinainen beetaversio versionumeroltaan 0.9. Tämän jälkeen uusia beetaversioita julkaistiin noin kahden viikon välein yli kahden ja puolen vuoden ajan. Versio 1.0 julkaistiin lopulta 17. kesäkuuta 2008 15&nbsp;vuoden kehitystyön tuloksena.

Versiossa 1.4 lisättiin tuki GStreamer-kehykselle, jonka avulla Wine toistaa videokuvaa ja ääntä. Samalla äänirajapintojen käsittely on suunniteltu uudelleen. Gecko-pohjaiseen selainmoottoriin lisättiin ActiveX-tuki.

Wine 2.0 julkaistiin 24. tammikuuta 2017 ja Wine 3.0 julkaistiin 18.&nbsp;tammikuuta 2018. Wine 2.0 ja 3.0 muutoksiin kuuluu tuen lisääminen Direct3D -versioille 10 ja 11.

Wine 4.0 julkaistiin 22. tammikuuta 2019. Versiossa 4.0 mukaan tulivat Vulkan-tuki, Direct3D 12 vkd3d-kirjaston avulla, sekä peliohjainten tuki SDL-kirjaston kautta. DOS-ohjelmien tuki on poistettu ja siirrytty käyttämään DOSBoxia, mutta 16-bittisten Win16-ohjelmien tuki on vielä mukana. Versiossa 4.3 XAudio2-rajapinnan tuki on uusiksi kirjoitettu käyttämällä FAudio-kirjastoa.

Versio 5.0 on julkaistu 21.&nbsp;tammikuuta 2020. Winen versiossa 5.0 on noin 5,7&nbsp;miljoonaa lähdekoodiriviä.

Wine 7.0 julkaistu tammikuussa 2022. Versiossa 7.0 on tuki WOW64:lle, jolloin 32-bittisiä Windows-sovelluksia voi ajaa 64-bittisessä Unix-prosessissa. Portable Executable (PE) tuella 32-bittisiä Windows-sovelluksia voi käyttää ilman tarvetta 32-bittisille Unix-kirjastoille. PE- ja Unix-osien välinen rajapinta myös piilottaa Unix-osion Windows-debuggereilta. Versiossa on kehitystä myös grafiikan ja ikkunointijärjestelmän tukemiseen, Windows Media Foundationin (WMF) tukea ja useita muita muutoksia.

Wine 8.0 on julkaistu tammikuussa 2023. Versiossa 8.0 on saatu valmiiksi neljä vuotta aikaisemmin aloitettu muunnos PE-moduuleihin. WoW64 thunk-kutsut ovat olemassa useimmille Unix-kirjastoille.

Wayland-tuen yhdistäminen on aloitettu vuonna 2023 versiossa 8.4. Wayland-tuen kehittämisestä kertoi Collabora vuonna 2020.

Versio 9.0 on julkaistu tammikuussa 2024. Uusi WoW64-moodi on mukana, mutta ei vielä käytössä oletuksena. Wayland-tuki on vielä kokeellisessa muodossa mukana ja kehitystyö jatkuu. PE/Unix-muotojen erottamisen myötä Windowsille tehtyjä binääritiedostoja voi suorittaa ARM64-alustalla.

Versio 10.0 on julkaistu tammikuussa 2025. Uusina ominaisuuksina FFmpeg-kirjastoa voi käyttää Gstreamerin sijaan, x86-suorittimen emulaatiorajapinta on lisätty ARM64-alustaa varten, sekä high-DPI-tuen parannukset. Wayland-tuki on mukana, mutta oletuksena on käytössä X11 mikäli molemmat ovat saatavilla.

Versio 11.0 on julkaistu tammikuussa 2026. Versiossa 9.0 lisätty WoW64-moodi on täysin tuettu ja tukee myös 16-bittisiä sovellusohjelmia. NTsync-moduulin tuki on mukana ja `userfaultfd` on käytössä Linux-alustalla. OSMesa-riippuvuus on poistettu ja OpenGL-bitmapien käsittely tukee laitteistokiihdytystä EGL:n kautta. Vulkan rajapinta on päivitetty versioon 1.4.335 ja mukana on Vulkan Video -tuki.

## Käyttö

Tavallinen käyttötapa on ajaa `wine`-komento ja antaa sille parametrina ajettavan ohjelman nimi:

```
wine program.exe
```

.. jossa program.exe on ajettava ohjelma.

Winen asetuksia voi muokata graafisella `winecfg`-ohjelmalla. Useat ohjelmat toimivat ilman erillistä konfigurointia.

Wineä voidaan käyttää säiliöissä kuten LXC-säiliöissä.

## Toimintaperiaate
Winen toimintaperiaate on muuttaa Windows-ohjelmien käyttämän Windows API -rajapinnan kutsut vastaaviksi, joita tietokoneen varsinainen käyttöjärjestelmä tarjoaa. Esimerkiksi Windowsin rajapinnan toiminto joka avaa ikkunan voidaan muuttaa kutsuksi Xlib-kirjastoon. Wine suorittaa ohjelmia ilman muunnosta toiselle käskykannalle.

"Wineserver" on Winen prosessi, joka toteuttaa useita Windowsin ytimen toimintoja kuten ikkunoinnin hallinnan, asynkronisen IO:n, prosessien ja säikeiden tilat, nimetyt putket ja niin edelleen. 

Kun ohjelma käynnistetään se yrittää lähettää käyttöjärjestelmälle tiettyjä viestejä kuten muistin varaamiseen ja ohjelman ajamiseen tarvittavia muuttujia. Koska alla oleva käyttöjärjestelmä ei ymmärrä ohjelman käyttämän Win32 API:n kutsuja on Winen tulkattava käytetyt kutsut käyttöjärjestelmän ymmärtämään muotoon. Windows-ohjelma taas ei ymmärrä käyttöjärjestelmän vastauksia joten Wine tulkkaa käyttöjärjestelmän vastaukset Windows-ohjelman ymmärtämään muotoon jolloin ohjelma pystyy toimimaan ikään kuin se ajettaisiin Windows-ympäristössä.

Direct3D-rajapinnan käyttö ohjataan Vulkan-rajapintaan WineD3D- tai vkd3d-toteutuksen kautta. Aiempi ohjaus OpenGL-rajapintaan on myös mahdollinen.
Vaihtoehtoinen tapa on käyttää DXVK-kirjastoa, joka käyttää epäyhteensopivaa lisenssiä eikä siten ole mukana Winessä.

Kehityksessä on Wayland-tuki, jolloin Windows GDI- ja OpenGL- sovelluksia voi suorittaa ilman, että käytössä on välikerros muuntamassa X11:lle ja XWaylandille.

## Microsoftin suhtautuminen Wineen

Microsoft ei ole ilmaissut varsinaista julkilausumaa liittyen Wineen. Microsoftin päivitystyökalu estää kuitenkin Microsoft-sovellusten päivittämisen Winen kautta. Wine-kehittäjä Ivan Leo Puoti huomasi 16. helmikuuta 2005 Microsoftin alkaneen estää osien päivittämisen, jos se havaitsee päivitysten yhteydessä Wineen viittaavia asetusavaimia Windowsin rekisteristä. Puoti kertoi, että näin ”Microsoft on ensimmäistä kertaa myöntänyt Winen olemassaolon.”

Windowsin aitoustarkastuskin tarkastaa, onko Wine-rekisteriavaimia olemassa. Windowsin aitoustarkastuksen usein kysytyissä kysymyksissä kerrotaan, että aitoustarkastus ei toimi Winessä, sillä Wine ei ole ”aito Windows”. Huomattuaan Wine-järjestelmän olevan käytössä aitoustarkastus kertoo käyttäjälle epäaidon Windowsin käytöstä, ja estää aitoustarkastusta vaativien ohjelmien lataamisen. Joistakin ohjelmistaan kuten Internet Explorer 7:stä ja Windows Media Playerista Microsoft on poistanut aitoustarkastuksen käytöstä helpottaen täten kyseisten sovellusten käyttöä Winessä.

Microsoft antaa aitoustarkastukseen liittyvissä kysymyksissä kuitenkin tietoa siitä, kuinka käyttäjä voi saada päivitykset useimpiin Microsoft-sovelluksiin Microsoftin verkkosivulta, vaikka käytössä on Wine:

Elokuussa 2024 Microsoft lahjoitti Winen kehittäjille Mono ohjelmistokehyksen, .NET Frameworkin uudelleentoteutuksen.

## Kehittäjät
Kehitykseen tullut tukea muun muassa CodeWeaversiltä ja Valve Corporationilta, sekä muuta kehitystä Collaboralta. Valve käyttää Wine-ohjelmistoa Proton-yhteensopivuusohjelmistossaan. CodeWeaversillä CrossOver-tuote, joka perustuu Wineen.

Aiemmin kehitystä ovat tukeneet Corel WordPerfect Officen siirtämistä varten ja Google Picasa-projektia varten.

## Lähteet

## Aiheesta muualla

*  
* Wine macOS:lle 
* Wine Freshcode-sivustolla 
* Wine Ohloh-sivustolla