Xous:用纯 Rust 重新思考嵌入式操作系统
作者:Andrew Huang (bunnie)
演讲:https://media.ccc.de/v/39c3-xous-a-pure-rust-rethink-of-the-embedded-operating-system#t=30
Xous 是一个完全用 Rust 实现的消息传递微内核,面向安全嵌入式应用。本次演讲将介绍该操作系统的三个创新之处:
- 硬件内存管理单元 (MMU) 支持(以及我们为何需要自主研发芯片来实现此功能)
- 如何以及为何用 Rust 实现 Rust 标准库(而不是像大多数其他 Rust 平台那样调用 C 标准库)
- 如何将 Rust 语义的强大功能与虚拟内存相结合,从而创建安全高效的异步消息传递原语
Xous 结合了基于页面的虚拟内存和 Rust 强大的借用检查语义,为进程间异步消息传递提供了一种安全高效的方法。这种进程间通信模型便于分离不同的任务,同时保持内核核心的精简。
该过程与 Rust 的“借用/可变借用/移动”概念完美契合,并将对象传递视为一种进程间通信 (IPC) 原语。我们将演示其原生工作原理,并举例说明如何将常见的编程算法映射到进程间安全的数据传递,以及如何在用户空间完全实现调度和同步等原语。
最后,我们简要演示一下 Xous 在 Baochip-1x 上的运行情况,将 Xous 从仿真和 FPGA 领域带到了日常用户可以使用的物理硅领域。
仓库:https://github.com/betrusted-io/xous-core
文档:https://betrusted.io/xous-book
演讲者 bunnie 于 2002 年获得 MIT 电气工程博士学位,著有 2003 年免费发布的《破解 Xbox:逆向工程入门》这是首批关于高端消费品逆向工程的出版物之一。
其实在 5 年前,他就众筹把 Xous 运行在极其精简、经过严格审计且可审计的 FPGA 硬件上。
文章《eBPF 策略执行:Rust、kfuncs 和正则表达式的结合》
作者在 Linux 内核的 eBPF 探针中直接运行 Rust 原生正则表达式(Regex)库,通过在系统调用或 LSM(Linux 安全模块)钩子中同步触发正则匹配,可以在恶意脚本或命令执行前拦截它们。
技术亮点:无修改移植 no_std 代码。文章最引人注目的结论是:Rust 的 no_std 代码几乎不需要任何修改即可在 eBPF 环境中运行。
- Proof of Concept (PoC):作者成功将 Rust 的正则库(如
regex-lite或其底层组件)暴露给 eBPF 探针环境。 - 代码复用:证明了现代 Rust 的抽象能力使得原本为嵌入式或底层开发的库能够无缝迁移到复杂的 eBPF 内核约束中。
解决 eBPF 的严格限制:在 eBPF 中运行复杂的正则匹配通常面临以下挑战,文章探讨了应对方案:
- 无堆分配(No Heap):eBPF 不支持标准堆内存。作者利用了 Rust 的
no_std特性,通过预分配缓冲区或使用栈上空间来管理匹配状态。 - 验证器限制(Verifier Constraints):eBPF 验证器对循环和指令数有严格限制。作者可能利用了内核较新版本中的“解限循环”(Open-coded loops)或对正则引擎进行了有界约束,以确保其能通过验证。
- 安全性与性能:内核空间匹配避免了将数据从内核态频繁拷贝到用户态的开销(Context Switch),显著提升了安全防御的响应速度。
结论与意义: 该实验证明了 eBPF 的边界正在不断扩展。通过 Rust,开发者可以利用现有的生态系统工具,在不改动内核源码的情况下,实现极其复杂且高性能的安全策略和数据包处理逻辑。
阅读:https://www.dawidmacek.com/posts/2025/regex-in-ebpf/
文章《OnceMap:Rust 中用于仅运行一次并发工作的模式》
这篇文章介绍了 Rust 编写的 Python 包管理器 uv 所采用的 OnceMap 并发模式,旨在确保昂贵的并行任务(如依赖解析或下载)仅执行一次。
该模式通过结合 DashMap 与 Tokio 的 Notify 原语,实现了任务在“进行中”、“已完成”和“未开始”状态间的协调与去重。其核心逻辑包含 register(注册意图)、done(完成信号)和 wait(等待结果)三个协议方法。此外,文中还强调了通过 pin! 宏和“先注册后检查”的策略,解决了异步任务可能错过通知并导致永久挂起的竞态问题。

阅读:https://codepointer.substack.com/p/uv-oncemap-rust-pattern-for-running
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论