NoWayOS
ZH
GitHub
菜单关闭

平台

从任务出发,自上而下构建。

您用 Rust 编写应用。NoWayOS 将它连同它所使用的驱动程序一起构建到 seL4 微内核之上。最终生成的镜像只包含这些,别无其他。

从应用到镜像

NoWayOS 设备是构建出来的,而不是配置出来的。四个步骤把您的代码变成一台只做那一项任务的设备,而每一步都会留下可供您检查的东西。

  1. 编写应用

    用 Rust 编写,由一个或多个保护域组成。屏幕可以用 NoWayOS 小巧的声明式 UI 核心构建,也可以用 React 设计,再在构建时由 Screen Compiler 转换。

  2. 描述系统

    Microkit 系统描述声明每个保护域、内存区域、通道和中断。与之并列的授权文件列出系统授予的一切,预期文件则列出系统运行时必须打印的内容。

    systems/hello.system   systems/hello.grants   systems/hello.expect
  3. 构建

    在开发容器中进行。构建会对照系统描述检查授权,然后写出镜像,并附上其软件物料清单和 seL4 配置记录。

    make image SYSTEM=hello
  4. 启动它,让它自我检查

    先在 QEMU 中:系统以无界面方式启动,必须按顺序打印预期文件列出的每一行,且不得打印该文件禁止的任何内容。然后在 Raspberry Pi 5 上,对照同一个文件进行检查。

    make qemu-test SYSTEM=hello

密封的隔离舱

NoWayOS 系统的每个部分(屏幕、输入、网络、您的应用)都在 seL4 微内核上运行于各自的保护域中。保护域拥有自己的内存,只持有其系统描述授予它的能力(capability):一项能力就像一张只开一扇门的门禁卡。seL4 强制执行这些能力,因此每个部分只能触及被给予的资源;按照设计,一个部分中的缺陷会留在该部分之内。

  • 监管器接收其他部分的故障,停止出故障的部分,并让系统干净地重新启动。当故障接连不断时,设备会进入故障安全状态,只有冷启动才能让它恢复。
  • 看门狗保护域只有在其他每个部分都回应其心跳时,才会喂硬件看门狗。
  • 角色限制每个部分可以获得什么:构建会拒绝某个部分的角色绝不应拥有的授权,例如把设备授予一个本应只负责绘制的部分。

类型化消息:先复制,再检查

保护域之间通过固定大小、带版本、布局明确的记录进行通信,这些记录经由共享内存上的单生产者环形缓冲区传递。每条记录都会先从共享内存中复制出来,然后才接受检查,因此发送方无法在检查与使用之间更改它。

每个处理外部输入的解析器都经过模糊测试,并且构建为永不 panic;每个消息解码器都有用 Kani 模型检查器完成的有界证明。

原生屏幕,没有浏览器

用户界面是一个小巧的声明式核心:布局、焦点和命中测试都在有界内存中完成,用 Rust 库 embedded-graphics 绘制,只重绘发生变化的部分。文字来自构建时预先绘制好的字形图集,因此设备从不解析字体文件。应用看到的是按键、指针和触摸事件,而从不接触 USB 或任何其他设备协议。

设计师可以继续使用 React。Screen Compiler 在构建时把按其支持的子集编写的屏幕转换为 Rust,对子集之外的任何内容一律拒绝,而不是近似处理。

里面有什么

领域 NoWayOS 为您提供的
运行时 基于 Microkit 和 rust-sel4 的保护域模式;一个监管器,停止出故障的部分并让系统干净地重新启动,在反复出现故障后进入故障安全状态;一个看门狗
消息 具有明确线路布局的类型化记录,以及共享内存上的单生产者环形缓冲区
驱动程序 显示(QEMU 的 ramfb、Raspberry Pi 5 的帧缓冲);输入(virtio、USB 键盘、鼠标和数位板);网络(virtio-net、Pi 5 的以太网);USB 主机(xHCI);UART;定时器;Pi 5 的风扇
网络 基于 smoltcp 的 IP 协议栈,支持 DHCP 和 TCP,只连接系统允许的目标;基于 rustls 和 RustCrypto 的 TLS 1.3 客户端
时间与信任 单调时间和挂钟时间是两种永不混用的类型;ECDSA P-256 签名检查;签名更新的记录;来自经过健康测试的硬件随机源的种子
用户界面 有界的声明式 UI 核心,提供布局、焦点和命中测试;基于 embedded-graphics 的渲染器;预先绘制的字形图集和图标
工具 开发容器;供产品代码仓库构建时使用的 make 片段;授权、unsafe、许可证和密钥检查;SBOM 和发布证据工具;QEMU 和 Raspberry Pi 运行器

硬件

平台 它的角色
QEMU(AArch64) 每个系统都先在这里、在开发容器中启动,并检查自身的输出
Raspberry Pi 5 人人都能买到的低成本参考开发板。用户界面、USB 输入、定时器和看门狗如今已在上面运行
NXP i.MX8 计划中的生产硬件,带有硬件信任根。目前尚不支持

NoWayOS 在 Apple 芯片(arm64)机器上开发。在 x86-64 上,开发镜像的软件包同样经过版本固定和审查,但该镜像尚未在那里完成端到端的构建和测试。

站在他人的肩膀上

NoWayOS 依托他人的成果,并坦然言明:seL4、Microkit、rust-sel4、seL4 设备驱动框架的网络队列、smoltcp、rustls、RustCrypto 以及 embedded-graphics。