Wat is een Virtual Machine? Een simpele uitleg

Wat is een Virtual Machine?
Een Virtual Machine, vaak afgekort tot VM, is een softwarematige omgeving die zich gedraagt als een computer of als een omgeving waarin programma's kunnen draaien. Welke van de twee het is, hangt af van het type VM.
Bij een systeemgerichte VM krijg je eigenlijk een complete virtuele computer. Die kan een eigen besturingssysteem draaien, data opslaan en een netwerkverbinding gebruiken. De echte fysieke computer heet de host. De virtuele computers die daarop draaien, heten guests.
Een procesgerichte VM is juist een uitvoeringsomgeving voor programmacode. De Java Virtual Machine, of JVM, is daar een bekend voorbeeld.
Binnen crypto werkt de Ethereum Virtual Machine, vaak afgekort tot EVM, op een vergelijkbare manier. Het is geen virtuele computer met een eigen besturingssysteem, maar een omgeving die smart contracts volgens vaste regels uitvoert.
Je kunt een VM dus zien als een softwarelaag die bepaalt hoe een virtuele computer of programmacode wordt uitgevoerd.
Korte samenvatting
- Een Virtual Machine is een softwarematige computeromgeving of uitvoeringsomgeving voor code.
- Een systeemgerichte VM bootst een complete computer na.
- Een procesgerichte VM voert programmacode uit binnen een vaste runtime.
- De EVM is een blockchain-VM voor smart contracts, geen virtuele pc.
- VM's kunnen helpen om omgevingen van elkaar te scheiden en code volgens vaste regels uit te voeren.
Hoe werkt een Virtual Machine?
Hoe een VM werkt, verschilt per type.
Bij een systeemgerichte VM zit er meestal een hypervisor tussen de fysieke hardware en de virtuele computers. Een hypervisor is software die onderdelen zoals processorkracht, geheugen, opslag en netwerkcapaciteit van de host verdeelt over verschillende virtuele machines.
Stel dat één fysieke server drie virtuele machines draait. Iedere VM kan dan werken alsof hij een eigen computer heeft, terwijl ze in werkelijkheid de hardware van dezelfde host delen. De hypervisor regelt welke resources iedere VM mag gebruiken en houdt de verschillende omgevingen zoveel mogelijk van elkaar gescheiden.
De beschikbare capaciteit blijft afhankelijk van de fysieke computer. Als de host te weinig geheugen, processorkracht of opslag heeft, kunnen de virtuele machines daar ook last van krijgen.
Een procesgerichte VM werkt anders. Programmacode wordt daarbij uitgevoerd binnen een vaste softwareomgeving. Java-code wordt bijvoorbeeld omgezet naar instructies die door een JVM kunnen worden uitgevoerd. Daardoor kan dezelfde code op verschillende besturingssystemen en soorten hardware draaien, zolang daar een geschikte JVM beschikbaar is.
Blockchain-VM's voeren programmacode uit volgens vaste regels die voor de deelnemende nodes hetzelfde zijn. Daardoor hoort dezelfde code met dezelfde invoer steeds dezelfde uitkomst te geven.
Welke soorten Virtual Machines zijn er?
Virtual Machines worden meestal onderverdeeld in twee hoofdtypen: systeemgerichte en procesgerichte VM's.
Wat is een systeemgerichte Virtual Machine?
Een systeemgerichte Virtual Machine is een virtuele computer waarop een eigen besturingssysteem en applicaties kunnen draaien.
De VM krijgt virtuele versies van hardware, zoals een processor, geheugen, opslag en een netwerkverbinding. Een hypervisor beheert vervolgens hoe de verschillende virtuele machines de echte hardware van de host gebruiken.
Hyper-V en KVM zijn voorbeelden van technologieën waarmee zulke virtuele machines kunnen worden gemaakt.
Een voordeel hiervan is dat meerdere besturingssystemen op één fysieke server kunnen draaien. Zo kun je verschillende applicaties of werkomgevingen van elkaar scheiden zonder voor iedere omgeving een aparte fysieke computer nodig te hebben.
Die scheiding kan ook helpen bij de beveiliging. Als één virtuele machine crasht of wordt aangevallen, betekent dat niet automatisch dat de andere virtuele machines ook worden geraakt. Een veilige configuratie van de host en hypervisor blijft wel belangrijk.
Wat is een procesgerichte Virtual Machine?
Een procesgerichte Virtual Machine is een uitvoeringsomgeving voor programmacode en geen volledige virtuele computer met een eigen besturingssysteem.
De Java Virtual Machine (JVM) is hiervan een bekend voorbeeld. Een Java-programma wordt omgezet naar een tussenformaat dat de JVM kan begrijpen. Een geschikte JVM kan die code vervolgens op verschillende besturingssystemen en soorten hardware uitvoeren.
De JVM bepaalt welke instructies beschikbaar zijn en hoe Java-code zich tijdens het uitvoeren hoort te gedragen. De precieze technische uitvoering kan per JVM verschillen.
Blockchain-VM's lijken meer op dit type VM dan op een volledige virtuele computer, omdat ze vooral bedoeld zijn om programmacode volgens vaste regels uit te voeren.
Welke rol speelt een Virtual Machine binnen blockchain?
Binnen een programmeerbare blockchain bepaalt een Virtual Machine hoe smart contracts en andere programmacode worden uitgevoerd.
De VM legt vast welke instructies mogelijk zijn en hoe die instructies de toestand van de blockchain mogen veranderen. Daardoor kunnen verschillende nodes dezelfde transactie volgens dezelfde regels uitvoeren en controleren.
Ethereum gebruikt hiervoor de Ethereum Virtual Machine (EVM). Ethereum houdt niet alleen transacties bij, maar ook een actuele toestand met onder meer accounts, saldo's en gegevens van smart contracts.
Wanneer een smart contract op Ethereum wordt geplaatst, wordt de gecompileerde programmacode als bytecode opgeslagen. Roept iemand het contract later aan, dan voert de EVM deze bytecode uit.
De Virtual Machine en het consensusmechanisme hebben daarbij verschillende taken. De VM bepaalt wat een transactie technisch doet. Consensus zorgt ervoor dat deelnemers het eens worden over welke transacties en welke nieuwe toestand door het netwerk worden geaccepteerd.
Niet iedere blockchain heeft een algemene VM voor smart contracts. Bitcoin gebruikt bijvoorbeeld Bitcoin Script om voorwaarden vast te leggen voor het uitgeven van bitcoin. Dit is bewust beperkter dan een algemene smartcontractomgeving zoals de EVM.
Hoe werkt de Ethereum Virtual Machine (EVM)?
Een Ethereum-transactie kan bijvoorbeeld ETH versturen, een nieuw smart contract maken of een bestaand smart contract aanroepen.
Wanneer een smart contract wordt aangemaakt, wordt de gecompileerde bytecode opgeslagen in een contractaccount. Als iemand het contract later aanroept, voert de EVM deze bytecode uit.
De EVM werkt als een stackmachine. Een stack kun je zien als een stapel met waarden. De EVM kan waarden op deze stapel plaatsen en weer gebruiken om berekeningen uit te voeren.
De EVM-stack kan maximaal 1.024 items bevatten. Ieder item bestaat uit 256 bits.
Tijdens de uitvoering gebruikt de EVM tijdelijk geheugen voor berekeningen. Dit geheugen verdwijnt na de transactie. Smart contracts kunnen daarnaast gegevens opslaan in permanente contractopslag, zodat deze bij latere transacties opnieuw beschikbaar zijn.
Iedere EVM-instructie, ook wel een opcode genoemd, heeft een bepaalde gaskost. Gas geeft aan hoeveel rekenwerk en andere netwerkresources een handeling gebruikt. De gaslimiet van een transactie bepaalt hoeveel gas de uitvoering maximaal mag verbruiken.
Je betaalt uiteindelijk voor het gas dat daadwerkelijk wordt gebruikt. Bij Ethereum-transacties volgens EIP-1559 bestaat de gasprijs onder meer uit een base fee en een priority fee. De base fee wordt verbrand. De priority fee gaat naar de validator die het blok voorstelt waarin de transactie wordt opgenomen.
Voorbeeld: Stel dat je een transactie naar een smart contract stuurt om tokens over te dragen. De EVM voert de code van het contract uit, controleert de voorwaarden en past de opgeslagen saldo's aan als alles klopt. Voor het uitvoeren van deze instructies gebruikt de transactie gas.
Welke andere blockchain-Virtual Machines zijn er?
Naast de EVM bestaan er andere blockchainomgevingen voor het uitvoeren van programma's en smart contracts. Deze kunnen andere programmeertalen, opslagmodellen en uitvoeringsregels gebruiken.
Solana gebruikt bijvoorbeeld een runtime waarin programma's als sBPF-bytecode worden uitgevoerd. Programma's worden gecompileerd naar ELF-bestanden met sBPF-code en draaien vervolgens in een afgeschermde omgeving.
In plaats van gas gebruikt Solana onder meer compute units om te meten hoeveel rekenwerk een transactie gebruikt. De verschillende instructies binnen een transactie delen hetzelfde compute budget.
Sui gebruikt de programmeertaal Move voor smart contracts. De smart contracts worden als Move packages op de blockchain gepubliceerd en kunnen on-chain objecten aanmaken en aanpassen.
Sui werkt daarbij met een objectmodel. Een on-chain object heeft onder meer een unieke ID, een eigenaar en een versienummer. Transacties kunnen deze objecten lezen, aanpassen, overdragen of nieuwe objecten maken.
Dat verschilt van Ethereum, waar accounts en contractopslag een centrale rol spelen. Blockchain-VM's kunnen dus hetzelfde algemene doel hebben, maar technisch heel anders zijn opgebouwd.
Waarvoor worden Virtual Machines gebruikt?
Systeemgerichte VM's worden veel gebruikt wanneer meerdere besturingssystemen of applicaties op één fysieke server moeten draaien. Dat gebeurt bijvoorbeeld in cloudomgevingen en datacenters.
Ze worden ook gebruikt om development-, test- en productieomgevingen van elkaar te scheiden. Daarnaast kunnen complete virtuele omgevingen worden opgeslagen als VM-images of virtuele schijven en later opnieuw worden gestart.
Procesgerichte VM's worden vooral gebruikt om dezelfde programmacode op verschillende systemen te kunnen uitvoeren. Een applicatie hoeft zich daardoor niet rechtstreeks aan te passen aan iedere combinatie van hardware en besturingssysteem.
Blockchain-VM's maken programmeerbare transacties mogelijk. Ze voeren smart contracts uit en kunnen daardoor bijvoorbeeld opgeslagen gegevens aanpassen, tokens verplaatsen of andere acties uitvoeren volgens de regels van een contract.
Wat zijn de voordelen en beperkingen van een Virtual Machine?
Virtual Machines bieden verschillende voordelen, maar hebben ook beperkingen.
Bij systeemgerichte VM's zijn dit belangrijke voordelen:
-
Efficiënter gebruik van hardware: Meerdere virtuele computers kunnen de resources van één fysieke host delen.
-
Scheiding tussen omgevingen: Verschillende besturingssystemen en applicaties kunnen onafhankelijk van elkaar draaien.
-
Problemen blijven vaker beperkt: Een fout of crash in één VM heeft niet automatisch gevolgen voor alle andere VM's op dezelfde host.
-
Omgevingen zijn makkelijker opnieuw te gebruiken: Met VM-images en virtuele schijven kan een complete softwareomgeving worden opgeslagen en opnieuw gestart.
Die scheiding is niet volledig waterdicht. Bij een zogenaamde VM escape kan een aanvaller vanuit een virtuele machine toegang proberen te krijgen tot de hypervisor of host. Ook een slechte configuratie kan de scheiding tussen VM's verzwakken.
Virtual Machines gebruiken daarnaast zelf resources. De hypervisor en de verschillende virtuele besturingssystemen vragen processorkracht, geheugen en opslag. Als te veel VM's dezelfde fysieke machine gebruiken, kunnen ze met elkaar concurreren om deze resources.
Bij procesgerichte VM's is portabiliteit een belangrijk voordeel. Daar staat tegenover dat de code altijd binnen de regels en beschikbare resources van de runtime moet werken.
Bij blockchain-VM's ligt het voordeel vooral in de voorspelbare uitvoering van smart contracts. Tegelijk zijn berekeningen en opslag op een blockchain beperkt. Netwerken stellen grenzen aan hoeveel rekenwerk en opslag een transactie of smart contract mag gebruiken.
Daarnaast kunnen complexere berekeningen hogere transactiekosten veroorzaken. Daardoor zijn zware berekeningen niet altijd praktisch om volledig op een blockchain uit te voeren.
Conclusie
Een Virtual Machine kan een complete virtuele computer zijn, een omgeving voor het uitvoeren van programmacode of een gespecialiseerde runtime voor smart contracts.
Systeemgerichte VM's maken het mogelijk om meerdere gescheiden computeromgevingen op dezelfde fysieke hardware te draaien. Procesgerichte VM's maken programmacode makkelijker overdraagbaar tussen verschillende systemen.
Binnen blockchain zorgen VM's zoals de EVM ervoor dat smart contracts volgens vaste regels worden uitgevoerd. Daardoor kunnen transacties meer doen dan alleen waarde versturen.
Daar staan wel beperkingen tegenover. Virtual Machines blijven afhankelijk van beschikbare resources en blockchain-VM's stellen daarnaast grenzen aan rekenwerk, opslag en kosten.