WebAssembly Summit 总结:不要因为走得太远,而忘记为什么出发

1,957 阅读9分钟

本文作者:Tim McCallum 就职于Second State

编者按:Tim 参加了上周召开的 WebAssembly Summit,并与 Wasm 社区进行了深入交流。WebAssembly 在这几年得到了很大的发展,但我们不能忘记 WebAssembly 的最大优势:安全。

我们不想在开发者生产力和用户安全之间做妥协,我们两者都要!

2020年2月10日,WebAssembly 峰会在硅谷举行。 会场位于加利福尼亚州普利茅斯圣山景城1625号,这是Google 最新的建筑。

file

这个组织活动组织的非常棒 ,向这个崭新的 WebAssembly 社区传递了明确的讯息:

“Be actively awesome to each other!”

“成为彼此进取而给力的伙伴!”

Wasm 峰会主要议题

这次峰会的讲者阵容非常出色。 来自 Mozilla 的 Lin Clark 为这次活动拉开了序幕,她发表了关于构建 WebAssembly 新型生态系统的开幕演讲,发人深省,令人拍案叫绝。

之后,演讲者们陆续走上讲台,恣意高谈 WebAssembly 未来的发展,句句金石之言。

来自 Cloudflare 的 Ashley Williams 就 WebAssembly 的未来以及 WebAssembly 与诸如 Javascript 等其他支持技术的关系做了一个精彩的演讲。

来自苹果公司的 Tadeu Zagallo 分享了一些有趣的研究成果,这些成果是针对 WebKit 的 WebAssembly 实现的编译、启动和运行时等 benchmarking 领域进行的研究和开发

Peter Salomonsen 演示了如何使用 WebAssembly 创作和演奏音乐,给观众留下了深刻的印象。

Jonathan Beri 从嵌入式系统的角度定义了物联网(Internet of Things,IoT) ,并继续探索 WebAssembly 作为嵌入式运行时环境中介语言的应用

Kevin Hoffman,Capital One 银行的架构主管,阐述了 Wasm 在云中 的好处。 Kevin 引入了一些新的想法和工具(中级和高级运行时)来支持这些想法。我非常同意这里的一个重要信息: WebAssembly 是分布式计算的未来。(我曾经也撰写过一篇文章来讲解 WebAssembly 与分布式计算的关系)

来自 MediaWiki 的 Brion Vibber 讨论了 Wikipedia 的 ogv.js media-compatibility-shim 架构,以及浏览器内媒体丰富的空间中存在的挑战

在享受了一整天吸收各种 Wasm信息,以及与其他行业专业人士的交流之后,是时候让来自谷歌(同时也是 WebAssembly Community Group的主席)的最后一位演讲者 Ben Smith 发表闭幕主题演讲了。

Ben 的演讲题目是《把派(PIE)做大》。 正如 Ben (见下图)提到的,也许有些人没有意识到,“5年前,WebAssembly 甚至还根本不存在”。 有趣的是,早在2013年,就可以通过 emscripten 和 asm.js 证明编译 c 和 c + + 代码能够兼容现代浏览器。 Alon Zakai 在2010年创建了 emscripten,后来又共同创建了 WebAssembly 和 asm.js。像他这样的开创性发展,提供了具体的证据有力地证明了 C 、C + + 以及最终其他语言都能用在Web上。

左: Alon Zakai 右: Ben Smith

从 WebAssembly 特定的角度来看,2015年,一小部分开发者设法开发出了 WebAssembly 的可执行(二进制)和 s-expression (文本)格式。 当时的一个特性要求是创建一个可以在两种格式之间进行转换的机制。 Ben 最初创建这种机制的工作被称为 sexpr-wasm (代表 s-expression to wasm)。

在接下来的4.5年里,这个项目继续发展,并在2016年9月重新命名为 WABT。

Wabt 是 WebAssembly 的一套超强大的工具,是 WebAssembly 开发和部署的基础。 WABT 的目标是完全保持和符合 WebAssembly 规范。

我个人认为,每个使用 WebAssembly 完成过某些任务的开发者都使用过 WABT。

WebAssembly 卑微的出身

最初 WebAssembly 的设计并不起眼,它的设计初衷仅限于前面提到的 asm.js。 也就是说,允许用 c 和 c + + 等语言编写的计算机软件作为 web 应用程序运行。

Ben的演讲解释了 WebAssembly的应用是怎样演变得如此之多的。 Ben 的演讲聚焦于增长和繁荣, 特别是关于争取多赢的局面。就像 Ben 说的那样,把蛋糕(PIE)做大。

正如前面提到的,WebAssembly 一开始就有一系列非常低调的目标。 一个[小]Pie。

让我们来看看2015年左右的Pie。

2015年中期的 Pie

A:能力,Wasm能做什么? // play around with numbers and memory P:producer,谁 / 什么可以制作《天空》 ? // C++ I:互操作性,能够和谁交互? // Javascript E:embedder,什么可以运行 Wasm? / / Web 浏览器

2020年的 WebAssembly

短短几年时间里,WebAssembly 取得了长足的进展。

A:能力

目前有100多个不同的项目使用 WebAssembly。 这些应用包括自由手绘应用程序、媒体播放器、 Gameboy 仿真器、浏览器内压缩 / 解压应用程序,甚至还有一个AR数独解谜应用程序。

P:producer

目前大约有15种编程语言可以以稳定的、面向生产的方式编译到 WebAssembly。 其中包括: .Net,AssemblyScript,C,Rust,Haskell,Rust 和 Zig。 还有更多的正在开发中。

I:interoperability

WebAssembly 现在有了一个基于能力的 API 设计,它允许 WebAssembly 代码与外部世界交互,同时仍然保留了 WebAssembly 的沙盒特性。 而且,曾经强大而有用的 Web api 集合现在正不断得到实现。

E:embedder

现在可以在许多不同的平台上运行 WebAssembly。 目前正在积极开发的运行时大约有20个。 WebAssembly 不再局限于浏览器。 这里有区块链实现、无服务器应用程序、操作系统可执行程序和物联网实现的例子,它们被部署在独立和受限制的嵌入式运行时环境中。

看到这么多不同的项目和运行时,真是令人惊讶。

回归初始(Going full circle)

在推动这一进程和享受 Pie 变大的同时,我想说我们还必须回到起点,反思 Lin Clark 在开幕主题演讲中所传递的信息。

随着 WebAssembly 渐渐应用到浏览器以外的地方,我们需要记住,我们会遇到一些不一定具有浏览器同样沙盒功能的情况。 沙盒有助于实现 WebAssembly 的主要优势之一:安全性!

现在,大约80% 的代码(在给定的项目中)由预先存在的库和依赖项组成, 这在重用和效率方面是非常妙的。 软件开发者非常清楚,预先存在的模块可以让我们节省时间,也可以构建更好的软件。这是站在巨人的肩膀上。 不幸的是,攻击者可以将恶意代码植入这些可重用模块中。 软件开发者必须尽量避免普遍存在的漏洞,这样才能保护使用软件的用户。

实现高度安全、安全和隐私的最佳方法之一是确保软件产品不能访问最终用户的系统资源。传统的虚拟机(VM)和容器提供了一层沙盒,剥夺了软件访问主机系统的能力。

那么,就隔离而言,我们如何实现同等级别的安全呢?

WebAssembly 的安全性是经过精心设计的。 例如,默认情况下 WebAssembly 对每个模块进行沙箱处理; 模块对 api 或系统调用没有任何访问权限。 使用 WebAssembly 时,如果开发者希望模块访问 API 或系统调用,则需要主动声明访问,然后作为附带模块的一部分要提供这些信息。这使得模块的意图非常公开和透明,不会有所隐藏。

WebAssembly 系统接口 (WASI) 提供了一种基于功能的安全性,不同的模块可以对不同的资源拥有不同的权限。 WebAssembly 的未来设想,是应用每个模块虚拟化的细颗粒度形式。 使用这种设计,开发者能够发现恶意模块,而不会将该代码包含在他们正在构建的应用程序的依赖关系树中。

重要的是,正如 Lin 提到的,安全性的保证,不是使用 WebAssembly 时直接出现的。我们必须遵循良好的惯例,并将安全保证集成到我们的工具中。 这将需要一些工作。

作为一个社区,我们可以选择让我们的用户默认是安全的。

这些经过深思熟虑的模式和设计已经开始集成到了由诸如字节码联盟(Bytedance Alliance)之类的项目提供的工具中。

在峰会期间,我看到了很多 WebAssembly 的新项目和用例。 在结束时,我感受到了 WebAssembly 未来可能性的启发。 我离开峰会的时候,脑子里一直在想一句话。 “我们不能在开发者生产力和用户安全之间做妥协。 我们两者都要! ”

Lin 在演讲的最后引用了她的团队成员、《星际迷航》的联合创作人卢克 · 瓦格纳的话:

“我们有机会为本机开发构建新的可移植和可伸缩的默认安全基础。 我们需要采取深思熟虑的跨行业行动,以确保这一切以正确的方式发生。”

作为 W3C 的新成员,我非常期待参与之后的电话会议讨论,这些电话会议会谈到 WebAssembly 的提议以及更广泛的 WebAssembly 社区组织(GC)主题,正如本文中所提到的那样。

我要感谢这次活动的组织者。 实际上,所有参与者都是“活力四射,超群拔萃”的。 我见到了许多来自世界各地领先技术公司和项目的新朋友。 如果要我给出一个反馈,那就是“请明年再举办这个活动”。 我相信届时,Wasm社区所取得的成就,会给大家带来新的惊喜。