vlambda博客
学习文章列表

破圈!不止于浏览器,WebAssembly 2020 大事记

【CSDN 编者按】所谓温故而知新,适当的梳理回溯历史发展,有利于对未来做出更加准确的判断和更加可靠的计划。本文,让我们一起来回顾 Wasm 2020 年的发展……


作者 | 夏歌    责编 | 张红月
出品 | CSDN(ID:CSDNnews)
WebAssembly(WASM)最初由 W3C 的Mozilla、谷歌、微软、苹果等公司合作研发,是浏览器内应用程序的高性能执行引擎。目前已经在主流浏览器中如 Chrome、Firefox、Edge、Safari 中得到了广泛的支持。
但是随着 WASM 在开发者社区中越来越流行,WASM 也正在成为服务端以及云计算平台上的新锐。
2019 年 12 月,Bytecode Alliance 字节码联盟宣布正式成立。这个联盟成立的主要目标就是通过协作实施标准和提出新标准,以完善 WebAssembly 在浏览器之外的生态。服务端的 WebAssembly 正式被人所熟知。
回到 2020 年,WebAssembly 的 2020 年是以年初在 Google 总部举办的 WebAssembly summit 开始的,这是 WASM 社区第一次大型线下会议。对 WebAssembly 感兴趣的开发者从世界各地出发,汇聚 Mountain View。虽然这次会议只有一天,但是涵盖了众多议题包括 Wasm 在浏览器与服务端的发展。这也是疫情前最后的国际技术大会之一。
要把 WebAssembly 用于服务端,我们必须将它与浏览器之外的计算环境进行适配。语言、库与工具链是关键。


破圈!不止于浏览器,WebAssembly 2020 大事记

语言、库与工具链


相比 2019 年, WebAssembly 在2020年支持的语言新增了这些!下面这些语言都可以被编译成 Wasm 字节码在浏览器或者 Wasm 虚拟机上运行。
  • Swift
  • Kotlin
  • Java
  • COBOL
  • .NET
  • Go
借助工具链 LLVM ,我们可以把多种语言写的库编译成 WebAssembly,进而在浏览器中运行:
  • TensorFlow.js:TensorFlow 官方团队实现了在 WebAssembly 中使用 SIMD 和多线程来增强 TensorFlow.js
  • FFMPEG:这是一个著名的处理音视频的库。在开发者 Jerome Wu 的努力下,将用 C 写的 FFmpeg 导出了 WebAssembly 格式,从而使 FFMPEG 可以在浏览器中运行。
上面只是列举了两个著名的库。在2020年,我们经常看到经典游戏借助 WebAssembly 可以直接在浏览器中运行。
借助这些高性能的 C 语言的库,我们看到一些公司的 Web 应用在浏览器中使用 wasm,主要集中在音视频领域
  • Zoom
  • Google Meet
  • Bilibili


破圈!不止于浏览器,WebAssembly 2020 大事记

Mozilla 之变


时间来到 8 月份,Mozilla 宣布裁员 250 人,这其中比较受影响的团队之一就是 WebAssembly 团队,包括 Cranelift 与 WASI 的开发者。而 WASI 正是服务端 WebAssembly 的最重要规范。一时间,与这个世界一样,WebAssembly 的未来产生了很多不确定性。


破圈!不止于浏览器,WebAssembly 2020 大事记

Bytecode Alliance 字节码联盟


字节码联盟经过1年的发展,联盟成员没有任何变化,无新增,也无删减。但是在 WebAssembly 规范上有了不少的进展。其成员公司 Fastly 雇佣了 Mozilla 裁掉的 WebAssembly 团队,为整个生态的稳定发展做出了重要贡献。
Bytecode Alliance 主要围绕 nanoprocess 进行创新:将 WebAssembly 从一种应用程序的“编译目标”,发展成为一种可以用来组织应用程序的“模块化生态系统”。
首先便是 WASI ,这是针对 WebAssembly 平台的系统接口。在 2020 年,我们看到更多的 Wasm 实施支持了 WASI,支持 WASI 似乎已经成为必须要做的事情。
  • Deno 支持 WASI
  • V8/Node.js 支持 WASI
  • 用于网络连接的 wasi-socket 已经有了原型
  • 用于机器学习的 wasi-nn 正在开发中
  • 字节码联盟之外的 SSVM 贡献了 wasi-tensorflow ,使 TensorFlow 可以在 WebAssembly 程序中以 native speed 运行。
其次是 Module Linking(模块连接),可以被视为是两个 Wasm 模块直接相互通信的一种方式。
然后是 Interface Types,可以使 Wasm 与一系列丰富的值类型“沟通。
为了实现这一系列目标,字节码联盟也将开发一系列 Wasm-tools。
  • wasmparser,这是一个 Wasm 文件解析器。它非常节省内存资源,因为不会进行任何额外的资源分配,并且可以通过“流加载”的方式进行解析;
  • wasmprinter,这个工具可以将一个以 .wasm 结尾的 Wasm 二进制格式文件转换为对应的 .wat 文本格式,这对于调试和测试将会很有帮助;
  • Wat & wast,这两个工具可以将以 .wat 和 .wast 结尾的 Wasm 文本格式代码转换为对应的二进制格式字节码,这对于运行测试用例非常有用(因为在文本格式下,维护测试用例将会更加方便);
  • wasm-smith,这是一个测试用例生成器。可以生成“伪随机”的 Wasm 模块,并且保证这些 Wasm 模块是合法有效的,可以将其用于模糊测试。

电商平台 Shopify 基于 WebAssembly 搭建了一个函数服务,让使用 Shopify 搭建电商网站的商户可以根据自己的业务需求在 Shopify 平台上传自己的函数代码。Shopify 团队选择 WebAssembly 是因为 WebAssembly 是安全的,不会写入外部的恶意代码;同时也是高性能的,能够满足电商对运行速度的要求。同样的模式,在其他 SaaS 平台上也有尝试,比如图片处理服务商 Cloudinary、流数据处理商 YoMo。


破圈!不止于浏览器,WebAssembly 2020 大事记

超越字节码联盟


同时,不在 Bytecode Alliance 的 Wasm 虚拟机团队也在以自己的方式为社区做贡献。
Wamser 在2020年底发布 1.0.0 版本,这是 Wasm 虚拟机中第一发布 1.0.0 版本的虚拟机。Wasmer 支持将多种语言编译成 wasm 字节码,并且能够在 Mac、Linux、Windows 上运行。Wasmer 同时也支持多种编译器,Cranelift、LLVM 以及编译成智能合约的 Singlepass。
SSVM 对 WebAssembly 的贡献在于类 WASI 的扩展。WASI 规范为开发者提供了一种机制,可以有效、安全地扩展 WebAssembly 虚拟机。根据实际场景的需求,SSVM 做了 Tensorflow、存储、命令界面、以太坊、Substrate 等扩展。
除了通用的云计算与边缘计算,WebAssembly 虚拟机在区块链领域有了显著的采用。目前市面上比较大的公链项目都采用 WebAssembly 虚拟机作为智能合约的执行引擎,如 Polkadot 的 wasmi 虚拟机、Cosmos 的 cosmos-wasm、EOS、Ethereum、Oasis Labs、Solana、Near、ParaState 等公链。


破圈!不止于浏览器,WebAssembly 2020 大事记

社区活动


2020年,除了第一届 Wasm Summit ,我们还看到了许多其他的 WebAssembly meetup,例如 WebAssembly Live。
2021 年初,Linux Foundation 要举办 Cloud Native Wasm Day,这或许可以被视为服务端 WebAssembly 将也被更广泛的开发者社区认可的信号。与此同时,第二届 WebAssembly Summit 也已经确定了举办日期。2021 年,中国的 Wasm 大会也在筹备中。
虽然 WebAssembly 的 2020 年充满波折,但 WebAssembly 的 2021 年依然充满希望。
参考资料:
  • Bytecode Alliance: One year update:https://bytecodealliance.org/articles/1-year-update

  • WebAssembly Landscape:https://webassemblytoday.substack.com/p/webassembly-landscape

  • WebAssembly Summit 2020:https://medium.com/wasm/webassembly-summit-2020-881510ccb0c2

  • How Shopify Uses WebAssembly Outside of the Browser:https://shopify.engineering/shopify-webassembly

  • Wasmer 1.0:https://medium.com/wasmer/wasmer-1-0-3f86ca18c043

  • The SSVM 0.7 release brings WebAssembly to the public cloud:https://blog.secondstate.io/post/20210202-ssvm-release/

  • Cloudinary:https://cloudinary.com/documentation/custom_functions#webassembly_functions

  • YoMo:https://github.com/yomorun/yomo-flow-ssvm-example

破圈!不止于浏览器,WebAssembly 2020 大事记

破圈!不止于浏览器,WebAssembly 2020 大事记

    
      
      
    

X86 "将死"?RISC-V 正当立