Rust SIG Meeting - 2026-06-23 #31
PLeVasseur
started this conversation in
General
Replies: 4 comments
0 replies
0 replies
0 replies
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Hey folks 👋 welcome to our 12th meeting of 2026.
Rust SIG Meeting 2026-06-23
Agenda
Check-in area
We had roughly 13 people present at peak attendance, including those listed below.
Housekeeping
#rust-sigTasks / action items
Meeting Minutes
Zenoh + Rust + Microcontrollers = zenoh-nostd; Angelo Corsaro - Eclipse Zenoh
Slides are available from the chat here:
2026.06.23-zenoh-nostd.pdf
Quick Zenoh intro
Angelo started Eclipse Zenoh and acts as Eclipse Project lead.
Smart-city work in the late '10s pushed the Cloud-to-Device Continuum pains into the open, which is what gave rise to Zenoh.
Very few (no?) protocols at the time could run from a microcontroller all the way up to the cloud.
Distributed queries were a key piece too. Keeping data local to some storage is a practical requirement in a lot of places, and that's hard to solve with classic databases.
The need was emerging and cut across industries — IoT, medical devices, automotive.
The Zenoh Protocol is the same whether you're on a microcontroller or in the cloud. Other middlewares/protocols split here: DDS uses DDS-XRCE on constrained devices, MQTT differs too. Zenoh gives unified, location-transparent abstractions for high-performance pub/sub and distributed queries across heterogeneous systems.
The Distributed Computing Platform
Diagram & Example (the louvre temperature-sensor walkthrough)
*matches a single chunk,**matches across multiple. Solouvre/**/sensor/tempsubscribes across the whole subtree.Introductory Example
.put(/* keyexpr */, /* value */).Running queries
Disambiguating RPC from Querying
Protocol Stack
Any Topology
Topology in Perspective
Implementations
Original implementation was written in OCaml and was deployed into production. One reason for the Rust rewrite: the biggest Zenoh user needed 24/7 support, and there was a lack of OCaml programmers to staff it.
It stayed in OCaml up to 2017. OCaml runtimes were single-threaded back then — seen as a large limitation. (Situation has since improved in OCaml.)
A user asked them to write it in Go; the structure and lack of expressivity in Go was tough to accept.
Rust was explored for Zenoh in 2015 but didn't feel quite there yet — the borrow checker at that point was seen as too immature.
Revisiting in 2017 landed on more-or-less what became the Rust 2018 edition. Async landing was a positive. And there was the eventual promise of putting Rust on microcontrollers, e.g. STM32.
Eclipse Zenoh (in the Eclipse SDV WG)
eclipse-zenoh/zenoh— pure-Rust reference implementation of the protocol, with APIs for all the mainstream languages (C, C++, C#, Go, Kotlin, Java, Elixir, Python, TypeScript, Dart, ...).eclipse-zenoh/zenoh-pico— C implementation targeting embedded; implements the full protocol except mesh routing. Exposes C and C++ APIs, essentially identical to the C/C++ API on zenoh.zenoh-nostd
Two buckets of motivation: the obvious and the less obvious.
Obvious — Rust + microcontroller. Memory-safe concurrent code on embedded MCUs. You can do it in C or C++, but you have to bring the discipline yourself. Rust requires and enforces that discipline.
Less obvious — forward-looking. Wanted a clean rewrite of the protocol that could be shared between std and no-std. A more manageable stack to play with protocol innovations. And to prepare the road for Zenoh 2.0.0 (the 2nd version of the Zenoh Protocol).
Question: "No alloc, so do we fix sizes in zenoh-nostd?"
Question: "Didn't you hit issues introducing the no_std and async functionality?"
Protocol Implementation
Protocol Implementation Rewrite
Zenoh Protocol in zenoh
commons/zenoh-codecandcommons/zenoh-protocol.zenoh-codec: 6650 SLOC.zenoh-protocol: 6334 SLOC. Total 12984 SLOC (implementation only, not counting tests & co).Zenoh Protocol in zenoh-nostd
zenoh-proto, leaning on procedural macros fromzenoh-derive.zenoh-derive: 2088 SLOC.zenoh-proto: 2721 SLOC. Total 4809 SLOC.Messages
zenoh-nostd Architecture
zenoh-nostd/platform.zenoh-sansiois a "Sans I/O" implementation of the Zenoh Protocol State Machine — the protocol engine written without I/O. Decoupling from I/O makes properties much easier to verify; common practice in FP circles.api/(user-facing: Session/Broker, Pub/Sub/Queryable/Querier, Sample/Query/Response, callbacks) →io/(driver rx/tx loop, lease timers, link traits) →zenoh-sansio(handshake FSM, Tx batch/frame, Rx decode) andplatforms/*(concrete I/O: std, embassy, wasm) →zenoh-proto(wire format).Dependencies
zenoh-examplespackage, which pulls in the platform crateszenoh-std(std feature),zenoh-embassy(esp32s3 feature), andzenoh-wasm(wasm feature).zenoh-nostd(API + io), which sits onzenoh-sansio(sans-I/O transport), which sits onzenoh-proto(messages + codecs), which useszenoh-derive(proc-macros).APIs
P2P Latency
Throughput
puton a session already reaches ~10M msg/s in experiments; proper batching will be opt-in via API.Latest on Zenoh
Question: "What esp32-s3-specific features are there (shown as a dependency on the previous slide)?"
Question: "I see the strength of Zenoh for distributed systems. Compared to e.g. Embassy's native pub/sub channel implementation — is there still an edge to using Zenoh on a single-core application where I just want different software units to talk to each other?"
Note (@cpetig): "If you ever want to rewrite the dissector in Rust, this older example might come in handy (I did similar things 3 years ago, also for a complex protocol): https://github.com/cpetig/wireshark-veloren/blob/main/rust/src/lib.rs"
Credits
Closing
Q&A notes
Audience questions were captured inline with the part of the talk they came up in (see the talk notes above).
Recent events / things coming up for Rust
No recent events or upcoming items were captured in the source notes.
Requested topics
No requested topics were captured in the source notes.
Material
All reactions