Boa pergunta! Trabalho na equipe ZeroVM e espero poder ajudar a esclarecer as coisas!
O ZeroVM está fornecendo um contêiner semelhante ao Docker?
Não, na verdade não. O Docker usa o LXC e outros recursos do kernel para fornecer um ambiente em área restrita. O ZeroVM é executado inteiramente no espaço do usuário e coloca em sandbox um único aplicativo.
Resumidamente, o ZeroVM funciona primeiro validando o aplicativo a ser executado e, em seguida, simplesmente executando-o. Quando executado, o aplicativo é executado basicamente sem custos adicionais - não há máquina virtual por trás dele.
Para validar um aplicativo, ele deve ser compilado em uma forma especial de código de máquina x86. Este formulário especial possui a propriedade agradável de que pode ser estaticamente verificado como "seguro". Entre outras coisas, "seguro" significa que o código não vai pular para endereços fora de um determinado segmento de memória fornecido pelo ZeroVM. O programa também não pode fazer as chamadas normais do sistema, mas apenas uma interface syscall muito estreita fornecida pelo ZeroVM. Essa validação é obtida no projeto Native Client do Google .
Como eu usaria o ZeroVM para executar o Wordpress? Que benefícios isso proporcionaria?
Em princípio, você poderia compilar de forma cruzada o programa C que é o intérprete PHP. O ZeroVM poderia então iniciar o intérprete PHP na sandbox e alimentar os arquivos PHP que compõem o WordPress. O ZeroVM fornece um sistema de arquivos na memória somente leitura e isso pode ser usado para ler um banco de dados SQLite. Isso daria a você um site WordPress somente leitura - não muito emocionante :-)
No entanto, a meu ver, esse não é o principal caso de uso do ZerovM. Os aplicativos pesados de banco de dados existentes precisam ser reescritos para uso com o ZeroVM. O ZeroVM é mais voltado para sistemas escalonáveis em massa, nos quais você deseja processar muitos itens de dados em paralelo.
Imagine que você possui 1.000.000 de e-mails que você precisa pesquisar. Os e-mails são armazenados em um armazenamento em bloco, como o OpenStack Swift ou o Amazon S3 . Isso significa que os arquivos físicos são armazenados em algum número de servidores de armazenamento. Tradicionalmente, você precisaria puxar todo o correio para algum número de nós de computação para procurá-los. Com o ZeroVM e sua integração com o Swift , você pode enviar o código para os dados . Isso é possível porque o código é pequeno (alguns megabytes) comparado a uma imagem de máquina virtual volumosa e porque é seguro executar código não confiável na caixa de proteção ZeroVM.
Portanto, o ZeroVM é destinado a arquiteturas altamente escaláveis, nas quais cada solicitação opera em diferentes partes de dados.
Para um site WordPress, isso pode significar que você deve armazenar cada postagem do blog em uma parte separada dos dados e ter uma instância dedicada do ZeroVM responsável por cada postagem. Atualmente, o sistema de arquivos é somente leitura, mas há planos para torná-lo de leitura e gravação e a instância do ZeroVM responsável por uma determinada postagem no blog pode lidar com coisas como comentários. Você precisaria de um balanceador de carga na frente capaz de rotear o tráfego adequadamente. O resultado é uma arquitetura muito diferente da atual do WordPress, mas mais escalável. Atualmente, implementar isso é deixado como um exercício para o leitor.