Como concluímos uma migração massiva de Kafka e Cassandra
6 de junho de 2024Análise de composição de software e SBOMs: uma defesa unida
6 de junho de 2024O cofundador da WebAssembly, Ben Titzer, continua pensando grande…
Atualmente ele é diretor do Centro de Pesquisa WebAssembly da Carnegie Mellon University (onde Titzer também é pesquisador principal no departamento de Software e Sistemas Sociais da escola). O centro se concentra no avanço da pesquisa sobre WebAssembly na academia, no ensino e treinamento de estudantes e no apoio amplo à adoção do WebAssembly em novos domínios.
Mas Titzer também continua o trabalho de longa duração em sua linguagem de programação desenvolvida internamente, Virgil – e em uma máquina virtual especial que executa WebAssembly chamada Wizard, que pode ter um papel na mudança da maneira como executamos software.
No mês passado, Titzer discutiu seu trabalho em uma aparição especial em um novo canal do YouTube chamado Microarch Club, para uma longa entrevista com Dan Magnum, engenheiro-chefe de nuvem da plataforma IoT Golioth.
Mas tem sido um interesse sentido. Durante a entrevista, Titzer revelou que, mesmo sendo estudante do ensino médio, ele estava escrevendo um intérprete em código assembly x86 para algum bytecode “que eu inventei”.
E quando estava entrando na pós-graduação, Titzer já sabia que queria escrever uma nova linguagem de programação chamada Virgil…
Adaptando Linguagens de Alto Nível em Microcontroladores@TitzerBL descreve técnicas de otimização que podem ser usadas para trazer recursos de linguagem de alto nível para microcontroladores, como compactação de referência, romização e análise de membros alcançáveis. pic.twitter.com/J6YjcWVA3d
– Microarch Club (@MicroarchClub) 24 de maio de 2024
Virgílio
O repositório de Virgil no GitHub o descreve como uma linguagem “projetada para construir sistemas leves de alto desempenho” (com um compilador que produz executáveis nativos rápidos, módulos WebAssembly ou JARs para JVM). “Espero fazer do Virgil uma ótima linguagem de programação de sistemas”, disse-me Titzer em uma entrevista por e-mail, “que elimine o lixo legado e ainda tenha ótimos recursos para escrever códigos de sistemas robustos… coisas como máquinas virtuais, compiladores, kernels, rede pilhas, etc
“Rust tem muita emoção, mas não pode fazer o tipo de coisa que Virgil faz.”
Titzer investigou mais detalhes sobre o podcast. Como uma linguagem para escrever no nível mais baixo, Virgil “precisa ter recursos que permitam fazer coisas que são ‘nojentas’ e ‘perigosas’, a partir do conceito de uma pessoa pura de linguagens de programação. Por exemplo, se você estiver realmente familiarizado com a segurança e a teoria dos tipos, poderá ficar desanimado com o fato de poder usar um ponteiro para a pilha e percorrer a pilha dessa maneira. Ou que você pode mapear algo na memória e tem um ponteiro para isso. Ou que você pode chamar o kernel. Então isso o diferencia.”
E há mais um recurso interessante. “Eu adicionei um recurso onde você poderia basicamente pegar o código da máquina e dizer: ‘Esta é uma função agora. Esta é uma função de Virgílio – e tem o ABI de Virgílio.”
Titzer rapidamente reconheceu no podcast que é “uma operação absolutamente descaradamente insegura”, mas “você precisa ser capaz de fazer isso, porque há instruções que nunca vou convencer meu compilador a emitir, como POPCNT ou todos os SIMD instruções…”
É um projeto emocionante. “O reinado de C não é absoluto”, escreveu Titzer certa vez em um comentário de 2022 no Hacker News. “Virgil compila em pequenos binários nativos e roda no espaço do usuário em três plataformas diferentes sem um pingo de código C, e roda em Wasm e JVM para inicializar. Eu investi mais de 12 anos da minha vida para inicializá-lo do nada, apenas para mostrar que isso pode ser feito e que podemos pelo menos ter um ambiente de usuário completamente diferente.”
No podcast, Titzer acrescentou que depois de mais de uma década de trabalho, “É definitivamente o tipo de coisa que tenho feito por mais tempo e que mais investi ao longo do tempo… muitas noites e fins de semana, trabalhando nisso. .” E ele chamou Virgil de “descaradamente uma linguagem de programação de sistemas… quero dizer, esse é o tipo de coisa em que você escreveria uma máquina virtual”.
Então ele brincou: “Estou fazendo isso agora, porque não posso”. parar evitar escrever máquinas virtuais, como um vício que tenho…”
Mago
Quando Titzer foi questionado no podcast se Virgil estava sendo usado em alguma aplicação, ele disse que era seu maior fã. “Existe uma biblioteca combinadora de analisadores por aí, existem bibliotecas de soquetes por aí e algumas coisas assim. Tenho sido principalmente eu construindo sistemas com ele – você sabe, como o maníaco solitário no órgão da catedral. (Ele ri.) Com a luz das velas e a capa.
“Mas, então, eu construí o Wizard, que é um mecanismo de pesquisa que roda WebAssembly e é todo escrito em 100% Virgil – não há código C.”
A importância do Wizard surgiu quando perguntaram a Titzer qual era seu objetivo com Virgil. É apenas para pesquisas adicionais ou ele está buscando uma adoção mais geral?
Titzer: Gosto da ideia de mais adoção, mas definitivamente não quero ficar em dívida com usuários que têm demandas. (Eles riem.)
Magnum: Isso complica as coisas, não é?
Titzer: ‘Então, por favor, use-o, mas não peça nada…’ Quer dizer, essa obviamente não é uma posição sustentável. Eu tenho problemas e respondo a problemas e coisas assim. Mas definitivamente não estou procurando sucesso. Não pretendo competir com Rust. Não pretendo competir com Zig. Não pretendo fazer as pessoas usá-lo em seu próximo sistema de produção. Ao mesmo tempo, gosto que as pessoas o usem e façam coisas legais com ele, contribuam de volta… Meu objetivo é pesquisar sobre WebAssembly. E então tudo o que faço no nível da linguagem tem que ser focado em tornar o Wizard melhor, só porque não tenho tempo para alternar constantemente sobre questões de design de linguagem.
O repositório do Wizard chama seu mecanismo/máquina virtual de “o primeiro mecanismo Wasm a fazer interpretação rápida no local do bytecode Wasm”. (“Para um rápido retorno nos testes e depuração, os programas também podem ser executados diretamente em um interpretador integrado.”)
Mas Titzer elaborou em nossa entrevista por e-mail: “Meu objetivo principal para o Wizard é construir um mecanismo Wasm completo e rápido o suficiente para pesquisa. A pesquisa é um pouco diferente da produção, portanto, ser simples, flexível, acessível, ter boas ferramentas de introspecção e depuração e menos código legado ajudam nesse objetivo.
“Não pretendo competir com motores de produção, exceto em recursos de análise dinâmica de programas. Por exemplo, um caso de uso razoável é retirar um programa da produção, registrar um rastreamento e depois analisá-lo no Wizard usando seu conjunto de ferramentas mais completo.”
‘Devemos fazer isso’
No final do podcast, Titzer foi questionado sobre sua visão para o futuro do WebAssembly – se ele o via crescendo e se tornando uma parte mais fundamental de nossa pilha de computação.
“Definitivamente…” disse Titzer. “Acho que o WebAssembly deveria ser o substrato universal do software – deveria ser o que está na base do software, no sentido de que toda linguagem é compilada para ele. E se você é capaz de executá-lo, então você é capaz de executar tudo…
“Isso significa que – ele precisa ter mais alguns recursos, mas também precisa ter mais penetração no ecossistema e mais ferramentas e coisas assim.”
Sim.
Por mais divertido que o código de máquina possa ser, vamos fazê-lo (principalmente) desaparecer abaixo de uma camada universal de abstração de software portátil. https://t.co/4XUuFC9S2g
-Ben L. Titzer (@TitzerBL) 14 de maio de 2024
Entre outras coisas, isso tornaria mais fácil analisar cada programa. “Existe um tipo de modelo de segurança embutido nele – como se você tivesse controle sobre o que um programa está fazendo, você tem entrada e saída claras através do mecanismo de importação/exportação. Acho que tem tantas dimensões diferentes de potencial que penso – devemos fazer isso”.
“Obviamente, as CPUs não irão desaparecer”, esclareceu Titzer, acrescentando que “Nenhuma arquitetura de conjunto de instruções que temos agora irá desaparecer… e haverá ainda mais CPUs no futuro.” Mas quando você tem um substrato de software, fica bem claro o que o aplicativo deseja. E tudo abaixo dele você pode trocar. Esse é o objetivo da virtualização, certo?”
Perguntei a Titzer quais sinais ele vê de que estamos caminhando para um mundo onde o WebAssembly pode se tornar o “substrato final do software”.
“Vejo muito interesse em usar o Wasm em domínios que não são web nem sem servidor”, respondeu Titzer. “Como um bytecode portátil, rápido e bem especificado com muitas linguagens direcionadas a ele, ele tem o potencial de tornar um domínio (por exemplo, sistemas embarcados, sistemas ciber-físicos, um sistema de plug-ins para um videogame) programável da maneira que era. não antes.
“A propriedade de sandboxing leve é uma consequência do encapsulamento bem especificado e permite a execução de código Wasm não confiável de todas as maneiras novas.”
Então perguntei se seu mecanismo de execução WebAssembly, o Wizard, teve um papel em nos trazer a este mundo… Titzer concordou que “ajuda a tornar isso possível, expandindo os limites” no espaço do motor, chamando o Wizard de “uma plataforma de pesquisa e incubação para ferramentas baseadas em motores que são mais difíceis de explorar em um motor de produção…”
Especificamente, “a interpretação rápida no local facilita o funcionamento de todas as ferramentas de análise dinâmica e depuração. Para mecanismos de produção, isso significa inicialização mais rápida e menor consumo de memória, de modo que as configurações onde o código é carregado dinamicamente podem ser dimensionadas para módulos maiores e ter tempo de resposta mais rápido; isso abre novas possibilidades de uso do Wasm para cálculos curtos e efêmeros, onde grandes custos de compilação antecipada tornariam isso proibitivamente caro.”
Perto do final do podcast, Titzer disse que estava gostando das visões de longo prazo da academia, trabalhando com todas as pessoas brilhantes da CMU e contribuindo para “a vanguarda do conhecimento humano”. Esse é o objetivo da pesquisa…”
E há mais uma consideração. “A próxima geração de estudantes? Eles precisam receber instruções e, você sabe, aprender os caminhos… Caso contrário, eles acabarão trabalhando em – LLMs ou algo assim. (Ele ri) “Eles deveriam funcionar em VMs…. Eles deveriam trabalhar em código de máquina e otimizações e compiladores e outras coisas! Quero deixá-los entusiasmados com isso…”
Perguntei a Titzer se ele viu o Wizard sendo usado em contextos educacionais – e ele disse que o usará no próximo semestre em um curso que está ministrando sobre máquinas virtuais.
E – sempre olhando para o futuro – Titzer acrescentou que “Espero empacotar um pouco mais para tornar isso possível em outros cursos de outros instrutores…”
A postagem Além do WebAssembly: a nova linguagem de programação de Ben Titzer, Virgil apareceu pela primeira vez em The New Stack.