作者 | Dan Mihai Dumitriu
译者 | 张怡
WebAssembly(简称Wasm)是一种虚拟指令集体系架构(virtual ISA)。Wasm支持轻量级、高效、安全的运行,非常适合资源有限的物联网(IOT)设备。它还具有灵活性和平台独立性,因此很容易为各种硬件平台开发应用程序。
随着万物互联程度越来越高,物联网(IoT)设备的数量呈爆炸式增长。这些设备有各种各样的形状和尺寸,从巨大的工业机器到微型传感器。虽然较大的设备可能运行在Linux或其他操作系统上,但较小的或者微型设备需要不同的方法。
为什么WebAssembly (Wasm)是小型物联网设备的完美选择呢?因为这些设备对于Linux来说太“大材小用”了,它们可能只需要使用电池供电。
1、挑战
首先,让我们看看在小型物联网设备上运行传统操作系统所面临的挑战。通常这些设备功耗较低,内存和存储容量有限。如果运行一个大的操作系统(如Linux)会浪费大量的资源,这可能很快就耗尽了设备的电池寿命。
此外,这些小型设备可能缺少支持完整Linux操作系统所需的硬件,例如硬件虚拟内存所需的内存管理单元(MMU)。小型物联网设备应用各种实时操作系统(RTOS)——例如FreeRTOS、ThreadX和NuttX。因此,我们无法在这些微小的物联网设备上使用Linux容器(又名Docker)。
其次,物联网设备嵌入式开发周期与云软件有很大不同。尽管对代码进行更改并不复杂,但将其交付给最终客户却要经历一个复杂的过程。通常,每个月都有一次代码冻结,在此期间,所有修改都要经过完整的硬件在环测试,甚至还需要在许多不同类型的设备上进行。
在成功测试新版本之后,将启动分阶段部署流程,以避免固件更新、客户投诉或服务升级等带来的问题。对于大多数客户来说,即使更改一个微小的代码到交付,可能也需要几周甚至几个月的时间。在敏捷开发和云时代,这个过程不再被接受。
2、WebAssembly
Wasm是基于堆栈的虚拟机和字节码格式的。最初是为Web浏览器插件设计的,但并不局限于Web应用程序。它是一个高效的多功能的运行环境,可广泛应用于各种应用程序——包括物联网设备。而且Wasm设计小巧,这使得它非常适合小型物联网设备。
Wasm模块的大小通常为几千字节,比典型的Linux内核或Linux容器要小得多。这种小尺寸意味着Wasm可以在内存和存储容量有限的设备上运行,并具有良好的性能。
将Wasm用于IoT设备的另一个优点是,它是一个独立于平台的运行环境。这意味着Wasm模块可以用任何编程语言编写,并在任何支持Wasm的平台上执行。这种灵活性使得物联网设备开发应用程序变得更加容易,无论硬件或软件环境如何都不用发愁。
开发人员可以选用他们喜欢的、擅长的编程语言编写代码,然后将其编译和在目标设备上执行。像C/C++、Rust、JavaScript都得到了很好的支持。当然也存在一些语言不太友好,但随着Wasm不断的规范化发展而得到完善。
Wasm组件在沙箱环境中执行,这意味着它们与系统的其余部分是隔离的。这使得攻击者很难利用系统中的漏洞,因为他们无法访问底层操作系统或硬件。这对于没有虚拟内存的小型物联网设备尤其重要。此外,Wasm可以在部署之前进行验证和签名,这为系统额外增加了一层安全保护。
一些Wasm运行环境支持AoT(Ahead of Time,运行前编译),它接受Wasm字节码并生成目标机代码(CPU/MCU)。这在小型IoT设备的运行中非常有用,甚至是必不可少的,因为这些设备可能没有可用的CPU和内存来执行JIT(即时编译),就像我们通常在云端或电脑桌面上做的那样。
AoT编译可以成为云服务的一部分,该服务同时管理着部署在物联网设备上软件的运行。AoT编译的代码几乎以本机速度运行,比Micropython等解释性语言(直译语言)快几个数量级。
3、发展
虽然Wasm已经出现好几年了,但它仍然是一项相对较新的技术。与传统编程语言和架构相比,Wasm可用的工具和库并不多。Wasm的某些规范仍在发展中,比如对Python等主流语言所需的GC的本地支持。然而,随着越来越多的开发人员在各种应用程序中采用Wasm,这种情况正在迅速改变。
Wasm在物联网设备上使用的另一个困难,是缺乏对特定于某个硬件的功能的支持。由于Wasm是一个独立于平台的运行环境,所以它不能直接访问设备的硬件或传感器等外围设备。
开发人员必须使用Wasm和本机代码的组合来访问设备的硬件,并创建一个WASI API来扩展硬件功能。Wasm社区正在努力标准化WASI (WebAssembly System Interface)规范中的各种系统接口。
4、结论
总的来说,在物联网设备上使用Wasm的优点远远超过潜在的缺点。Wasm是一个轻量级的、高效的、安全的运行环境,非常适合资源有限的设备。它还具有灵活性和平台独立性,可以轻松地为各种硬件和软件环境开发应用程序,并为小型物联网设备带来敏捷开发。
随着物联网设备数量的持续增长,对于开发人员来说,希望为这些设备创建高效、安全的应用程序,Wasm将成为越来越重要的工具。随着边缘计算的日益重要和物联网的蓬勃兴起,可以预见WebAssembly将在未来的计算中发挥重要作用。
——译者介绍——
张怡,51CTO社区编辑,主要研究人工智能算法实现以及场景应用,对机器学习算法和自动控制算法有所了解和掌握。
原文链接:https://thenewstack.io/why-webassembly-is-perfect-for-tiny-iot-devices/