本文转载自 The New Stack。
图片来源:由 Ben Schonewille 在 Shutterstock 上发布
随着越来越多的公司加入 WebAssembly (Wasm) 生态系统,Wasm 将迎来飞速发展。
然而,怀疑论者总是不以为然地反驳道:“它只是 Java Applet 2.0 而已。”若只看表面,我们完全可以理解他们对 Wasm 的抗拒情绪。毕竟对于作为过来人的技术人员来说,Java 当年“一次编写,到处运行”的口号犹然在耳。
在此提醒大家,Java Applet 是用 Java 编写的小型应用,以 Java 字节码的形式交付给用户。这些小程序在独立于 Web 浏览器的 Java 虚拟机 (JVM) 中运行,为 Web 应用提供了仅靠 HTML 无法提供的交互特性。该模式与 Wasm 非常相似。
当时,Applet 被认为能够增强浏览器功能并实现许多新型计算范式。然而,这项技术并没有获得广泛认可,在 HTML 标准中已弃用,如今鲜少使用。怀疑论者经常表示,Applet 的失败预示着 Wasm 的命运。
不过,我还是要冒昧地说一句,这次真的不一样。鉴于社区、性能、标准和分布式计算的整体成熟度等各种因素,Wasm 将在 Java Applet 倒下的地方崛起,风靡全球浏览器市场。
Wasm 将在 Java Applet 跌倒的地方取得成功的原因在于:WebAssembly 和 Java Applet 有着相同的目标和设计宗旨,即支持 Web 浏览器执行更多的计算密集型任务,并增强浏览器的功能,但两者的相似之处仅限于此。
强大的安全防护——专为零信任环境而设计
Applet 和 Wasm 都是沙盒模型,旨在创建隔离的计算运行时环境,防范安全威胁。但 Wasm 专为零信任环境而设计,并采用主机-客户机安全模型,不允许代码在未经明确许可的情况下在运行时之外执行任何操作。
更具体地说,Wasm 和 Java Applet 的目标都是在 Web 浏览器内运行代码,但两者的不同之处在于背后的 Web 安全防护实践。Java Applet 依赖于 JVM 沙盒,可以请求提权,由于其复杂的运行时和广泛的 API 访问,这会带来重大安全漏洞。
相比之下,Wasm 在更严格的沙盒中运行,不能直接访问系统资源。它通过线性内存模型最大限度地减少了攻击面,并与主机环境之间设有边界。与 Applet 不同的是,Wasm 在模块执行前授予所有权限,本质上更加安全。Wasm 的优势在于能够在浏览器中原生运行,并可接收频繁的自动更新,从而增强安全防护。
Java 的持续安全更新意味着繁重的更新负担,运行 Applet 的浏览器往往存在未修补的漏洞。换言之,Wasm 被设计为一个 Web 为先的 Web 原生零信任平台,而 Java Applet 则独立于 Web 环境,更像是一个繁冗的附件。
更快速、更流畅的用户体验和性能
作为 WC3 标准,Wasm 必须得到所有浏览器的原生支持。这意味着用户无需安装(或重新安装)Wasm。安全更新在后台进行,不会对用户造成干扰。使用 Applet 时,JVM 的更新着实令人头疼,而且总的来说,浏览器集成的设计和执行也不够完善。同样重要的是,Wasm 的性能非凡。而 Applet 则性能欠佳、启动慢、刷新慢。
Wasm 的速度足够快,可支持多种“实时”用例,如自动驾驶汽车、交互式多人游戏或人工智能——所有这些用例对 Java Applet 来说都是不可能的。Wasm 前景乐观的另一个迹象是服务器端用例的快速增长。Wasm 的快速加载和出色性能意味着关键后端应用可以达到严苛的性能目标。(注:这就是我们为什么将 Wasm 构建为开源 Unit 应用服务器堆栈核心组件的原因)。
社区以共同利益为重
Wasm 的创建初衷是合力打造更实用、更强大的浏览器。Wasm 由社区创建,从一开始就完全开放,从未被任何一个组织拥有或控制过。而 Java(和 Applet)由 Sun Microsystems 构建,后被 Oracle 收购,Oracle 对社区保持着严密控制。
开放性和大型支持社区预示着 Wasm 广阔的发展前景;Linux 和 Kubernetes 等最成功的开源项目和标准均由中立社区控制。同样地,字节码联盟 (Bytecode Alliance) 也是一个中立社区,由各方共同治理。这既增强了 Wasm 的合法性,也为希望在关键应用和用例中采用该技术的公司树立了信心。
结论:Wasm 增长日益迅猛
WASI 0.2.0 及对 Wasm 的其他改进为其广泛采用和快速发展扫清了又一障碍。诚然,我们依然任重道远。Java Aapplet 曾在工具开发方面具有短期优势。
控制公司可以构建并垂直整合其中大部分工具,从而简化开发人员工具链,构建依赖于 Applet 的应用。但随着时间的推移,这种优势会逐渐减弱甚至逆转。广泛的社区将创造更多的工具并培养更多的人才,从而推动生态系统发展。Wasm 在运行时支持的语言多于 Applet,这为更出色的开发人员体验奠定了核心基础。
对于 Web 的未来,Java Applet 和 Wasm 都曾有着宏伟的愿景。平心而论,Applet 也曾取得一定程度的成功。如果 Java 能够与时俱进,跟上云、无服务器、容器以及现代分布式应用和计算的所有其他新模式的发展,也许情况会有所不同。
不过,Applet 和 Wasm 之间的根本区别并不仅限于时机。Applet 只是众多 Java 用例中的一个,而 Wasm 则是专门构建的 Web 运行时,其零信任安全模型和高性能配置文件由社区而非某个控制实体设计。这种基因里的差异决定了 Wasm 将能够在 Applet 跌倒的地方取得成功。