  Virtual machines (VM) are widely used to host and isolate software modules.
However, extremely small memory and low-energy budgets have so far prevented
wide use of VMs on typical microcontroller-based IoT devices. In this paper, we
explore the potential of two minimal VM approaches on such low-power hardware.
We design rBPF, a register-based VM based on extended Berkeley Packet Filters
(eBPF). We compare it with a stack-based VM based on WebAssembly (Wasm) adapted
for embedded systems. We implement prototypes of each VM, hosted in the IoT
operating system RIOT. We perform measurements on commercial off-the-shelf IoT
hardware. Unsurprisingly, we observe that both Wasm and rBPF virtual machines
yield execution time and memory overhead, compared to not using a VM. We show
however that this execution time overhead is tolerable for low-throughput,
low-energy IoT devices. We further show that, while using a VM based on Wasm
entails doubling the memory budget for a simple networked IoT application using
a 6LoWPAN/CoAP stack, using a VM based on rBPF requires only negligible memory
overhead (less than 10% more memory). rBPF is thus a promising approach to host
small software modules, isolated from OS software, and updatable on-demand,
over low-power networks.
