Tegenwoordig wordt de term virtualisatie voor of achter elk ander begrip geplaatst om dat begrip interessanter te doen lijken dan het is. Daardoor ontstaan begripsverwarringen die de zaken er niet makkelijker, maar juist ondoorzichtiger door maken. Toch is het beoordelen van 'het virtualiseren van iets' makkelijk wanneer een definitie wordt gebruikt. Die definitie is er. Hoewel virtualisatie niet in het woordenboek staat is er een hulpmiddel wat ons soelaas biedt. Het is deze keer niet Google.
Wie virtualisatie met Google zoekt krijgt de volgende uitleg: "Virtualisatie is een nieuwe techniek die het mogelijk maakt fysieke hardware los te koppelen van een besturingssysteem.", en nog een tiental verschillende bewoordingen met dezelfde inhoud. Helaas is dit niet een definitie, dit is een omschrijving van een verschijningsvorm. "Het heeft twee stoelen, haalt 215 km per uur en op de achterkant staat Lotus Elise" is een definitie van een Lotus Elise, niet de definitie van 'auto'. De fysica helpt ons gelukkig, want de term 'virtueel' is wel gedefinieerd. Virtueel is volgens de Van Dale 'schijnbaar aanwezig' en de tegenhanger van reëel. Virtualiseren is daarom het "schijnbaar aanwezig maken van een stoffelijke of niet stoffelijke zaak". Die zaak mag van alles zijn. De bekende fysicus Isaac Newton gebruikte de term virtueel in zijn spiegelexperimenten rond 1700 (niet een nieuwe techniek dus). Iedereen virtualiseert zelf ook regelmatig; bij het kijken in de spiegel wordt een virtueel beeld van het hoofd gemaakt. Anderen zullen dit virtuele beeld herkennen en als er een foto van wordt gemaakt is ook die foto bruikbaar ter identificatie van de persoon. Zo heb ik al twee toepassingen voor het gevirtualiseerde hoofd. Eten geven lukt niet, het virtuele beeld kan niet alles wat met het reële hoofd kan. Newton gebruikte spiegels voor het maken van schijnbaar aanwezige beelden voor zijn definitie van licht. Sta mij toe wat licht op de zaak te werpen in verband met automatiseren.
Het begrip virtueel wordt al lang gebezigd in ons werkveld. Denk maar aan virtueel geheugen, wat in een operating system ook wel door het leven gaat als swap-file of swap-partition. Hierbij is het mogelijk een deel van de harddiskruimte te reserveren als zijnde ram-geheugen. Hierdoor kan het operating system meer geheugen gebruiken dan er feitelijk aanwezig is in de hardware. Ook v-lan's zijn een voorbeeld van virtualiseren; binnen een switch worden meerdere virtuele netwerken aangemaakt om zo netwerken te scheiden zonder dat daarvoor meerdere switches hoeven te worden aangeschaft. Besparen op hardware dus.
Met de aan de fysica ontleende definitie wordt virtualiseren eenvoudig: koppelen we virtualiseren aan ict dan hebben we in een systeem te maken met de vier onderdelen hardware, operating system, RDBMS en applicatie. Omdat niet elke applicatie een RDBMS nodig heeft, laat ik die even buiten beschouwing, alhoewel er over virtuele sql-servers nog wel wat te melden zou zijn.
Uit de definitie volgen nu een paar virtualisatievormen: hardwarevirtualisatie, operating system-virtualisatie en applicatievirtualisatie. Hardwarevirtualisatie wordt bewerkstelligd door bijvoorbeeld die v-lan's; er zijn minder fysieke switches (hubs) nodig om fysiek gescheiden netwerken te bouwen. Bij VMware, KVM, Xen en Xen-achtigen zoals Hyper-V is ook sprake van 'schijnbaar aanwezige hardware'. De VMware-gebruiker kan dit eenvoudig vaststellen door in de devicemanager van een gevirtualiseerde Windows-machine naar de daarin gedetecteerde hardware te kijken. Er zijn daar apparaten te vinden als een NECVMWar VMware IDE CDR00-cdromspeler, VMware Virtual disk SCSI Disk Device en VMware accelerated AMD PCNet Adapter, welke geen van alle in de winkel te koop zijn en geen weergave van de reële werkelijkheid zijn. De werkelijkheid is dat de kans veel groter is dat je een Broadcom- of Intel-netwerkkaart in de fysieke machine hebt zitten dan een AMD PCNet. Er is daarom sprake van 'schijnbaar aanwezige hardware', die net zoals het spiegelbeeld voor de kijkers herkenbaar is, door het operating system bruikbaar is voor dat doel waartoe zij bestemd is. Net als bij eten zal een netwerkstekker in die AMD PCNet-adapter stoppen niet gaan.
Benamingen als servervirtualisatie of desktopvirtualisatie zijn vormen van hardwarevirtualisatie. Niets meer en niets minder. De gevolgen zijn minder hardware nodig, net als bij die switches met v-lan's. Het verschil met fysieke hardware is dat je die wel kunt optillen en virtuele hardware niet.
Nu is hardware tastbaar, dus bovenstaand voorbeeld is zonder al te veel abstractievermogen te bevatten. Gaan we naar het operating system, dan is de definitie daarvan van belang. De grafische schil van Windows, ook wel het Explorer-proces, is een applicatie. Niet het operating system. Het weggooien van een shortcut naar een programma maakt een applicatie niet virtueel. De taak van het operating system is het aansturen van de hardware, zodat applicaties met standaard opdrachten bijvoorbeeld iets kunnen opslaan. Een applicatie rekent op het operating system om iets op disk te zetten. Een applicatie heeft niet zelf een driver voor de hardware. Vroeger was dat nog weleens anders, maar dat is allemaal wel erg lang geleden. Om bij Windows te blijven; csrss.exe (client server runtime subsystem) is het proces waar applicaties hun applicatiecode naar sturen om het uitgevoerd te krijgen. Csrss is ervoor verantwoordelijk dat elke applicatie eerlijk aan de beurt komt. Een applicatie die crashed heeft geen invloed op andere applicaties, een csrss.exe die crashed resulteert in een blue screen of death, waardoor alle applicaties crashen. Zo liggen de verhoudingen tussen applicaties en operating system. Het vertrouwde MSDOS heette niet voor niks zo; DOS staat voor disk-operating-system. DOS wist waar a: en b: stonden, zodat een applicatie zich daar niet mee hoefde te bemoeien.
Virtualiseren we nu een operating system, dan worden de taken van dat operating system 'schijnbaar aanwezig'. Wat moet men zich daarbij voorstellen? Zaken die door applicaties gedeeld worden, zoals csrss, zijn een operating system-taak. Het idee van meerdere applicaties tegelijkertijd te draaien is alleen mogelijk wanneer het operating system daar voorzieningen voor heeft, en die voorzieningen zijn daarom operating system-taken. Windows houdt zaken graag bij in de 'registry', een database waarin applicaties gegevens achterlaten. Zoals hardwarevirtualisatieproducten een laag vormen tussen de hardware en de operating systems, zo vormen operating system-virtualisatieproducten een laag tussen operating system en applicaties. Voor de applicaties verandert er qua werking niks, die worden op traditionele wijze geïnstalleerd en de code wordt ook afgestuurd als ware het een gewone installatie is. De applicatie is niet 'schijnbaar aanwezig', die is er wel degelijk. De applicatiecode wordt reëel uitgevoerd.
Wat zijn dan voorbeelden van operating system-virtualisatie? Java is een bekende. De java virtual machine is een applicatie die op een operating system wordt geïnstalleerd. Dat mag Linux of iets Windows zijn, dat maakt niet uit. Een java-applicatie 'praat' naar de java virtual machine, welke de code uitvoerbaar maakt voor het onderliggende operating system. Java gedraagt zich in dit geval hetzelfde als VMware ESX, het maakt een onderliggende laag transparant. In het geval van java is de java-applicatie gemaakt om java-code te genereren, waarbij zaken als operating system of hardware onbelangrijk zijn voor de java-applicatieontwikkelaar. Die hoeft alleen maar java-code te maken, welke daarmee uitvoerbaar is op 32 of 64 bit Ubuntu, Windows of Solaris op een Dell, HP, Apple of wat voor machine dan ook. Zo heb ik java-programmaatjes op mijn telefoon, die het ook op een Dell-rackserver doen. Handig hoor.
Nog een voorbeeld: SVS, software virtualization services. Er wordt een stuk software geïnstalleerd op het reële operating system. Wanneer nu een applicatie wordt geïnstalleerd zorgt SVS dat niet de werkelijke registry wordt getoond aan de applicatie, maar een afgeschermd gedeelte ervan. Zo lijkt het voor de applicatie alsof er geen andere applicaties in zijn vaarwater zitten. Hij denkt in zijn eentje te zijn op het operating system. Het schijnbaar aanwezige operating system. Thinstall heeft dezelfde werkwijze. Softgrid: u krijgt een clientapplicatie. Naar deze clientapplicatie wordt de Windows-applicatie door een soort fileserver gestuurd waardoor deze gesteund door die client kan draaien. De Windows-applicatie weet weer van niks, die stuurt gewoon zijn code nog op de manier als ware hij gewoon op een reëel operating system geïnstalleerd. De applicatie is niet schijnbaar aanwezig, het operating system is schijnbaar aanwezig! Dus is wat applicatievirtualisatie wordt genoemd eigenlijk operating system-virtualisatie! Net zoals bij hardwarevirtualisatie er minder hardware nodig is, zijn er bij operating system-virtualisatie minder operating systems nodig.
Applicatievirtualisatie zou een laag brengen tussen gebruiker en applicatie. Daarbij denkt de gebruiker dat een applicatie aanwezig is, de eigenschappen lijken hetzelfde qua uiterlijk, net als het hoofd in een spiegel. Wil de gebruiker een virtuele applicatie ook gebruiken, dan zal hij bijvoorbeeld op een control-object erin klikken, met niks als gevolg. Brood geven of scheren lukt niet met dat hoofd.
Het handige van de definitie is dat hiermee ineens duidelijk is dat een ge-thinstallde applicatie zonder probleem kan werken op een XP-installatie op virtuele hardware en net zo makkelijk op een XP-installatie op fysieke hardware. Eenvoudigweg omdat de ge-thinstallde applicatie geen weet heeft van virtuele hardware of virtuele operating systems. De applicatie zelf is gewoon reëel en stuurt code alsof er niks aan de hand is. Bijkomend gevolg: bij het beoordelen van wat voor de gebruiker een bruikbare methode is valt de ordening in hardware-operating system-applicatie netjes in te delen naar de beheerinspanningen die nu verricht worden op de bestaande infrastructuur. Misschien is dat nog wel het belangrijkste: het afvragen waar de meeste beheerinspanning in gaat zitten in de huidige infrastructuur.
Helder stuk. Het brengt duidelijkheid in hetgeen ICT momenteel bezig houdt.
Virtualisatie is zo oud als de mensheid. Ieder afgodsbeeld is een virtualisatie van een ongrijpbare werkelijkheid. Het zit in ons mensen om dat te kunnen. Zodoende kunnen we deze toepassingen ook verzinnen. Van oermens tot digitaal is juist die mogelijkheid tot virtualisatie (abstraheren en her-creeeren) een belangrijk vorm van intelligentie.
Virtualisatie met bijvoorbeeld VMware ESX doet wat een goed operating system eigenlijk zou moeten doen. Het scheidt de hardware van de applicatiesoftware, zorgt dat applicaties elkaar niet in de weg zitten en dat vrijwel de volledige systeemcapaciteit benut wordt. Clustering van servers, die vaak toch voor problemen zorgde, is niet meer nodig.
Naast allerlei andere leuke zaken die bijvoorbeeld uitwijk veel eenvoudiger maken, zijn er tegenwoordig ook applicaties die met een virtuele wrapper zonder in de weg zittend Operating System direct op de virtuele hardware draaien.