KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma / Ohjelmistotekniikka Jussi Tuominen WINE-API SEKÄ VIRTUALISOINTIOHJELMISTOT Seminaarityö 2012
SISÄLLYS LYHENTEET JA TERMIT 1 JOHDANTO 6 2 VIRTUALISOINTI 6 2.1 Virtualisoinnin historiaa 7 2.2 Virtualisointityypit 8 2.2.1 Palvelinvirtualisointi 8 2.2.2 Tallennusvirtualisointi 9 2.2.3 Sovellusvirtualisointi 9 2.2.4 Työasemavirtualisointi, VDI 10 2.2.5 Verkkovirtualisointi 11 2.3 Virtualisointitekniikat 11 2.3.1 Täysvirtualisointi 12 2.3.2 Paravirtualisointi 12 2.3.3 Käyttöjärjestelmävirtualisointi 14 2.3.4 Natiivi virtualisointi 15 2.4 Emulointi 16 2.5 Virtualisoinnin edut ja ongelmat 16 3 WINE 17 3.1 Winen historiaa 18 3.2 Käyttöönotto ja toiminta 21 3.2.1 Asennus 21 3.2.2 Työkalut 23 3.2.3 Windows-ohjelmien asentaminen 24 3.2.4 Windows-ohjelmien ajaminen 25 3.2.5 Asetuksien määrittäminen 26 3.3 Ominaisuudet ja yhteisö 28 3.3.1 Winen hyödyt 31 3.3.2 Winen ongelmat 32
4 VIRTUALISOINTIOHJELMISTOJA 33 4.1 Xen 34 4.2 KVM 34 4.3 VMware 34 4.4 QEMU 35 4.5 VirtualBox 36 4.6 LXC 36 4.7 OpenVZ 36 4.8 Parallels Workstation 37 4.9 UML 37 4.10 Linux-VServer 37 4.11 Virtual Machine Manager 38 LÄHTEET 39 LIITTEET Liite 1. Virtualisointiohjelmistoja Linuxille
LYHENTEET JA TERMIT API (Application Programming Interface) Rajapinta, joka mahdollistaa erikoissovellusten ohjelmoimisen pohjalla olevaan ohjelmaan. API sisältää erilaisia käskyjä ja toimintoja, joilla lisälaitteet ja -ohjelmat saadaan toimimaan yhdestä ohjelmasta käsin. (Micro Aided Design Oy 2010.) Distribuutio Englannin kielen sanasta distribution tullut nimitys, joka tarkoittaa jakeluversiota. Se on vapaasti jaettavissa ja kehitettävissä oleva käyttöjärjestelmä, jota jokainen käyttäjä voi muokata ja jakaa eteenpäin. Distribuutio, tai tuttavallisemmin distro, on vakiintunut tarkoittamaan erityisesti Linuxin erilaisia jakeluversioita. Emulaattori Ohjelma, joka jäljittelee toista ohjelmaa tai laitetta. Sana emulaattori tulee latinan kielestä: aemulātor tarkoittaa sananmukaisesti kilpailijaa tai jäljittelijää. (Pulkkinen 2000.) Hypervisor Virtualisointialusta, joka on kerros käyttöjärjestelmän ja fyysisten resurssien välissä. Hypervisorin päällä voidaan ajaa yhtä tai useampaa virtuaalista käyttöjärjestelmää, jonka suoritinajasta se huolehtii. Jossain yhteyksissä hypervisorista on käytetty myös käsitettä VMM (Virtual Machine Monitor). POSIX (Portable Operating System Interface for unix) IEEE:n julkaisema, UNIX-pohjaisille käyttöjärjestelmille kehitettyjen standardien kokoelma. Standardeilla pyritään siihen, että kaikki kehityksen alla oleva koodi toimisi kaikissa POSIX-yhteensopivissa käyttöjärjestelmissä. POSIX sai alkunsa vuonna 1985, jolloin tavoitteena oli yhtenäistää UNIX-pohjaisia käyttöjärjestelmiä sekä käyttäjän että ohjelmoijan näkökulmasta. (Höök, Orola, Kosonen 2009.)
VDI (Virtual Desktop Infrastructure) Perinteisten työasemien virtualisointi. Virtuaalikone Ympäristö, joka näkyy toiselle käyttöjärjestelmälle erillisenä kokonaisena tietokoneena käyttöjärjestelmineen ja ohjelmineen. Käytännössä virtuaalikonetta simuloi isäntäjärjestelmässä (Host Operating System) suoritettava sovellus. Virtuaalikone näkyy sen päälle laitetulle käyttöjärjestelmälle aina samanlaisena riippumatta siitä, missä raudassa se pyörii. Kun virtuaalikone on kerran luotu johonkin, se voidaan siirtää toiseen tuettuun laitteistoympäristöön. Virtuaalikoneeseen asennettua käyttöjärjestelmää kutsutaan vieraskäyttöjärjestelmäksi (Guest Operating System).
6 1 JOHDANTO Tämä seminaarityö on osa Linux-järjestelmät -kurssia Kymenlaakson ammattikorkeakoulussa syksyllä 2012. Työn aiheena on Wine sekä muut virtualisointiohjelmistot Linux-ympäristöön. Omalla kohdallani virtualisointi on melko tuttu käsite, sillä olen sekä Windows- että Mac OS X -ympäristössä hyödyntänyt virtualisointia omassa työskentelyssäni. Käyttämiäni ohjelmistoja ovat VMware Fusion, VMware Workstation ja Parallels Desktop. Linux-maailma on jäänyt virtualisoinnin kannalta enemmän takaalalle. Itse olen sisäistänyt virtualisoinnin tarjoamat hyödyt siten, että käytettävissä olevalla alustalla on mahdollista ajaa yhteensopimattomia sovelluksia virtuaalisesti toisen käyttöjärjestelmän sisällä ilman isäntäjärjestelmän uudelleenkäynnistämistä. Tämäntyyppisiä sovelluksia voivat olla esimerkiksi joidenkin laitevalmistajien ohjelmistot, erilaiset lisäosat ja liitännäiset sekä pelit tai ohjelmistot, joista kehittäjä ei ole julkaissut kaikkiin käyttöjärjestelmäympäristöihin yhteensopivaa versiota. Virtualisointi mahdollistaa käyttöjärjestelmien ajamisen, opiskelun ja ominaisuuksien testaamisen ennen niiden mahdollista virallista käyttöä. Se voi olla esimerkiksi ohjelmistokehittäjille olennaisen tärkeä apuväline, jolla ohjelmien toimivuus voidaan varmistaa kohdelaitteessa tai käyttöjärjestelmäympäristössä. Tätä seminaarityötä tehdessä minulle valkeni, että virtualisointi on paljon muutakin. Nykyään sitä näyttäisi tapahtuvan miltei kaikkialla. Tässä seminaarityössä käyn ensin läpi virtualisointia yleisenä käsitteenä, kerron erilaisista virtualisointityypeistä ja -tekniikoista sekä virtualisoinnin hyödyistä ja ongelmista. Tämän jälkeen perehdyn tarkemmin itse Winen ominaisuuksiin ja sovelluksen käyttöön. Kerron myös Winen yhteisöstä, hyödyistä ja ongelmista. Työn lopussa esittelen lyhyesti muita Linuxille saatavilla olevia virtualisointiohjelmistoja. 2 VIRTUALISOINTI Virtualisoinnin määritelmiä on lukuisia. Erään määritelmän mukaan virtualisointi tarkoittaa jonkin näennäisen luomista. Käytännössä tämä tarkoittaa sitä, että luodaan jokin keinotekoinen asia, joka toimii ja näyttää luonnolliselta. Tietotekniikassa virtuali-
7 sointi voidaan käsittää menetelmänä, joka mahdollistaa yksittäisen fyysisen resurssin, kuten palvelimen, tallennuslaitteen, sovelluksen tai käyttöjärjestelmän, näyttäytymisen useina loogisina resursseina. Tämän myötä virtualisoitujen resurssien todelliset ominaisuudet eivät näy järjestelmille, sovelluksille tai loppukäyttäjille, jotka näitä resursseja käyttävät. Tämä voidaan suorittaa myös toisinpäin: monet fyysiset resurssit voidaan näyttää yhtenä loogisena resurssina. (Hiltunen 2010.) Virtualisoinnilla voidaan tarkoittaa myös ohjelmistopohjaista ratkaisua, jossa yhdellä fyysisellä laitteistolla suoritetaan yhtä aikaa virtuaalisesti yhtä tai useampaa käyttöjärjestelmää tai sovellusta. (Pitkänen 2008.) Virtualisointi voidaankin jakaa ohjelmistoja rautapohjaiseen virtualisointiin. 2.1 Virtualisoinnin historiaa Virtualisoinnin historia alkaa jo 1960-luvulta, jolloin suurten keskustietokoneiden laskentatehoa jaettiin käyttäjille ajamalla fyysisissä koneissa rinnakkain monia toisistaan eristettyjä virtuaalikoneita. Virtualisoinnin, joka silloin tunnettiin vielä nimellä osituskäyttö (time sharing), keksijänä pidetään Oxfordin yliopiston professoria Christopher Stracheyta (1916 1975). (Dittner, Rule 2007, 3.) Strachey loi niin sanotun moniajo-ohjelmoinnin (multi-programming), jossa toinen ohjelmoija pystyi samaan aikaan tekemään virheenkorjausta Stracheyn ohjelmoidessa toisaalla. Tämä ohjelmointimenetelmä oli perusta sen ajan tietoteknisille tehopakkauksille, supertietokoneille, joista kahta pidetään virtualisoinnin kehityksen virallisina alullepanijoina. Nämä kyseiset tietokoneet olivat The Atlas Computer ja IBM M44/44X, jonka arkkitehtuurin yhteydessä käytettiin ensimmäistä kertaa termiä virtuaalikone. Tällä tietokoneella pystyttiin ajamaan useita simuloituja virtuaalikoneita, jotka hyödynsivät isäntäkoneen laitteistoa, ohjelmistoja, muistia ja moniajoa. (Dittner, Rule 2007, 3.) Ensimmäinen kaupallisesti menestynyt virtualisointituote oli vuonna 1972 julkaistu IBM:n VM/370-käyttöjärjestelmä. Sen myötä virtualisointikerrosta kutsutaan edelleen VMM:n (Virtual Machine Monitor) sijasta nimellä hypervisor. 1980- ja 1990-lukujen aikana tietotekniikka koki suuria muutoksia ensin mini- ja tämän jälkeen mikrotieto-
8 koneiden yleistyessä. (Hämäläinen 2007.) Virtualisointi kehittyi koko ajan muun tietotekniikan mukana. 1990-luvun lopulle tultaessa IT-maailma oli kohdannut monia erilaisia virtualisointiin liittyviä hankkeita. Niistä osa oli kaatunut ja osa menestynyt. Vuosi 1999 toi tullessaan mullistavan muutoksen, kun VMware-yhtiö julkaisi ensimmäisen x86- prosessoreille tarkoitetun virtualisointialustan. Tämän tekniikan avulla voitiin samassa mikrotietokoneessa ajaa rinnakkain monia käyttöjärjestelmäinstansseja. (Hämäläinen 2007.) Monet suuret yritykset kuten Microsoft, Sun Microsystems ja VMware ovat julkaisseet omat virtualisointiohjelmistonsa, jotka ovat tänä päivänä sekä yritysmaailmassa että yksityishenkilöiden käytössä todella aktiivisessa käytössä. Virtualisointiohjelmistot kehittyvät jatkuvasti ja vain tulevaisuus voi näyttää, kuinka pitkälle virtualisoinnin tarjoamat mahdollisuudet voidaan viedä. 2.2 Virtualisointityypit Virtualisointi on suuressa suosiossa nykypäivänä ennen kaikkea palvelinkäytössä, mutta myös muu virtualisointi on kasvattanut koko ajan suosiotaan. Tärkeimpiä virtualisointiintyyppejä palvelinvirtualisoinnin lisäksi ovat tallennusvirtualisointi, sovellusvirtualisointi, työasemavirtualisointi ja verkkovirtualisointi. Seuraavaksi esittelen pintapuolisesti edellä mainittuja virtualisointityyppejä. 2.2.1 Palvelinvirtualisointi Palvelinvirtualisointi eli laitevirtualisointi on eräs eniten hyödynnettyjä virtualisointityyppejä. Sillä tarkoitetaan fyysisen palvelinjärjestelmän virtualisoimista siten, että fyysisen koneen laitteistoa hyödynnetään virtualisoimalla se loogisiksi resursseiksi. Palvelimen käyttöjärjestelmä eristetään laitteistosta virtuaalipalvelimeksi eli virtuaalikoneeksi. Laitteiston ja virtuaalikoneen välissä toimii virtualisointikerros, joka huolehtii resurssien jaosta virtuaalipalvelimille. Yhdessä fyysisessä laitteessa voidaan ajaa samanaikaisesti useita virtuaalipalvelimia. Ne eivät ole riippuvaisia toistensa ominaisuuksista vaan ne voivat sisältää omat käyttöjärjestelmänsä.
9 Virtualisointitekniikkana palvelimissa voidaan käyttää esimerkiksi täysvirtualisointia, natiivia virtualisointia tai käyttöjärjestelmätason virtualisointia. Palvelinvirtualisoinnissa käytettyjä ohjelmistoja ovat Microsoft Virtual Server, Hyper-V, Citrix XenServer ja VMware. (Hentunen 2012.) Palvelinvirtualisoinnin etuja ovat kustannuksien pieneneminen sekä vikojen sietokyvyn ja käyttöasteen parantaminen. Tämä johtuu siitä, että suurin osa kapasiteetista saadaan käyttöön ajamalla palvelinlaitteistossa useita virtuaalipalvelimia. Erityisesti yritysmaailmassa palvelinvirtualisointi on nykypäivänä arkipäivää. 2.2.2 Tallennusvirtualisointi Tallennusvirtualisointi on yksi vanhimmista ja samalla huomaamattomimmista virtualisointityypeistä. Sillä tarkoitetaan tallennuslaitteiden kokoamista virtualisointikerroksen taakse yhdeksi joustavaksi loogiseksi resurssiksi. Yksinkertaisimpia esimerkkejä tallennusvirtualisoinnista ovat jaetut kansiot palvelimella ja käyttäjän kotihakemisto verkossa. Laajemmat järjestelmät, kuten NAS (Network-attached Storage) eli verkkotallennus ja SAN (Storage Area Network) eli tallennusalueverkko, ovat nekin tallennusvirtualisointia hyödyntäviä tekniikoita. Tallennusvirtualisoinnin etuja ovat saatavilla olevan levytilan optimaalinen käyttö ja säästäminen. Tämän tekniikan yksi merkittävimmistä hyvistä puolista on se, että vain osa joustavan loogisen resurssin koosta voidaan ottaa käyttöön. Tämän myötä mahdollinen ylikapasiteetti pystytään arvioimaan tarkemmin. Tallennustilan muutos onnistuu lennosta häiritsemättä muita resursseja käyttäviä toimintoja. Fyysiset tallennusmediat voivat sijaita useissa eri paikoissa ja useilla eri laitteilla. Tämä pienentää tiedon menettämisen riskiä. 2.2.3 Sovellusvirtualisointi Sovellusvirtualisoinnilla tarkoitetaan menelmää, jossa sovellus irrotetaan käyttöjärjestelmästä ja toisista sovelluksista. Virtualisoidut sovellukset ovat omissa erillisissä paketeissaan, toimivat käyttöjärjestelmän alla ja käyttävät sen resursseja. Käyttöjärjestelmä ja sovelluskerros voidaan myös erottaa, jolloin sovellukset eivät syö työaseman resursseja. Sovelluspaketti sisältää kaikki sovelluksen asetukset, tiedostot,
10 rekisterit ja kirjastot. Sovellus toimii omassa virtuaalikerroksessaan, jota kutsutaan myös "kuplaksi" tai "hiekkalaatikoksi". Virtuaalikerroksen ansiosta sovellukset eivät saa aikaan merkittävää tuhoa käyttöjärjestelmässä, jos asiat menisivät jostain syystä pieleen. Sovellusvirtualisoinnin merkittävin hyöty on vanhojen sovellusten toimivuus uudemmissa Windows-käyttöjärjestelmissä. Toinen etu on se, että sovelluksia ei asenneta käyttöjärjestelmään. Tämä ehkäisee yhteensopivuusongelmia sekä ristiriitoja sovellusten välillä. Lisäksi sovellusvirtualisointi mahdollistaa usean saman sovelluksen version ajamisen samassa käyttöjärjestelmässä. Myös sovellusten päivittäminen ja jakelu nopeutuu ja helpottuu. (Paasi 2011.) Sovellusvirtualisoinnissa virtualisoituja sovelluksia voi ajaa miltä tahansa työasemalta, jossa on tarjolla pääsy Internetiin. Sovellusvirtualisoinnilla on kuitenkin myös omat haittapuolensa. Kaikkia sovelluksia ei ole kehitetty virtualisoitavaksi. Niitä ovat esimerkiksi tietokantasovellukset, laiteajureita tarvitsevat sovellukset ja kernel-tason komponentteja käyttävät sovellukset, kuten virustorjuntaohjelmat ja palomuurit. Useiden edellä mainittujen sovellusten suorituskyky heikkenee olennaisesti niitä virtualisoitaessa. (Paasi 2011.) 2.2.4 Työasemavirtualisointi, VDI Työasemavirtualisoinnissa (myös työpöytävirtualisointi-nimitystä käytetään) käyttäjillä on käytössään vähemmän tehokkaat työasemat, kuten esimerkiksi "kevyet" päätteet tai vanhemmat laitteet, jotka käyttävät palvelimella olevaa työasemakäyttöjärjestelmää sovellusohjelmistoineen. Tämä virtualisointityyppi on lähtöisin palvelinvirtualisoinnin tuomista hyödyistä: palvelinvirtualisoinnin hyödyt voidaan jalostaa myös työasemakäyttöön. Työasemat välitetään käyttäjien päätteille välityspalvelimen (connection broker) avulla. Se huolehtii yhteyksien luonnista, katkaistujen yhteyksien poistamisesta sekä virtuaalityöasemien luonnista, käynnistämisestä ja sammuttamisesta. (Varik 2010.) Koska varsinainen käytettävä käyttöjärjestelmä sijaitsee palvelimella, on sitä mahdollista käyttää missä ja millä tahansa laitteella, jossa on Internet-yhteys.
11 Virtuaalisten työasemien käyttö parantaa tietoturvaa ja helpottaa ylläpitotehtäviä, koska työasemat sijaitsevat keskitetyissä paikoissa. Tämän myötä myös paikallisen tuen tarve pienenee esimerkiksi yritysmaailmassa. Työasemavirtualisoinnin huonoja puolia ovat tunnetusti olleet multimedian hallitsemisen ongelmat ja virtuaalisen käyttöjärjestelmän offline-käyttö. Tänä päivänä näitä ongelmia on pyritty vähentämään uudemmilla tekniikoilla. 2.2.5 Verkkovirtualisointi Verkkovirtualisointi on uusi ilmiö. Sen periaatteena on, että yhdistetään laite- ja ohjelmistotason verkkoresursseja ja verkon toimintoja yhdeksi ohjelmallisesti hallittavaksi kokonaisuudeksi. Tietoverkon ollessa virtuaalinen ja joustava, verkkovirheet pienenevät ja tiedostot liikkuvat verkossa varmemmin. Uusien verkkojen luominen on nopeaa. Verkkojen hallinta käy yhden hallintokeskuksen kautta, vaikka ne olisikin hajautettu omiksi ulkoisiksi verkoiksi. Verkkovirtualisoinnin avulla useita fyysisiä verkkoja voidaan keskittää yhdeksi virtuaaliseksi verkoksi ja hallita yhtenä kokonaisuutena. Samalla tavalla yksi verkko voidaan eriyttää eri virtuaaliverkoiksi ja käyttää erillisten verkkojen tapaan. (Ekurssit.net.) Olennaisia verkkovirtualisointia hyödyntäviä tekniikoita ovat VLAN (Virtual Local Area Network) eli virtuaalinen lähiverkko ja VPN (Virtual Private Network) eli virtuaalinen erillisverkko. Verkon virtualisoinnissa on mahdollista käyttää myös virtuaalisia verkkolaitteita, kuten virtuaalikytkimiä ja verkkokortteja. 2.3 Virtualisointitekniikat Virtualisointitekniikoita on olemassa monenlaisia, mutta yleisimpinä niistä voidaan pitää täys-, para-, ja käyttöjärjestelmävirtualisointia. Täysvirtualisoinnissa pyritään virtualisoimaan suoraan fyysistä laitteistoa, eikä tiettyä käyttöjärjestelmää. Paravirtualisointi ja käyttöjärjestelmätason virtualisointi keskittyvät sitä vastoin virtualisoimaan käyttöjärjestelmiä. Seuraavaksi esittelen lyhyesti yleisimpiä virtualisointitekniikoita.
12 2.3.1 Täysvirtualisointi Täysvirtualisointi (Full Virtualization) edellyttää niin sanotun hypervisorin olemassaoloa. Tekniikassa virtualisointikohteena on suoraan laitteisto käyttöjärjestelmän sijasta. Hypervisor-kerroksen avulla vieraskäyttöjärjestelmä on täysin eristetty koneen fyysisistä resursseista. Se olettaa toimivansa itse suoraan näiden resurssien yläpuolella. Täysvirtualisoinnin suurin etu on nopeus ja hyvä yhteensopivuus isäntä- ja vieraskoneiden välillä, jolloin voidaan ajaa sekalaisia yhdistelmiä eri käyttöjärjestelmistä. Lisäksi täysvirtualisointi mahdollistaa virtuaalikoneiden täydellisen eristämisen toisistaan. Täysvirtualisointiin kykeneviä virtualisointiohjelmistoja ovat esimerkiksi VMware Fusion ja VMware Workstation, Parallels Desktop ja VirtualBox. Täysvirtualisointisovellus ei tarvitse esiasennettua käyttöjärjestelmää toimiakseen. Sen avulla saavutetaan isäntäkoneen prosessorien ja muistin hyödyntäminen lähes alkuperäisellä tehokkuudella. Lisäksi tällä tekniikalla on suurin käyttöjärjestelmien tuki: ne voidaan asentaa ilman ylimääräisiä lisäohjelmia. Täysvirtualisoinnin huonona puolena on jatkuva emuloinnin tarve ja hypervisor-kerroksen olemassaolo. Se vaatii tietokoneelta paljon resursseja. Kaikissa virtuaalikoneissa on lisäksi oltava oma käyttöjärjestelmänsä. (Laitinen 2011.) Täysvirtualisoinnin idea on esitetty kuvassa 1. Kuva 1. Täysvirtualisointi (Godber 2007.) 2.3.2 Paravirtualisointi Toisin kuin täysvirtualisoinnissa, paravirtualisoinnissa (Paravirtualization) virtuaalikoneiden käyttöjärjestelmät ovat tietoisia toisistaan. Paravirtualisointia eli avustettua
13 tai osittaista virtualisointia käytettäessä tietokoneeseen tarvitsee asentaa erillinen isäntäkäyttöjärjestelmä, jonka kautta virtuaalisille käyttöjärjestelmille luodaan rajapinta. Tämä rajapintakerros tarjoaa virtuaalikoneille niiden tarvitsemat resurssit käytettäviä laitteita varten. Paravirtualisointi edellyttää järjestelmältä vähemmän suorituskykyä kuin täysvirtualisointi, koska käytössä on paljon vähemmän ajettavaa koodia. Toisin kuin täysvirtualisoinnin hypervisor, paravirtualisoinnin virtualisointikerros päästää ainoastaan yhden vieraskäyttöjärjestelmän kerrallaan fyysisiin resursseihin ja pysäyttää toiset, jotka pyrkivät samalle resurssille. Lisäksi sillä on laitteiston laaja tuki, koska tekniikka ei sisällä mitään laiteajureita. Paravirtualisointi on nopea tapa virtualisoida ja virtualisoidun järjestelmän nopeus lähentelee sen todellista nopeutta. Paravirtualisointi edellyttää käyttöjärjestelmän tukea. Tämän vuoksi käyttöjärjestelmiä tulee muokata niin, että niitä voidaan käyttää paravirtualisointirajapinnan kanssa. Jotta tämä saavutetaan, on virtualisoitavan käyttöjärjestelmän lähdekoodia muunneltava. (Mäntykoski 2011.) Tämä on selkeästi huono puoli, koska sen myötä virtualisoitavan käyttöjärjestelmän lähdekoodikin tulisi olla saatavilla. Esimerkkejä paravirtualisointiin pohjautuvista ohjelmistoista ovat Cambridgen yliopistossa kehitetty avoimen lähdekoodin sovellus Xen ja UML (User-mode Linux). Paravirtualisoinnin idea on esitetty kuvassa 2. Kuva 2. Paravirtualisointi (Godber 2007.)
14 2.3.3 Käyttöjärjestelmävirtualisointi Käyttöjärjestelmävirtualisoinnissa eli käyttöjärjestelmätasoisessa virtualisoinnissa (Operating system-level virtualization) käyttöjärjestelmiä ajetaan olemassa olevan käyttöjärjestelmän päällä. Näin virtualisoitu käyttöjärjestelmä ei näe isäntäkoneen resursseja virtualisoituna vaan fyysisinä resursseina. Virtualisoidut käyttöjärjestelmät ovat näin eristetty osittain tai kokonaan isännästä. Käyttöjärjestelmävirtualisointia käytettäessä virtuaalikone on nopea, jopa yhtä nopea kuin isäntäkone. Lisäksi kaikki käyttöjärjestelmät toimivat ilman laitteisto-ongelmia. (Vuorinen 2011.) Toisin kuin täys- ja paravirtualisoinnissa, käyttöjärjestelmävirtualisoinnissa ei käytetä hypervisoria. Kaikki teho lähtee itse käyttöjärjestelmästä. Ehkä suurin haittapuoli on se, että kaikkien vieraskäyttöjärjestelmien pitää toimia samalla käyttöjärjestelmällä. (Mäntykoski 2011.) Käytännössä käyttöjärjestelmävirtualisointia käytetään ainoastaan UNIX-pohjaisissa (palvelin-)ympäristöissä. Virtuaalikoneita ei ole eristetty ja suojattu toisiltaan yhtä hyvin kuin muissa virtualisointitekniikoissa. Tämä tekniikka onkin luotettavuudeltaan huonohko. Käyttöjärjestelmätasoinen virtualisointi on ollut kuitenkin yleisessä käytössä helpon käyttöönoton ansiosta. Esimerkkejä tätä tekniikkaa käyttävistä ohjelmistoista ovat OpenVZ, Linux-VServer ja Linux Containers (LXC). Käyttöjärjestelmätasoisen virtualisoinnin idea on esitetty kuvassa 3. Kuva 3. Käyttöjärjestelmätasoinen virtualisointi (Microsoft Developer Network 2009.)
15 2.3.4 Natiivi virtualisointi Natiivissa virtualisointissa eli laitteisto-ohjatussa virtualisoinnissa (Hardware-assisted virtualization) hyödynnetään x86-arkkitehtuuriin kehitettyjä laajennuksia. Kyseessä on eräänlainen sekoitus täysvirtualisointia ja paravirtualisointia. Käyttöjärjestelmät voidaan asentaa ilman muutoksia, mutta pienillä muutoksilla järjestelmän suorituskykyä voidaan parantaa. Natiivi virtualisointi tukee parhaiten uusia 64-bittisiä vieraskäyttöjärjestelmiä. (Knuutinen 2008.) Tekniikalla on paras suorituskyky prosessorin, muistin ja kiintolevyn käyttämisessä, sillä vieraskäyttöjärjestelmä pääsee ohjaamaan laitteistoa suoraan. (Laitinen 2011.) Tiedon ei siis tarvitse kulkea VMM:n (Virtual Machine Monitor) kautta kuten paravirtualisoinnissa. Natiivi virtualisointi soveltuu vain uudemmille laitteistoalustoille, koska tekniikka vaatii toimiakseen prosessorilta laitteisto-ohjatun kiihdytyksen tuen (hardware acceleration). Käytännössä suorittimen tai suorittimien täytyy tukea joko Inter VT tai AMD-V -prosessorilaajennuksia. Natiivin virtualisoinnin huonona puolena on käyttöjärjestelmän muokkaustarve saman tapaan kuin paravirtualisoinnissa. Natiivin virtualisoinnin idea on esitetty kuvassa 4. Kuva 4. Natiivi virtualisointi (VMware 2007.)
16 2.4 Emulointi Emulointi tarkoittaa koko laitteistokokonaisuuden simuloimista toisella laitteistoarkkitehtuurilla. Se on eräänlainen virtualisoinnin äärimuoto, vaikka se joskus eriytetään omaksi tekniikakseen. Emuloinnin avulla toiselle laitteistoarkkitehtuurille kehitettyjä ohjelmia voidaan ajaa toisella alustalla ilman lähdekoodin uudelleenkääntämistä tai muuttamista. Kaikki ohjelmien resurssit ovat käytössä, mutta niiden tehokkuus pienenee, koska jokaisen emuloitavan käskyn tulee kulkea binaarimuunnoksen läpi. Tämän myötä emulointi vaatii isäntäkoneelta runsaasti tehoa ja resursseja. (Salokanto 2010.) Emulointia käytetään pääasiassa erilaisiin ohjelmistokokeiluihin: kehitykseen ja testaukseen. Sitä voidaan suorittaa isäntäkäyttöjärjestelmän prosessina. Emuloitavan järjestelmän prosessori on virtuaalinen, joten se voi käyttää eri käskykantaa kuin isäntäjärjestelmän prosessori. Esimerkkejä emulaattoriohjelmista ovat Java Virtual Machine (JVM), QEMU, DOSBox ja Windows Phone Emulator. Emuloinnin idea on esitetty kuvassa 5. Kuva 5. Emulointi (Microsoft Developer Network 2009.) 2.5 Virtualisoinnin edut ja ongelmat Virtualisointi vähentää kustannuksia ylläpidossa ja laitteiston hankinnoissa, auttaa laskemaan sähkön kulutusta ja parantaa järjestelmän testausmahdollisuuksia. Koska virtuaalisten käyttöympäristöjen ja järjestelmien hallinta tapahtuu keskitetysti, niiden toimivuus pystytään paremmin turvaamaan. Tämän myötä mahdolliset ongelmatilanteet esimerkiksi laitteiston käyttökatkoksien osalta voidaan minimoida. Hyödyntämäl-
17 lä virtualisointia esimerkiksi palvelinjärjestelmissä fyysisten palvelimien tilalla, fyysisen laitteiston hankintatarve vähenee. Virtualisoinnin avulla voidaan yleisesti nostaa palvelinjärjestelmien käyttöaste 10-15%:n suoritinkuormasta teoriassa aina 80%:iin. Uusien virtuaalisten järjestelmien kuten virtuaalipalvelimien käyttöönotto on nopeaa ja virtuaalikoneiden siirtäminen toisiin järjestelmiin vaivatonta. Myös varmuuskopiointi hoituu keskitetymmin. Lisäksi virtualisoinnin hyödyistä täytyy mainita tilatarpeiden ja huoltokustannusten pieneneminen. (Hiltunen 2010.) Yleinen käsitys on, että virtuaalikoneet olisivat jollain tavalla turvallisempia kuin fyysiset järjestelmät. Todellisuudessa näin ei ole, vaan ne toimivat lähes samalla tavalla. Näin ollen samat tietoturvauhat ovat läsnä myös virtuaalisten järjestelmien kohdalla. Virtuaalikoneiden näennäisyyden ja tilapäisyyden vuoksi tietoturva saattaa jäädä hyvinkin alhaiselle tasolle, joka voi aiheuttaa suuriakin riskejä. (Päivinen 2008.) Lisäksi virtualisoinnin haitoiksi voidaan lukea ohjelmistojen yhteensopivuusongelmat ja suorituskyvyn ailahtelut ja heikkemeniset. Virtualisointi vaatii yleisesti ottaen nykyaikaisia laitteistoja, sillä se on resursseja syövää toimintaa. Nykypäivänä virtualisointiohjelmistojen kehityksen myötä edellä mainitut ongelmat ovat kuitenkin vähentyneet merkittävästi. Virtualisoinnin voidaan myös sanoa olevan taitolaji. Väärin toteutettuna virtualisointi toimii usein vain vianhakua hidastavana ja arkkitehtuuria monimutkaistavana uutena kerroksena, joka vaatii päivittämistä ja voi aiheuttaa palvelukatkoja. (Simula 2009.) 3 WINE Wine (Wine Is Not an Emulator), joskus myös (WINE tai wine) on avoimen lähdekoodin sovellus, jonka avulla Windows-ohjelmien ajaminen onnistuu muissa käyttöjärjestelmäympäristöissä. Nimensä mukaisesti Wine ei ole emulaattori vaan pikemminkin Windowsin API-rajapintakutsuja UNIX-alustan mukaiseksi tulkitseva ohjelmisto. Se luo niin sanotun yhteensopivuusrajapinnan POSIX-yhteensopivissa käyttöjärjestelmissä kuten Linuxissa, Mac OS X:ssa ja FreeBSD:ssa. Winen logo on nähtävissä kuvassa 6.
18 Kuva 6. Winen logo 3.1 Winen historiaa Winen kehitys alkoi virallisesti vuonna 1993. Tavoitteena oli kehittää työkalu Windows-ohjelmien ajamiseksi Linuxilla. Bob Amstadt oli alkuperäinen projektinjohtaja ja Eric Youngdale toinen perustajista. Wine otti vaikutteita Sun Microsystemsin kehittämästä, Solaris-käyttöjärjestelmälle suunnatusta WABI (Windows Application Binary Interface) -sovelluksesta sekä Public Windows Interface (PWI) -hankkeesta. Sen tarkoituksena oli painostaa Microsoftia julkaisemaan API:nsa yleiseen käyttöön. Kyseinen projekti lopetettiin vuonna 1996. Wine oli alunperin kehitetty ajamaan 16- bittisiä Windows 3.x -ohjelmia. Amstadtin uutisryhmäviesti on näkyvissä kuvassa 7.
19 Kuva 7. Bom Amstadtin uutisryhmäviesti projektin käynnistämiseksi. (Shemesh 2003.) Alexandre Julliard on johtanut projektia vuodesta 1994. Windowsin pasianssi oli ensimmäinen ohjelma, jonka Winen kehittäjät saivat onnistuneesti ajetuksi. Kehittäjät keskustelivat projektin alkuvaiheina LKML-listojen (Linux Kernel Mailing List) välityksellä. Suuren kiinnostuksen myötä projektin uutisryhmä (Usenet) sai alkunsa heinäkuussa 1994. Tänä päivänä käytetyt postituslistat perusti Doug Ridgway lokakuussa 1998. 1990-luvun lopussa Windows alkoi julkaista 32-bittisiä ja uusia ominaisuuksia sisältäviä ohjelmistoja. Tämän myötä Winen rajapintakin vaati päivityksiä muun muassa verkkoyhteyksien ja rekisteritiedostojen tukemisen osalta. Winen arkkitehtuuri perustuu ohjelmien väliseen jaettuun osoiteavaruuteen. Tämä on olennainen ominaisuus tietoturvan ja jaettujen kansioiden toiminnan kannalta. Vuoden 1995 toukokuussa Wine alkoi tukea 32-bittisiä Windows-ohjelmia ja tammikuussa 1996 ensimmäiset Microsoft Office -ohjelmat pystyttiin ajamaan sovelluksessa. Winen viralliset verkkosivut avattiin marraskuussa 1997. (WineHQ. 2012.)
20 Vuonna 1998 Corel ilmoitti tukevansa Linuxia ja julkaisi myös oman kaupallisen käyttöjärjestelmänsä, Corel Linuxin, vuonna 1999. Yhtiö tuki myös Winen kehitystyötä. Kauan tämä ajanjakso ei kuitenkaan kestänyt ja vuonna 2001 Corel lakkautti Linux-kehityksensä ja myi käyttöjärjestelmänsä Xandrokselle. Samalla yhteistyö Winen kanssa päättyi. Wineä vuodesta 1999 lähtien kehittämässä ollut CodeWeavers-yhtiö julkaisi oman versionsa Winestä. Se sisälsi graafisia hallintatyökaluja ja helppokäyttöisen asennusohjelman. Vuoden 2001 syyskuussa julkaistu CrossOver-lisäosa (CrossOver Plugin) mahdollisti Windows-pluginien ajamisen yleisimmissä Linux-käyttäjien selaimissa ja sähköpostiohjelmissa. Seuraavan vuoden maaliskuussa yhtiö julkaisi CrossOver Officen, joka oli toimistokäyttöön suunniteltu kaupallinen ohjelmisto ajamaan muun muassa Microsoft Officea ja Adobe Photoshopia. (WineHQ. 2012.) CodeWeavers on vielä tänä päivänäkin Winen pääasiallinen kaupallinen yhteistyökumppani. Crossover Office tunnetaan nykyään pelkkänä CrossOverina, joka sisältää kaksi ohjelmistokokonaisuutta: CrossOver Mac ja CrossOver Linux. Ne mahdollistavat Windowssovelluksien ajamisen Linuxissa tai Mac OS X:ssa, ohjelmistosta riippuen. TransGaming Technologies julkaisi 2000-luvun alkupuolella WineX:n, Wineen pohjautuvan kaupallisen ohjelmiston, joka oli suunnattu pelien pelaamiseen Linuxissa. Se sai myöhemmin nimen Cedega. Ohjelman päätavoite oli emuloida Microsoftin DirectX:n API:a, johon Wine ei tuolloin vielä kyennyt. Cedega Gaming Service lakkautettiin 28. helmikuuta 2011, mutta kehitys jatkuu GameTree Linux Developer - projektin alaisuudessa. Maaliskuun 9. päivänä 2002 Winen lähdekoodi siirtyi GNU LGPL:n (GNU Lesser General Public License) piiriin aiemman MIT-lisenssin sijasta ja tämän myötä se toi kehittäjille muutamia yleisiä sääntöjä noudatettaviksi. Ensimmäinen ehto oli, että lähdekoodi tulee olla kaikkien saatavissa, jotka hankkivat Winen. Toinen ehto oli, että yksinkertainen yhdistäminen (linking) Wineen ei tarkoita, että kehittäjän täytyy laittaa ohjelmansa lähdekoodi saataville. (WineHQ. 2012.) 12 vuoden kehitystyön jälkeen Winestä julkaistiin ensimmäinen virallinen beta-versio 25. lokakuuta 2005 (versio 0.9). Uusia beta-versioita julkaistiin noin kahden viikon välein yli kahden ja puolen vuoden ajan. Versio 1.0 julkaistiin lopulta 17. kesäkuuta