graciano codes

Logo do wasm com efeito aesthetic 3D

O que é Web Assembly?

“Nem só de javascript viverá a humanidade”

Javascript é uma ótima linguagem. Inclusive quem diga que ela vai dominar o universo. Óbvio que isso é um exagero e muitos desses links afirmam isso. Mas, ao mesmo tempo, tem um fundo de verdade, que na minha humilde opinião, é uma consequência que não se limita aos aspectos técnicos do javascript em específico: a internet está dominando o mundo. Literalmente.

O sistema dominante atual é capitalista e nos últimos 20 anos, as maiores empresas do planeta são majoritariamente de tecnologia no critério “valor da marca”. O top 4, em números de 2018, são Apple, Google, Amazon e Microsoft. No vídeo, pode-se notar que empresas que focavam em hardware como GE e IBM foram ultrapassadas pelos citados cavaleiros do apocalipse, que atuam desde o hardware em si, como por exemplo a Amazon AWS, até as interfaces com o usuário, já que Google e Apple são quem domina os sistemas operacionais de celulares. Enfim, todas em algum aspecto fundamental da sua existência (ou mais de um) usam (e moldam) a internet.

O javascript é simplesmente a linguagem da internet. Em um dos textos linkados no primeiro parágrafo, “Will JavaScript take over the programming world?” o autor afirma:

“For a long time, “write once run anywhere” was supposed to mean Java, with its armies of virtual machines for every platform (…) As developers realized that the Web was the easiest way to create user interfaces for shared data, more and more programming activity shifted away from ‘classic’ GUI implementation to building web applications.”

Em português:

“Por muito tempo, “escreva uma vez, execute em todo lugar” deveria significar Java, com seus exércitos de máquinas virtuais para todas as plataformas (…) Enquanto os desenvolvedores perceberam que a Web era a maneira mais fácil de criar interfaces de usuário para dados compartilhados, mais e mais desenvolvimento se afastou da implementação ‘clássica’ para aplicações web.”

Java foi criado para ser onipresente, mas não é. Cada novo hardware precisaria da jvm além de seu sistema operacional. Como a internet dominou todos esses aspectos, javascript se tornou de fato onipresente. Quem faz sistemas operacionais está sempre preocupado com sua própria atualização (via internet) e com a experiência do usuário. O que torna impensável não existir alguma forma de acesso do usuário a internet (mesmo que não seja usuário final do produto, como o caso de uma geladeira ou um fogão, onde javascript ainda não é tão forte). O texto, por ser de 2013, também citou o asm.js, que é tipo um pai ausente do Web Assembly que não chegou a ser padronizado na w3c, mas possui pollyfills e pode ser usado em produção. Como é o caso do Adobe Lightroom, que usa código “legado” em C++ no browser.

# Tá, mas esse tal de WASM?

Wasm é apenas uma abreviação de Web Assembly. Uma maneira rápida de descrever o que esta tecnologia faz, que seria “uma maneira de usar linguagens que não javascript num navegador”, como disse a Lin Clark, engenheira da Mozilla em entrevista ao podcast Bike Shed. Porém, a coisa não se limita por aí. Como o wasm não é uma linguagem em si, mas um “compile target”, as possibilidades de portabilidade e onipresença são enormes. Afinal, o wasm seria como um “bytecode” que roda na runtime do javascript, podendo ser executado fora do browser também. É aí que vem o WASI: uma forma de executar wasm fora da web, em qualquer sistema operacional. O WASI tem todo o potencial de ser a jvm que deu certo, já que:

  • Como o WASI usa o POSIX, seus binários poderão rodar em qualquer sistema unix ou GNU, sem a necessidade de se instalar uma máquina virtual nesses sistemas
  • A segurança por padrão do wasm tem vantagens em relação a compiladores nativos de C++, de java então, nem se fala
  • Por ser desenvolvida na w3c e não numa empresa for-profit como a Oracle (dona do java), os interesses de toda a comunidade de desenvolvedores estará melhor representado

“Se WASM+WASI existissem em 2008, nós não precisaríamos ter criado o Docker. Este é o quão importante isso se tornou. Webassembly nos servidores é o futuro da computação. Um padrão de interfaces de sistemas era o elo que faltava. Espero que WASI esteja a altura desta missão.” - Solomon Hykes, co-fundador do Docker

Enfim, o objetivo aqui foi mais de contexto e algumas pirações para o futuro, fico devendo um tutorial de como programar para o wasm de fato. Até porque eu ainda estou aprendendo ¯\_(ツ)_/¯

Edit 02/05/2019, 11:35: correção de gramática e adição de tradução do trecho apresentado em inglês. Além de informações extra para mais clareza.