跳转到内容

设计理念

OpenOS 的设计遵循一系列明确的原则,这些原则指导了架构决策和实现选择。

原则: 内存安全是不可妥协的要求。

实现:

  • 使用 Rust 语言,编译期内存安全
  • 借用检查器消除 use-after-free、double-free
  • unsafe 边界明确标记硬件交互点

权衡:

  • 学习曲线较陡
  • 某些硬件交互需要 unsafe
  • 生态系统成熟度低于 C

原则: 内核只做最必要的事情。

实现:

  • 微内核架构
  • 仅核心服务在内核空间:内存管理、调度、IPC
  • 驱动和大部分服务运行在用户空间

权衡:

  • IPC 开销较高
  • 更复杂的启动序列
  • 性能调优更困难

原则: 所有重要的事情都应该是显式的。

实现:

  • 无全局状态(无全局 FD 表,无 errno)
  • 显式权限(Handle + Rights)
  • 显式资源管理(所有权系统)

权衡:

  • 代码更冗长
  • 需要更多样板代码
  • 但更易于理解和调试

原则: 一个组件的故障不应影响其他组件。

实现:

  • 用户空间驱动隔离
  • 独立的地址空间
  • 进程间 IPC 通信

权衡:

  • IPC 开销
  • 更复杂的错误处理
  • 但系统更健壮

原则: 系统应该由可组合的构建块组成。

实现:

  • 基于端口的 IPC
  • 消息传递模式
  • 服务可以独立替换

权衡:

  • 需要定义清晰的接口
  • 版本兼容性挑战
  • 但系统更灵活
方面OpenOSLinux
内核大小小 (~100 KiB)大 (~10 MiB)
驱动位置用户空间内核空间
故障隔离
IPC 开销
可验证性
性能中等
方面OpenOSseL4
形式化验证
实现语言RustC
内存安全编译期保证形式化证明
成熟度研究项目生产就绪
许可MIT/Apache-2.0GPL
方面OpenOSZircon
目标平台x86_64 裸机多平台
IPC 模型基于端口Channel + Handle
进程模型简单复杂(Job, Process, Thread)
文件系统VFS 占位符完整实现
成熟度研究项目生产就绪

详细的设计决策请参考 架构决策记录

关键决策:

OpenOS 的设计受到以下项目的影响:

  • 最小系统调用数量
  • 能力(Capability)作为唯一的访问控制
  • 形式化验证的启发
  • Handle 与 Rights
  • Channel 与 Handle 传递
  • VMO/VMAR 概念
  • 同步消息传递
  • Pulse 用于异步通知
  • 微内核架构
  • 每进程命名空间
  • 资源管理器作为用户空间服务器
  • 一切皆文件的理念
  1. 完善 IPC - 实现完整的端口消息传递
  2. 用户态进程 - ELF 加载和 Ring 3 切换
  3. 基本驱动 - 键盘、磁盘驱动
  1. 文件系统 - VFS 和基本文件系统
  2. 网络栈 - TCP/IP 实现
  3. 显示服务器 - 基本图形支持
  1. 形式化验证 - 关键组件的正确性证明
  2. 多核支持 - SMP 调度
  3. 安全增强 - 能力系统、内存保护