O que é uma Virtual Machine? Uma explicação simples

O que é uma Virtual Machine?
Uma Virtual Machine, frequentemente abreviada para VM, é um ambiente de software que se comporta como um computador ou como um ambiente no qual os programas podem ser executados. Qual dos dois é depende do tipo de VM.
Numa VM orientada para o sistema, obtém-se, na prática, um computador virtual completo. Esta pode executar um sistema operativo próprio, armazenar dados e usar uma ligação de rede. O computador físico real chama-se host. Os computadores virtuais que nele são executados chamam-se guests.
Uma VM orientada para processos é, por sua vez, um ambiente de execução para código de programa. A Java Virtual Machine, ou JVM, é um exemplo conhecido disso.
No âmbito das criptomoedas, a Ethereum Virtual Machine, frequentemente abreviada para EVM, funciona de forma semelhante. Não é um computador virtual com um sistema operativo próprio, mas sim um ambiente que executa smart contracts segundo regras fixas.
Pode, portanto, ver uma VM como uma camada de software que determina como um computador virtual ou código de programa é executado.
Pontos principais
- Uma Virtual Machine é um ambiente informático de software ou um ambiente de execução para código.
- Uma VM orientada para o sistema imita um computador completo.
- Uma VM orientada para processos executa código de programa dentro de uma runtime fixa.
- A EVM é uma blockchain-VM para smart contracts, não um PC virtual.
- As VM's podem ajudar a separar ambientes entre si e a executar código segundo regras fixas.
Como funciona uma Virtual Machine?
A forma como uma VM funciona varia consoante o tipo.
Numa VM orientada para o sistema, existe normalmente um hypervisor entre o hardware físico e os computadores virtuais. Um hypervisor é software que distribui componentes como capacidade de processamento, memória, armazenamento e capacidade de rede do host por várias máquinas virtuais.
Imagine que um servidor físico executa três máquinas virtuais. Cada VM pode então funcionar como se tivesse o seu próprio computador, enquanto, na realidade, partilham o hardware do mesmo host. O hypervisor gere quais os recursos que cada VM pode usar e mantém os diferentes ambientes o mais separados possível.
A capacidade disponível continua a depender do computador físico. Se o host tiver pouca memória, capacidade de processamento ou armazenamento, as máquinas virtuais também podem ser afetadas por isso.
Uma VM orientada para processos funciona de forma diferente. Nesse caso, o código de programa é executado dentro de um ambiente de software fixo. O código Java, por exemplo, é convertido em instruções que podem ser executadas por uma JVM. Assim, o mesmo código pode ser executado em diferentes sistemas operativos e tipos de hardware, desde que exista uma JVM adequada disponível.
As blockchain-VM's executam código de programa segundo regras fixas que são iguais para os nodes participantes. Por isso, o mesmo código com a mesma entrada deve produzir sempre o mesmo resultado.
Que tipos de Virtual Machines existem?
As Virtual Machines são normalmente divididas em dois tipos principais: VM's orientadas para o sistema e VM's orientadas para processos.
O que é uma Virtual Machine orientada para o sistema?
Uma Virtual Machine orientada para o sistema é um computador virtual no qual podem ser executados um sistema operativo próprio e aplicações.
A VM recebe versões virtuais de hardware, como um processador, memória, armazenamento e uma ligação de rede. Um hypervisor gere então a forma como as diferentes máquinas virtuais usam o hardware real do host.
Hyper-V e KVM são exemplos de tecnologias com as quais estas máquinas virtuais podem ser criadas.
Uma vantagem disto é que vários sistemas operativos podem ser executados num único servidor físico. Assim, pode separar diferentes aplicações ou ambientes de trabalho entre si sem precisar de um computador físico separado para cada ambiente.
Essa separação também pode ajudar na segurança. Se uma máquina virtual falhar ou for atacada, isso não significa automaticamente que as outras máquinas virtuais também sejam afetadas. Ainda assim, continua a ser importante uma configuração segura do host e do hypervisor.
O que é uma Virtual Machine orientada para processos?
Uma Virtual Machine orientada para processos é um ambiente de execução para código de programa e não um computador virtual completo com um sistema operativo próprio.
A Java Virtual Machine (JVM) é um exemplo conhecido disso. Um programa Java é convertido para um formato intermédio que a JVM consegue compreender. Uma JVM adequada pode então executar esse código em diferentes sistemas operativos e tipos de hardware.
A JVM determina quais as instruções disponíveis e como o código Java se deve comportar durante a execução. A execução técnica exata pode variar consoante a JVM.
As blockchain-VM's assemelham-se mais a este tipo de VM do que a um computador virtual completo, porque se destinam sobretudo a executar código de programa segundo regras fixas.
Que papel desempenha uma Virtual Machine numa blockchain?
Numa blockchain programável, uma Virtual Machine determina como os smart contracts e outro código de programa são executados.
A VM define quais as instruções possíveis e como essas instruções podem alterar o estado da blockchain. Assim, diferentes nodes podem executar e verificar a mesma transação segundo as mesmas regras.
Ethereum usa para isso a Ethereum Virtual Machine (EVM). A Ethereum não regista apenas transações, mas também um estado atual com, entre outros, contas, saldos e dados de smart contracts.
Quando um smart contract é colocado na Ethereum, o código de programa compilado é armazenado como bytecode. Se alguém chamar o contrato mais tarde, a EVM executa este bytecode.
A Virtual Machine e o mecanismo de consenso têm, neste contexto, tarefas diferentes. A VM determina o que uma transação faz tecnicamente. O consenso garante que os participantes chegam a acordo sobre quais as transações e qual o novo estado que são aceites pela rede.
Nem todas as blockchains têm uma VM geral para smart contracts. A Bitcoin, por exemplo, usa o Bitcoin Script para definir condições para a movimentação de bitcoin. Isto é deliberadamente mais limitado do que um ambiente geral de smart contracts como a EVM.
Como funciona a Ethereum Virtual Machine (EVM)?
Uma transação na Ethereum pode, por exemplo, enviar ETH, criar um novo smart contract ou chamar um smart contract existente.
Quando um smart contract é criado, o bytecode compilado é armazenado numa conta de contrato. Se alguém chamar o contrato mais tarde, a EVM executa este bytecode.
A EVM funciona como uma stack machine. Pode ver uma stack como uma pilha de valores. A EVM pode colocar valores nesta pilha e voltar a usá-los para realizar cálculos.
A stack da EVM pode conter, no máximo, 1.024 itens. Cada item é composto por 256 bits.
Durante a execução, a EVM usa memória temporária para cálculos. Esta memória desaparece após a transação. Os smart contracts podem, além disso, armazenar dados em armazenamento permanente do contrato, para que estes fiquem novamente disponíveis em transações posteriores.
Cada instrução da EVM, também chamada opcode, tem um determinado custo de gas. O gas indica quanta capacidade de cálculo e outros recursos de rede uma ação utiliza. O limite de gas de uma transação determina quanto gas a execução pode consumir no máximo.
No final, paga pelo gas que é efetivamente utilizado. Nas transações da Ethereum ao abrigo do regulamento MiCA, segundo EIP-1559, o preço do gas inclui, entre outros, uma base fee e uma priority fee. A base fee é queimada. A priority fee vai para o validator que propõe o bloco no qual a transação é incluída.
Exemplo: Imagine que envia uma transação para um smart contract para transferir tokens. A EVM executa o código do contrato, verifica as condições e ajusta os saldos armazenados se tudo estiver correto. Para executar estas instruções, a transação usa gas.
Que outras blockchain-Virtual Machines existem?
Além da EVM, existem outros ambientes de blockchain para executar programas e smart contracts. Estes podem usar outras linguagens de programação, modelos de armazenamento e regras de execução.
Solana usa, por exemplo, uma runtime na qual os programas são executados como bytecode sBPF. Os programas são compilados para ficheiros ELF com código sBPF e depois executados num ambiente isolado.
Em vez de gas, a Solana usa, entre outros, compute units para medir quanta capacidade de cálculo uma transação utiliza. As diferentes instruções dentro de uma transação partilham o mesmo compute budget.
Sui usa a linguagem de programação Move para smart contracts. Os smart contracts são publicados na blockchain como Move packages e podem criar e alterar objetos on-chain.
Sui trabalha, nesse contexto, com um modelo de objetos. Um objeto on-chain tem, entre outros, um ID único, um proprietário e um número de versão. As transações podem ler, alterar, transferir estes objetos ou criar novos objetos.
Isto difere da Ethereum, onde as contas e o armazenamento de contratos desempenham um papel central. As blockchain-VM's podem, portanto, ter o mesmo objetivo geral, mas ser tecnicamente muito diferentes na sua estrutura.
Para que são usadas as Virtual Machines?
As VM's orientadas para o sistema são muito usadas quando vários sistemas operativos ou aplicações têm de ser executados num único servidor físico. Isto acontece, por exemplo, em ambientes de cloud e centros de dados.
Também são usadas para separar entre si ambientes de desenvolvimento, teste e produção. Além disso, ambientes virtuais completos podem ser guardados como VM-images ou discos virtuais e reiniciados mais tarde.
As VM's orientadas para processos são usadas sobretudo para permitir a execução do mesmo código de programa em diferentes sistemas. Assim, uma aplicação não precisa de se adaptar diretamente a cada combinação de hardware e sistema operativo.
As blockchain-VM's tornam possíveis transações programáveis. Executam smart contracts e podem, por isso, por exemplo, alterar dados armazenados, mover tokens ou realizar outras ações segundo as regras de um contrato.
Quais são as vantagens e limitações de uma Virtual Machine?
As Virtual Machines oferecem várias vantagens, mas também têm limitações.
Nas VM's orientadas para o sistema, estas são vantagens importantes:
-
Utilização mais eficiente do hardware: Vários computadores virtuais podem partilhar os recursos de um único host físico.
-
Separação entre ambientes: Diferentes sistemas operativos e aplicações podem funcionar de forma independente uns dos outros.
-
Os problemas ficam mais frequentemente limitados: Um erro ou falha numa VM não tem automaticamente consequências para todas as outras VM's no mesmo host.
-
Os ambientes são mais fáceis de reutilizar: Com VM-images e discos virtuais, um ambiente de software completo pode ser guardado e reiniciado.
Essa separação não é totalmente estanque. Numa chamada VM escape, um atacante pode tentar obter acesso ao hypervisor ou ao host a partir de uma máquina virtual. Uma má configuração também pode enfraquecer a separação entre VM's.
As Virtual Machines também usam recursos por si mesmas. O hypervisor e os diferentes sistemas operativos virtuais exigem capacidade de processamento, memória e armazenamento. Se demasiadas VM's usarem a mesma máquina física, podem competir entre si por estes recursos.
Nas VM's orientadas para processos, a portabilidade é uma vantagem importante. Em contrapartida, o código tem sempre de funcionar dentro das regras e dos recursos disponíveis da runtime.
Nas blockchain-VM's, a vantagem está sobretudo na execução previsível de smart contracts. Ao mesmo tempo, os cálculos e o armazenamento numa blockchain são limitados. As redes estabelecem limites para a quantidade de capacidade de cálculo e armazenamento que uma transação ou smart contract pode usar.
Além disso, cálculos mais complexos podem causar custos de transação mais elevados. Por isso, cálculos pesados nem sempre são práticos para serem executados totalmente numa blockchain.
Conclusão
Uma Virtual Machine pode ser um computador virtual completo, um ambiente para executar código de programa ou uma runtime especializada para smart contracts.
As VM's orientadas para o sistema tornam possível executar vários ambientes informáticos separados no mesmo hardware físico. As VM's orientadas para processos tornam o código de programa mais fácil de transportar entre diferentes sistemas.
No âmbito das blockchains, VM's como a EVM garantem que os smart contracts são executados segundo regras fixas. Assim, as transações podem fazer mais do que apenas transferir valor.
Há, no entanto, limitações. As Virtual Machines continuam dependentes dos recursos disponíveis e as blockchain-VM's estabelecem ainda limites para capacidade de cálculo, armazenamento e custos.