写过固件的人都踩过这个坑——每次远程更新都要整 OTA,今天 Wasm 把这件事彻底变了
写过固件的人大概都踩过这个坑——每次要远程更新设备程序,都要走一整套 OTA 流程,刷坏了就只能派人去现场。今天 WebAssembly 把这件事彻底变了:固件不用动,应用逻辑可以独立更新。
这不是在说 WASM 要替代 C——FOSDEM 2026 的一场演讲把这个现状说清楚了。
FOSDEM 2026 实测:Wasm 真的跑进了 Nordic 和 ESP32
Fedor Smirnov 在 FOSDEM 2026 分享了他们在 Myrmic 项目里的完整经验。Myrmic 是一个开源的 Rust 中间件,专注于分布式系统的微控制器固件。整个技术栈从 Embassy 固件、embedded HAL 到 Wasm 工具链和运行时,全部用 Rust 写成。
他们的目标硬件是 Nordic nRF5340 和 ESP32-C5 这类资源受限设备——256KB SRAM、1MB Flash,跑一个 RTOS 就差不多了。在这种硬件上跑 WebAssembly,听起来像天方夜谭。
但他们真的跑起来了,还跑了四个运行时做横向对比:Wasmi(解释器)、Tinywasm(预编译)、Wasmtime(Pulley VM)、WAMR(AOT 编译)。每个运行时都跑了同一个 benchmark 模块,然后测了内存占用和执行时间。
结果很有意思:
| 运行时 | 内存占用 | 执行方式 | 适用场景 |
|---|---|---|---|
| Wasmi | ~50KB SRAM | 解释执行 | 开发调试,零预热 |
| Tinywasm | ~25KB SRAM | 预编译 .tw | 极度受限设备 |
| Wasmtime Pulley | ~80KB SRAM | 模拟器 VM | 中等资源设备 |
| WAMR AOT | ~120KB SRAM | AOT 编译 .aot | 有额外存储用于编译 |
这是实际跑在 nRF5340 开发板和 Seeed Studio XIAO nRF54L15 上的数据,不是跑在笔记本上的模拟结果。
为什么固件要用 Wasm?OTA 更新不需要动底层代码
FOSDEM 这场演讲的核心论点不是「Wasm 比 C 快」,而是「Wasm 让固件有了插件系统」。
传统 MCU OTA 流程:固件包 + 签名 + 差分算法 + 双 BANK 切换。出问题了要么回滚,要么现场维修。
Wasm OTA 流程:Wasm 模块是纯数据,可以走和固件完全不同的通道更新。出了错,Wasm 沙箱会拦截住,不会把主系统弄挂。运行时可以独立热更新,不需要动底层固件。
这对工业 IoT 场景特别重要——工厂里的网关设备通常在难以物理接触的地方,OTA 失败的风险很高。Wasm 的沙箱隔离把单次更新失败的影响范围锁死在那个模块里。
Rust 嵌入式生态在 2026 年的现状:比你想的成熟
这场演讲之所以值得关注,是因为它代表了 Rust 嵌入式生态的一个完整闭环:
Embassy 提供了 async 运行时和 HAL,Wasm 提供了可移植的执行单元,WASI 0.3 提供了标准接口。三个层叠在一起,终于让「一门语言写固件、一门语言写应用逻辑」变成了现实。
2026 年的 Rust 嵌入式开发生态有几个关键数字:
- Embassy 已成为 Cortex-M 上最主流的 async 框架,2025 年新上线的项目里用它多于 RTIC
- FAA 和 NHTSA 开始接受 Rust 代码用于航空和汽车,认证流程比 C 更简单(内存安全是天然证据)
- WASI 0.3 已在 Wasmtime 37+ 稳定支持,微控制器上的轻量级网络栈需求在 WASI 0.3 的异步原语下可以得到满足
下一步:如果你想试
第一步:看 benchmark 数据。他们的 GitHub 仓库(syzer/memory-benchmark-wasm-runtimes)里包含了四个运行时在两块开发板上的完整集成代码,可以直接拿来跑。
第二步:按硬件选运行时。Flash 超过 512KB、RAM 超过 128KB 的设备可以跑 WAMR AOT;极度受限的设备用 Tinywasm;开发阶段用 Wasmi 避免编译等待时间。
第三步:考虑 Ariel OS。这个全 Rust 写的 RTOS 内置了 Wasm 支持,对新手更友好——Kaspar Schleiser 在 FOSDEM 2026 也有一场专门讲它的演讲。
Wasm 跑在微控制器上这件事,2026 年已经不是一个实验性话题了。它在工业 IoT、分布式系统和固件热更新这几个场景里,正在变成一个真实的工程选项。
评论区
登录后可评论。