Qu’est-ce qu’une machine virtuelle ? Une explication simple

Qu’est-ce qu’une machine virtuelle ?
Une machine virtuelle, souvent abrégée en VM, est un environnement logiciel qui se comporte comme un ordinateur ou comme un environnement dans lequel des programmes peuvent s’exécuter. Lequel des deux elle représente dépend du type de VM.
Dans le cas d’une VM orientée système, vous obtenez en pratique un ordinateur virtuel complet. Celui-ci peut exécuter son propre système d’exploitation, stocker des données et utiliser une connexion réseau. L’ordinateur physique réel s’appelle l’hôte. Les ordinateurs virtuels qui s’exécutent dessus sont appelés guests.
Une VM orientée processus est, au contraire, un environnement d’exécution pour du code. La Java Virtual Machine, ou JVM, en est un exemple bien connu.
Dans la crypto, la Ethereum Virtual Machine, souvent abrégée en EVM, fonctionne de manière comparable. Ce n’est pas un ordinateur virtuel doté de son propre système d’exploitation, mais un environnement qui exécute les smart contracts selon des règles fixes.
On peut donc voir une VM comme une couche logicielle qui détermine comment un ordinateur virtuel ou du code est exécuté.
À retenir
- Une machine virtuelle est un environnement informatique logiciel ou un environnement d’exécution pour du code.
- Une VM orientée système reproduit un ordinateur complet.
- Une VM orientée processus exécute du code dans un runtime fixe.
- L’EVM est une VM blockchain destinée aux smart contracts, et non un PC virtuel.
- Les VM peuvent aider à séparer les environnements les uns des autres et à exécuter du code selon des règles fixes.
Comment fonctionne une machine virtuelle ?
Le fonctionnement d’une VM varie selon son type.
Dans le cas d’une VM orientée système, un hyperviseur se trouve généralement entre le matériel physique et les ordinateurs virtuels. Un hyperviseur est un logiciel qui répartit des ressources comme la puissance de calcul, la mémoire, le stockage et la capacité réseau de l’hôte entre plusieurs machines virtuelles.
Imaginons qu’un serveur physique fasse tourner trois machines virtuelles. Chaque VM peut alors fonctionner comme si elle disposait de son propre ordinateur, alors qu’en réalité elles partagent le matériel du même hôte. L’hyperviseur détermine quelles ressources chaque VM peut utiliser et maintient les différents environnements aussi séparés que possible.
La capacité disponible dépend toujours de l’ordinateur physique. Si l’hôte manque de mémoire, de puissance de calcul ou de stockage, les machines virtuelles peuvent elles aussi en subir les conséquences.
Une VM orientée processus fonctionne différemment. Le code est exécuté dans un environnement logiciel fixe. Le code Java, par exemple, est converti en instructions que la JVM peut exécuter. Ainsi, le même code peut fonctionner sur différents systèmes d’exploitation et types de matériel, à condition qu’une JVM adaptée soit disponible.
Les VM blockchain exécutent du code selon des règles fixes qui sont identiques pour les nodes participants. Ainsi, le même code avec la même entrée doit toujours produire le même résultat.
Quels sont les types de machines virtuelles ?
Les machines virtuelles sont généralement réparties en deux grands types : les VM orientées système et les VM orientées processus.
Qu’est-ce qu’une machine virtuelle orientée système ?
Une machine virtuelle orientée système est un ordinateur virtuel sur lequel un système d’exploitation propre et des applications peuvent s’exécuter.
La VM reçoit des versions virtuelles du matériel, comme un processeur, de la mémoire, du stockage et une connexion réseau. Un hyperviseur gère ensuite la manière dont les différentes machines virtuelles utilisent le matériel réel de l’hôte.
Hyper-V et KVM sont des exemples de technologies permettant de créer de telles machines virtuelles.
L’un des avantages est que plusieurs systèmes d’exploitation peuvent fonctionner sur un seul serveur physique. Cela permet de séparer différentes applications ou environnements de travail sans avoir besoin d’un ordinateur physique distinct pour chacun.
Cette séparation peut aussi contribuer à la sécurité. Si une machine virtuelle plante ou est attaquée, cela ne signifie pas automatiquement que les autres machines virtuelles sont également touchées. Une configuration sûre de l’hôte et de l’hyperviseur reste toutefois importante.
Qu’est-ce qu’une machine virtuelle orientée processus ?
Une machine virtuelle orientée processus est un environnement d’exécution pour du code et non un ordinateur virtuel complet doté de son propre système d’exploitation.
La Java Virtual Machine (JVM) en est un exemple connu. Un programme Java est converti en un format intermédiaire que la JVM peut comprendre. Une JVM adaptée peut ensuite exécuter ce code sur différents systèmes d’exploitation et types de matériel.
La JVM détermine quelles instructions sont disponibles et comment le code Java doit se comporter pendant l’exécution. L’exécution technique précise peut varier d’une JVM à l’autre.
Les VM blockchain ressemblent davantage à ce type de VM qu’à un ordinateur virtuel complet, car elles sont surtout conçues pour exécuter du code selon des règles fixes.
Quel rôle joue une machine virtuelle dans la blockchain ?
Dans une blockchain programmable, une machine virtuelle détermine comment les smart contracts et les autres codes sont exécutés.
La VM définit quelles instructions sont possibles et comment ces instructions peuvent modifier l’état de la blockchain. Ainsi, différents nodes peuvent exécuter et vérifier la même transaction selon les mêmes règles.
Ethereum utilise pour cela l’Ethereum Virtual Machine (EVM). Ethereum ne se contente pas d’enregistrer les transactions, il maintient aussi un état actuel comprenant notamment les comptes, les soldes et les données des smart contracts.
Lorsqu’un smart contract est déployé sur Ethereum, le code compilé est stocké sous forme de bytecode. Si quelqu’un appelle ensuite le contrat, l’EVM exécute ce bytecode.
La machine virtuelle et le mécanisme de consensus ont ici des rôles différents. La VM détermine ce qu’une transaction fait techniquement. Le consensus garantit que les participants s’accordent sur les transactions et sur le nouvel état accepté par le réseau.
Toutes les blockchains ne disposent pas d’une VM générale pour les smart contracts. Bitcoin utilise par exemple Bitcoin Script pour définir les conditions d’utilisation du bitcoin. Celui-ci est volontairement plus limité qu’un environnement général de smart contracts comme l’EVM.
Comment fonctionne l’Ethereum Virtual Machine (EVM) ?
Une transaction Ethereum peut par exemple envoyer de l’ETH, créer un nouveau smart contract ou appeler un smart contract existant.
Lorsqu’un smart contract est créé, le bytecode compilé est stocké dans un compte de contrat. Si quelqu’un appelle ensuite le contrat, l’EVM exécute ce bytecode.
L’EVM fonctionne comme une machine à pile. Une pile peut être vue comme une pile de valeurs. L’EVM peut placer des valeurs sur cette pile et les utiliser ensuite pour effectuer des calculs.
La pile de l’EVM peut contenir au maximum 1 024 éléments. Chaque élément est composé de 256 bits.
Pendant l’exécution, l’EVM utilise une mémoire temporaire pour les calculs. Cette mémoire disparaît après la transaction. Les smart contracts peuvent également stocker des données dans un stockage permanent du contrat, afin qu’elles restent disponibles lors de transactions ultérieures.
Chaque instruction de l’EVM, également appelée opcode, a un coût en gas déterminé. Le gas indique la quantité de calcul et d’autres ressources réseau utilisée par une opération. La limite de gas d’une transaction détermine la quantité maximale de gas que l’exécution peut consommer.
Vous payez finalement pour le gas réellement utilisé. Dans les transactions Ethereum selon EIP-1559, le prix du gas comprend notamment une base fee et une priority fee. La base fee est brûlée. La priority fee revient au validator qui propose le bloc dans lequel la transaction est incluse.
Exemple : Imaginons que vous envoyiez une transaction à un smart contract pour transférer des tokens. L’EVM exécute le code du contrat, vérifie les conditions et ajuste les soldes enregistrés si tout est correct. L’exécution de ces instructions consomme du gas.
Quelles autres machines virtuelles blockchain existent ?
Outre l’EVM, il existe d’autres environnements blockchain pour exécuter des programmes et des smart contracts. Ceux-ci peuvent utiliser d’autres langages de programmation, modèles de stockage et règles d’exécution.
Solana utilise par exemple un runtime dans lequel les programmes sont exécutés sous forme de bytecode sBPF. Les programmes sont compilés en fichiers ELF contenant du code sBPF, puis s’exécutent dans un environnement isolé.
Au lieu du gas, Solana utilise notamment des compute units pour mesurer la quantité de calcul utilisée par une transaction. Les différentes instructions au sein d’une transaction partagent le même compute budget.
Sui utilise le langage de programmation Move pour les smart contracts. Les smart contracts sont publiés sur la blockchain sous forme de Move packages et peuvent créer et modifier des objets on-chain.
Sui fonctionne avec un modèle d’objets. Un objet on-chain possède notamment un ID unique, un propriétaire et un numéro de version. Les transactions peuvent lire, modifier, transférer ces objets ou en créer de nouveaux.
Cela diffère d’Ethereum, où les comptes et le stockage des contrats jouent un rôle central. Les VM blockchain peuvent donc poursuivre le même objectif général, tout en étant techniquement très différentes.
À quoi servent les machines virtuelles ?
Les VM orientées système sont largement utilisées lorsqu’il faut faire fonctionner plusieurs systèmes d’exploitation ou applications sur un seul serveur physique. C’est notamment le cas dans les environnements cloud et les centres de données.
Elles servent aussi à séparer les environnements de développement, de test et de production. En outre, des environnements virtuels complets peuvent être enregistrés sous forme d’images de VM ou de disques virtuels, puis redémarrés plus tard.
Les VM orientées processus sont surtout utilisées pour permettre l’exécution du même code sur différents systèmes. Une application n’a ainsi pas besoin de s’adapter directement à chaque combinaison de matériel et de système d’exploitation.
Les VM blockchain rendent possibles les transactions programmables. Elles exécutent des smart contracts et peuvent ainsi, par exemple, modifier des données stockées, déplacer des tokens ou effectuer d’autres actions selon les règles d’un contrat.
Quels sont les avantages et les limites d’une machine virtuelle ?
Les machines virtuelles offrent plusieurs avantages, mais elles ont aussi des limites.
Pour les VM orientées système, voici des avantages importants :
-
Utilisation plus efficace du matériel : plusieurs ordinateurs virtuels peuvent partager les ressources d’un seul hôte physique.
-
Séparation entre les environnements : différents systèmes d’exploitation et applications peuvent fonctionner indépendamment les uns des autres.
-
Les problèmes restent souvent plus limités : une erreur ou un crash dans une VM n’a pas automatiquement de conséquences pour toutes les autres VM sur le même hôte.
-
Les environnements sont plus faciles à réutiliser : avec des images de VM et des disques virtuels, un environnement logiciel complet peut être enregistré puis redémarré.
Cette séparation n’est toutefois pas totalement étanche. Lors d’une VM escape, un attaquant peut tenter d’obtenir un accès à l’hyperviseur ou à l’hôte depuis une machine virtuelle. Une mauvaise configuration peut également affaiblir la séparation entre les VM.
Les machines virtuelles consomment aussi elles-mêmes des ressources. L’hyperviseur et les différents systèmes d’exploitation virtuels demandent de la puissance de calcul, de la mémoire et du stockage. Si trop de VM utilisent la même machine physique, elles peuvent entrer en concurrence pour ces ressources.
Pour les VM orientées processus, la portabilité est un avantage important. En contrepartie, le code doit toujours fonctionner dans les limites et avec les ressources disponibles du runtime.
Pour les VM blockchain, l’avantage principal réside dans l’exécution prévisible des smart contracts. En même temps, les calculs et le stockage sur une blockchain sont limités. Les réseaux fixent des limites à la quantité de calcul et de stockage qu’une transaction ou un smart contract peut utiliser.
En outre, des calculs plus complexes peuvent entraîner des frais de transaction plus élevés. Les calculs lourds ne sont donc pas toujours pratiques à exécuter entièrement sur une blockchain.
En résumé
Une machine virtuelle peut être un ordinateur virtuel complet, un environnement d’exécution pour du code ou un runtime spécialisé pour les smart contracts.
Les VM orientées système permettent de faire fonctionner plusieurs environnements informatiques séparés sur le même matériel physique. Les VM orientées processus rendent le code plus facilement portable entre différents systèmes.
Dans la blockchain, des VM comme l’EVM garantissent que les smart contracts sont exécutés selon des règles fixes. Les transactions peuvent ainsi faire davantage que simplement transférer de la valeur.
Cela s’accompagne toutefois de limites. Les machines virtuelles restent dépendantes des ressources disponibles et les VM blockchain imposent en outre des limites au calcul, au stockage et aux coûts.