NoWayOS
ZH
GitHub
菜单关闭

2026年11月13日

那个不是复制品的备份

阿波罗 11 号带着两套按不同原理构建的制导系统飞行,而且两套都用上了。阿丽亚娜 5 号带着两套完全相同的系统飞行,一个故障让两套都停了。这种差别有个名字,而 NoWayOS 的构建方式,就是为了站在正确的那一边。

人人都知道应该有备份。但很少有人接着问那个不太好回答的问题:到底是什么的备份?

五次警报

1969 年 7 月 20 日,阿波罗 11 号的登月舱距离月面只有几分钟时,它的制导计算机发出了一个警报,机组不得不向任务控制中心询问。接着又是一个。在下降的最后一段,一共五次。

计算机过载了。它接下来所做的,是这个故事里最了不起的工程成就之一:每一次,它都重新启动,丢掉可以等的工作,立刻接回不能等的工作。着陆继续进行。

这是人人都讲的部分。接下来值得讲的部分,发生在第二天。

第二套系统

登月舱带着第二套制导系统,而它并不是第一套的备用复制品。它由另一家公司按另一种原理建造。主系统靠一个在万向架上自由转动的平台保持方位。第二套根本没有万向架:它的传感器直接固定在航天器上,哪边是上,它靠计算得出。

它的用处,是在主系统万一停止工作时把机组送回轨道。着陆期间没有用到它。

后来,在上升返回、与指令舱对接的途中,一连串机动把主系统的平台带到了万向架平台唯一应付不了的那个位置,它失去了姿态基准。机组切换到第二套系统来稳住航天器,并完成了对接。

第二套系统不可能以同样的方式失效。它没有那个部件。

两个一样的

现在讲另一个故事。1996 年,第一枚阿丽亚娜 5 号升空时带着两台惯性基准装置,告诉它自己指向哪里:一台工作,一台待命。它们完全相同,连软件也一样。

三十七秒后,软件里的一个数变得太大,超出了为它留出的空间。待命的那台停了。工作的那台,在同一次飞行中运行着同样的代码,也停了。调查委员会的报告是公开的,说得很直白:没有可以切换过去的东西,因为备份已经走了同一条路。

两个复制品。一个故障。什么都没剩下。

工程师怎么称呼它

一个故障把系统和它的备件一起带走,这叫共因故障。对付它的办法是多样性冗余:第二套系统的构建方式要足够不同,使得让第一套停下的东西不在第二套里。

航天飞机就是这样飞的。它的四台飞行计算机运行一家公司的软件;第五台运行的是另一家公司单独编写的软件。四个复制品能防住一台坏掉的计算机。它们防不住一个写错的程序,因为四台都在运行它。

这不是没有代价的。航天飞机的首次发射被取消,就是因为第五台计算机和另外四台在时间上对不上。两种设计比一种更费工夫,而且必须让它们对得上。

NoWayOS 的位置

如今大多数专用设备运行的,是为数极少的几种通用操作系统之一。它们的备份也是。当浏览器引擎、桌面或数千万行的内核里出现一个缺陷,或者一个有问题的更新被推送出去,它会在这种软件运行的每一个地方出现,就在同一天。

NoWayOS 设备在内部是不同的。它的内核是 seL4,约 10,000 行。内核之上属于我们的一切都用 Rust 编写。它没有浏览器引擎,没有桌面,也没有 Shell,所以这些东西里的缺陷不在它里面。

这意味着 NoWayOS 不必取代您正在运行的系统才有用。它可以站在旁边:完成一项关键任务的第二种方式,按另一种原理构建。

它做不到什么

多样性有局限,我们宁愿由我们来告诉您。

它给 NoWayOS 设备的是不同的故障,而不是没有故障。对两套系统共用的东西,它无能为力:电源、网络、它们背后的服务,或者对这项任务本该是什么的误解。而且 NoWayOS 的一些开源部件也用在别的软件里,所以每个镜像都会列出它包含的每一个组件,让您可以读到它与旁边的系统有哪些共同之处。

NoWayOS 正在开发中,所以这是它为之设计的角色,而不是它已经担当过的角色。安全页面说明了它的依据。

阿波罗的工程师带上第二套系统,并不是因为他们预计第一套会失效。他们带上它,是因为他们无法证明它不会失效,而且他们确保,无论是什么让第一套停下,在第二套里都找不到任何熟悉的东西。