对 Serenity OS 的 Andreas Kling 采访(2022)
对业余操作系统的热情引发了关于“从零开始”的 OS 能在多大程度上不同于 Unix 风格设计的争论,涉及事务性文件系统、统一的事件订阅 API、以及基于数据库或面向对象的存储。评论者分享了如何从内核、引导加载器和底层编程入手的资源与经验,同时将这种动手学习与直接定制 Linux 或其他现有系统进行对比。在这些技术构想背后,还存在着一种张力:一边是怀旧驱动的项目,另一边则是试图真正重新思考 OS 架构、性能与用户体验的努力。
新 / 玩具 OS 的动机
- 几位评论者都被吸引去构建“玩具”或实验性的 OS,以探索那些不太适合现有内核(尤其是 Linux)的想法。
- 动机包括教育价值、底层工作的直观乐趣,以及对当前抽象(POSIX、“一切皆文件”、字节流管道)的不满。
- 也有人更愿意基于现有内核/发行版开展工作,并主要在 userland API 和 UX 上创新。
文件系统、数据库与事务
- 大家强烈希望文件系统语义更适合数据库和崩溃安全:
- 使用写屏障或事务性 I/O,避免
fsync开销和数据损坏。 - 对大多数应用采用内核级结构化持久化,而不是原始文件 I/O。
- 使用写屏障或事务性 I/O,避免
- 关于 DB 与文件系统的争论:
- 有人认为大型数据库应该使用原始设备或专用分区;也有人指出这并不能帮助应用里无处不在的“小型 DB”。
- 有人提议在真正的数据库之上实现文件系统(丰富的元数据、标签、触发器、快速搜索);文中提到了 WinFS 以及各种大型机 / AS/400 模型等先前尝试。
- 也有人警告,早期事务性文件系统性能很差且容易死锁,说明 DB 语义可能并不适合通用文件系统。
统一的事件与订阅 API
- 希望有一个单一、连贯的内核 API,用来对任何资源(文件、设备、进程等)“获取状态并订阅变化”,而不是如今这种杂乱的混合方案(procfs 轮询、inotify、专用 syscall)。
- 对 TOCTOU 竞态的担忧;设想包括为资源保留访问权或采用快照式事件流。
- 反对意见指出,像某些安全产品那样的同步授权和保留机制会拖慢系统;任何设计都必须避免用户可见的性能下降。
- 相关建议包括:Fuchsia 风格的信号、类似 io_uring 的命令队列(同时意识到其安全陷阱)、带事务提交/回滚的推测执行。
执行模型与隔离
- 一种想法是:将所有用户态程序都作为 WebAssembly 运行在 ring 0 中,使用软件边界检查而不是硬件隔离;这样可以避免 TLB 刷新 / 上下文切换,但对于计算密集型代码可能会更慢。
- 讨论的内容还包括这种方式在何时可能优于原生进程,以及共享单一地址空间的问题。
OS 开发的难度与入门路径
- 共识是:写出“某种” OS 是可行的;真正困难的是避免把系统做成难以维护的乱局,并达到现代系统的复杂度。
- 推荐的资源与路径:OSDev wiki、裸机 “hello world” 教程、xv6、在 Raspberry Pi 上用 Rust 的教程、Linux From Scratch(用于系统组装,不是内核设计)、QEMU/Bochs(用于安全实验)。
- 有人主张从简单硬件或现有内核开始;也有人支持全新设计。
替代 OS 模型与灵感来源
- 提到了 Plan 9、BeOS、seL4、capability systems、Inferno、Haiku、Redox、Fuchsia、Nix/Guix,以及把语言当作 OS 的想法(Smalltalk、Forth、类 Lisp 系统)。
- 还有把文件重新想象为智能对象、以空间 / 3D 为先的桌面、以及无状态、类似 Git 的系统镜像与事务性升级 / 回滚等提议。
关于价值、怀旧与 UX 的争论
- 爱好者认为业余 OS 很有学习价值,也能探索全新的模型。
- 怀疑者则把复古的、类似 Win95 的项目视为怀旧驱动、社会价值较低,认为精力应投入更面向未来或更有影响力的工作。
- 还有持续的旁支争论:自 90 年代以来桌面 UX 是否真的有进步;有人认为是在倒退,另一些人则强调搜索驱动的启动器、平铺 / 吸附,以及整体稳定性等确实带来了提升。