Solaris 到 illumos:延续至今的分支
Sun 曾将 Solaris 大部分源代码公开,Oracle 于 2010 年收购 Sun 后停止公开。了解 illumos 如何延续这份代码,以及 ZFS 和 DTrace 为何至今仍可运行。
Solaris 和 illumos 是什么
Solaris 和 illumos 是同一 Unix 源代码树的两个分支。Sun Microsystems 开发了 Solaris,并在 2005 年公开了其中的大部分源代码。Oracle 于 2010 年收购 Sun,随后停止公开这部分源代码。因此,Oracle 之外的开发者以新名称 illumos 继续维护这份开放代码。到 2026 年,Solaris 和 illumos 操作系统本身属于小众系统。但其中内置的存储层和跟踪工具并不小众,这正是这段历史值得了解的原因。
如果您在 Linux 或 FreeBSD 上运行 ZFS,那么您运行的是 Sun 为 Solaris 编写的代码。这些代码在 Sun、相关产品线以及许可证争议结束后仍然保留下来。本文将介绍这一过程,并核对相关日期。
Solaris 的起源:BSD、System V 和 SVR4
Sun Microsystems 由 Scott McNealy、Andy Bechtolsheim、Vinod Khosla 和 Bill Joy 于 1982 年 2 月 24 日创立。其操作系统 SunOS 源自 BSD(Berkeley Software Distribution),这是 Bill Joy 在 Sun 成立前参与开发的大学 Unix 分支。另一条 Unix 分支是 AT&T 的 System V,由商业公司销售。这两个分支就是最终发展出 Linux 的 Unix 家族谱系中所描述的分支,Sun 在之后的十年里一直属于 BSD 阵营。
1987 年,Sun 和 AT&T 宣布开展联合项目,将 BSD、System V 和 Xenix 合并为一个版本:UNIX System V Release 4,通常写作 SVR4。1991 年 9 月 4 日,Sun 宣布 SunOS 4 将由一个源自 SVR4、采用新市场名称的系统取代,即 Solaris 2。Solaris 2.0 于 1992 年 6 月发布,当时仅支持 SPARC 硬件。Sun 已经转向 Unix 分裂后的另一方,其客户必须移植自己的软件。
旧名称从未消失。内核沿用了 SunOS 的编号,因此 Solaris 2.6 运行的是 SunOS 5.6,而 Oracle Solaris 11.4 仍将自身报告为 SunOS 5.11。2026 年在 illumos 计算机上运行 uname -a 时,输出的第一个单词仍然是 SunOS,因为 illumos 连同代码一起继承了这个名称。
2005 年 Solaris 10 引入的功能
Solaris 10 于 2005 年 1 月 31 日发布。这里之所以要介绍它,是因为公司解体后仍保留下来的所有组件,都包含在该版本中,或是在其后续更新中加入的。
DTrace 由 Sun 的 Bryan Cantrill、Mike Shapiro 和 Adam Leventhal 编写,最早于 2003 年 11 月提供。它可以对运行中的内核和用户进程进行插桩,无需重新编译,也无需重启正在监控的进程。尚未启用的探针不会产生任何开销,因为只有脚本请求时才会注入插桩。这也是管理员愿意在生产机器上使用它的原因。DTrace 获得了《华尔街日报》2006 年技术创新奖的最高奖项,并于 2008 年获得 USENIX STUG(Software Tools User Group)奖。
ZFS 由 Sun 的 Jeff Bonwick、Bill Moore 和 Matthew Ahrens 设计,并于 2004 年 9 月 14 日公布。它将卷管理器和文件系统合并为一个层,因此可以在读取时校验每个块,并从冗余副本修复损坏的块。写入采用写时复制:块不会在原位置直接覆盖,因此写入过程中发生崩溃时,旧数据仍保持完整,不会留下只写入一半的文件系统。快照几乎不产生开销,因为快照本质上只是后来写入未修改的块集合。ZFS 没有包含在 Solaris 10 的初始版本中,而是在 2006 年 6 月随 Solaris 10 6/06 更新发布。
Zones 是第三个组成部分。一个 zone 让单个内核提供多个相互隔离的用户空间,每个用户空间都有自己的根文件系统、进程表和网络配置。Zones 于 2004 年 2 月出现在 Solaris 10 的一个 beta 构建中,并随正式版本发布。FreeBSD 从不同方向更早实现了相同理念,而 jails 与 Docker 容器的比较 仍然是理解内核级隔离实际含义的最清晰方式。如今 illumos 仍在使用 Zones,下面至少有一个发行版以它为基础。
Sun 为何开放 Solaris 源代码
Sun 于 2004 年 12 月 1 日向 OSI(Open Source Initiative)提交 CDDL(Common Development and Distribution License),OSI 于 2005 年 1 月 14 日批准了该许可证。CDDL 基于 MPL(Mozilla Public License)1.1 版。它的著作权约束作用于单个文件:CDDL 源文件必须继续采用 CDDL,但由该文件构建的二进制文件可以与采用其他许可证条款的代码组合。
DTrace 首先开放。其源代码于 2005 年 1 月 25 日在新上线的 opensolaris.org 网站上以 CDDL 发布,比 Solaris 10 正式发布早 6 天。Solaris 系统的大部分代码随后于 2005 年 6 月 14 日发布。ZFS 于 2005 年 10 月 31 日集成到 Solaris 主开发分支,并于 2005 年 11 月 16 日随 build 27 提供给 OpenSolaris 开发者。OpenSolaris 还成为可以安装的发行版:2008.05 于 2008 年 5 月 5 日以 live CD 形式发布,2009.06 于 2009 年 6 月 1 日发布,并支持 SPARC。
许可证的选择至今仍决定了你可以运行什么。Free Software Foundation 将 CDDL 归类为自由软件许可证,但认为它与 GPL(GNU General Public License)不兼容;这种不兼容性继承自 MPL 1.1。Linux 内核采用 GPLv2。因此,Linux 上的 ZFS 以位于内核源代码树之外的内核模块形式构建,而不是合并到内核中;它也不在主线内核中。以任何开放许可证发布代码,是本故事后续最重要的决定。开放源代码许可证的历史解释了公司为何会做出这一决定。
Oracle 收购 Sun 后发生了什么
Oracle 于 2009 年 4 月 20 日宣布将以 US$7.4 billion 收购 Sun;扣除 Sun 的现金和债务后,净额为 US$5.6 billion。交易于 2010 年 1 月 27 日完成。
2010 年 8 月 13 日,Mike Shapiro、Bill Nesheim 和 Chris Armes 在 Oracle 内部撰写了一份备忘录。该备忘录随后在公司内部传阅并泄露。备忘录直接说明了新政策:“我们将不再在 Solaris 操作系统开发期间,以每晚一次的频率实时发布其全部源代码。”这排除了继续提供社区构建版本的可能:“我们不会再发布其他二进制发行版,例如 Solaris 二进制文件的 nightly 或 bi-weekly 构建版本,也不会发布 OpenSolaris 2010.05 或更高版本。”开源版本改为跟随正式产品发布:“在我们的企业级 Solaris 操作系统正式发布后,我们将发布经批准的 CDDL 或其他开源许可证代码的更新。”
2010 年 8 月 23 日,OpenSolaris Governing Board 通过一项决议,记录 Oracle 未向该委员会任命联络人,并已于 8 月 13 日宣布终止开发合作关系。该委员会投票决定,依据 Sun 最初制定的章程,将社区控制权交还 Oracle;此举也解散了该委员会。
Oracle Solaris 11 于 2011 年 11 月 9 日发布。2017 年 9 月 2 日,Oracle 解雇了 Solaris 团队中的大多数员工。Oracle Solaris 11.4 于 2018 年 8 月 28 日发布;截至 2026 年 7 月,它仍是当前版本,并继续接收支持存储库更新。Oracle 上一次修订 11.4 的生命周期支持政策是在 2024 年 1 月:Premier Support 保持至 2031 年,Extended Support 则从 2034 年延长至 2037 年。因此,Solaris 仍是受支持的商业产品,并且当前版本自 2018 年起未发生变化,同时已有公布的支持结束日期。
illumos 的起源,以及为何称为分支
2010 年 8 月 3 日,也就是备忘录泄露前 10 天,Garrett D'Amore 宣布了 illumos。这个名称由表示“光”的拉丁词 illum 和操作系统的缩写 OS 组合而成。项目将其写成一个单词,只有首字母大写。
目标是 OS/Net,通常写作 ON:它是包含内核和核心系统工具的整合代码库。OpenSolaris 从未完全开放。若干部分以闭源二进制文件形式发布,Sun 之外的人员无法重新构建,包括 C 库中的国际化代码(libc_i18n)、NFS 锁管理器、加密框架、用于 LSI 主机总线适配器的 mpt 驱动等驱动程序,以及部分 SPARC 平台代码。替换这些组件是项目的首要任务,因为无法从源代码构建的操作系统就无法维护。
D'Amore 谨慎使用 fork 一词。他写道:“我们目前还不是 fork,因为我们跟踪 OS/Net 的方式不同。”他描述的是一个下游代码库:该代码库将跟随 Oracle 的代码树,并可将更改反馈到上游。10 天后,上游停止发布代码。illumos 因此默认成为 fork,因为已经没有可供跟踪的代码。核心代码树 illumos-gate 截至 2026 年 10 月已超过 23,000 次提交,目前仍在接受新的提交。
哪些发行版来自 illumos
illumos 不是可直接安装的软件。它是核心代码树,各个发行版在其之上构建可用的系统。以下发行版目前仍在发布。
- OpenIndiana 于 2010 年 9 月 14 日在伦敦的 JISC Centre 正式启动,是旧版 OpenSolaris 桌面和服务器发行版最直接的后继者。它采用名为 Hipster 的滚动发布模式,2026.04 快照于 2026 年 5 月 5 日发布。
- OmniOS 是一个服务器发行版。其原始厂商停止维护后,现由社区以 OmniOS CE 的形式维护。
- SmartOS 是基于 zones 构建的虚拟机监控程序平台。Joyent 创建了该平台,并于 2022 年 4 月宣布 SmartOS 和 Triton 将转移至 MNX Solutions,转移于 2022 年 5 月 1 日生效。
- NexentaStor 使用相同的基础系统构建存储设备,这是 illumos 所源自的商业产品线。
- Tribblix 是由 Peter Tribble 维护的小型发行版,下面会介绍。
- DilOS 在 illumos 内核之上提供 Debian 的软件包工具。
如今安装 illumos 系统的实际情况
Tribblix 是一个很有参考价值的示例,因为它规模小、文档公开,而且仍在持续发布。x86 的 Milestone 41 于 5 August 2026 发布。SPARC 版本线于 23 September 2026 迁移到 Milestone 35;这是一个合成版本,在 Milestone 34 操作系统之上加入了包括 gcc 10 在内的更新软件包,但下载到的 SPARC 安装 ISO 仍是 Milestone 34。该项目将自身描述为采用复古风格和现代组件,并继续使用 Solaris 采用的 SVR4 软件包格式,而没有迁移到更新的软件包系统。
安装从 live image 运行。启动 ISO 后,使用用户 jack 和密码 jack 登录,切换为 root,然后针对磁盘设备运行安装程序。项目自己的安装文档提供了以下命令:
./live_install.sh -G c1t0d0-G 标志会写入 EFI(可扩展固件接口)分区布局,-b 则选择传统 MBR(主引导记录)布局。磁盘名称遵循 Solaris 的 cXtYdZ 约定,而不是 /dev/sda;如果您来自 Linux,这会是第一个不熟悉的地方。软件集合称为 overlays,可以在同一行中指定:
./live_install.sh -G c1t0d0 develop desktop安装完成后,软件包工具是 zap。它基于 overlays 工作,因此会自动处理依赖关系:
zap refresh
zap install-overlay develop
zap update-overlay -a以上是 Tribblix 发布的命令。这些命令可在您控制的硬件或 hypervisor 上运行。您无法在 VPS 控制面板中找到带有一键镜像的 Tribblix。SmartOS 是 illumos 系统中的例外:接管 Joyent 相关业务的 MNX 通过自有云控制面板提供“Linux、FreeBSD 或 SmartOS 的选择”(截至 12 October 2026 检查)。除此之外,服务提供商镜像列表中的 illumos 镜像很少见,而这正是 2026 年 illumos 部署的实际情况。
ZFS 和 DTrace 为什么比 Solaris 存续更久
ZFS 在源代码发布后不久就离开了 Solaris。Pawel Jakub Dawidek 将其移植到 FreeBSD,自 FreeBSD 7.0(2008 年)起,ZFS 就成为系统的一部分。Linux 的原生 ZFS 工作始于 2008 年,并在 2013 年发布了首个稳定版本。2010 年至 2013 年期间,illumos 保存了 ZFS 源代码的参考副本,因为 Oracle 的代码树处于封闭状态,其他所有移植项目都需要一个可同步的来源。这就是分支的实际价值:没有它,这些移植项目就没有共同的祖先可用于合并。
OpenZFS 项目于 17 September 2013 宣布成立,用于协调这些移植项目。原始 ZFS 作者之一 Matt Ahrens 也是其创始人之一。OpenZFS 2.0 于 30 November 2020 发布,其发行说明明确写道:“ZFS on Linux 项目已重命名为 OpenZFS!现在 Linux 和 FreeBSD 都由同一个代码仓库提供支持,因此两个平台都可以使用 OpenZFS 的全部功能。”FreeBSD 13.0 放弃了自己的 illumos 派生副本,转而使用这一共享代码树。
两条 ZFS 分支在磁盘格式上已经分化。开放分支停留在存储池版本 28,即 Sun 发布的最后一个版本;之后改用占位版本 5000 下的命名特性标志。这样,存储池会声明自己使用的特性,而不是只提供一个版本号。Oracle 则在封闭源代码中继续递增自己的版本号。一侧创建的、版本高于 28 的存储池无法在另一侧导入。如果要选择运行平台,请参阅OpenZFS 在 FreeBSD 和 Linux 上的实际差异,了解两种主机之间真正不同的部分。
DTrace 的移植范围较小。到 7.1(January 2009)时,它已成为 FreeBSD 的标准功能;Apple 也在 Mac OS X 10.5 Leopard 中加入了 DTrace。Oracle 于 August 2017 以 GPLv2 发布 DTrace 内核代码,这一变化在 February 2018 广受关注,并消除了 Linux 使用它的许可证障碍。它从未合并到主线内核。实际的 Linux 跟踪通常基于 eBPF,而 bpftrace 为其提供了一种有意接近 DTrace 的 D 脚本语言。
这里的规律具有普遍意义,并不只适用于 Solaris。Sun 以允许他人保存副本并继续开发的许可证发布了 ZFS 和 DTrace。资助这些工作的公司停止运作后,开发仍能继续,因为代码已经存在于其他代码树和其他维护者手中。Solaris 中从未开放的部分,包括 illumos 必须重新实现的封闭二进制组件,则随公司一同消失。这就是开放源代码带来的改变,也是Linux 发行版彼此衍生的方式背后的同一机制。
是否应该在 VPS 上运行 illumos?
对几乎所有人来说,答案都是否定的。上文也不是在建议您尝试这样做。illumos 支持的硬件范围很窄,因为它的驱动程序主要来自 Sun 支持的驱动,以及此后由小型社区编写的驱动。大多数 VPS 提供商只发布 Linux 和 BSD 镜像。例外是 MNX。MNX 从 Joyent 接手了 SmartOS,并在自有云中同时提供 SmartOS、Linux 和 FreeBSD。其他情况下,安装 illumos 通常意味着将自己的 ISO 上传到允许使用自定义镜像的提供商,然后确认虚拟磁盘和网络设备是否能被识别。第三方软件来自发行版自己的软件包集合,或需要使用您自己的编译器构建。
运行 illumos 有实际原因:您需要继续运行某个 Solaris 工作负载,已经在维护基于 zones 的部署,或者希望阅读其源代码。上面列出的发行版都有人维护,其邮件列表也会回答问题。但这与将 illumos 作为新服务器的默认选择不同。
如果您是为了 ZFS 而来,则不需要使用 illumos 才能获得它。您可以在 Linux 或 FreeBSD 上运行 OpenZFS;这两个平台都提供相应的软件包、文档,并且已有广泛部署。如果您正在考虑为服务器选择同一家族中的 BSD 系统,Linux 和 FreeBSD 作为服务器平台的实际比较介绍了日常运维中的差异。illumos 是这些工具的源头。了解它们的来源,有助于解释其许多行为,包括为什么 zpool 和 zfs 的使用体验与 Linux 存储栈的其他部分完全不同。
FAQ
illumos 与 OpenSolaris 是同一个系统吗?
不是。OpenSolaris 是 Sun 的项目和发行版,后来由 Oracle 继承;Oracle 在 2010 年终止了该项目。illumos 是独立项目,于 3 August 2010 宣布成立,基于最后发布的 OpenSolaris 核心源代码 OS/Net consolidation 构建。它的首要任务是替换 OpenSolaris 随附的闭源二进制组件,包括 libc_i18n、NFS 锁管理器、加密框架和多个驱动程序。2010 年之后,illumos 不再包含来自 Oracle 的代码,因为 Oracle 停止发布这些代码。
Linux 为什么不能将 ZFS 纳入内核?
原因是许可证不兼容。ZFS 使用 CDDL。Free Software Foundation 将 CDDL 列为自由软件许可证,但认定它与 GPL 不兼容;这种不兼容性继承自 MPL 1.1。Linux 内核使用 GPLv2。实际结果是,Linux 上的 OpenZFS 以树外内核模块形式发布,通常由 DKMS 针对每个已安装的内核构建,也可以使用预构建的模块包。它运行良好,但每个新内核都必须重新构建该模块,因此它可能比最新内核版本晚数天或数周发布。
Oracle Solaris 仍受支持吗?
是。Oracle Solaris 11.4 于 28 August 2018 发布,并且截至 July 2026 仍是当前版本,持续接收支持仓库更新。根据 Oracle 最后一次于 January 2024 针对 11.4 修订的生命周期支持政策,Premier Support 持续到 2031 年,Extended Support 持续到 2037 年。Oracle 在 2 September 2017 裁撤了大部分 Solaris 团队;此后,11.4 一直接收支持仓库更新,但没有新的主要版本。Oracle 没有像 OpenSolaris 那样发布完整源代码。
可以在 VPS 上安装 illumos 吗?
有时可以,但通常无法直接从服务商的镜像列表安装。维护 SmartOS 的 MNX 可通过其自有云控制面板提供 SmartOS。其他服务商通常需要支持挂载自定义 ISO 并提供控制台,然后确认 illumos 源代码树中的虚拟磁盘和网络驱动程序能够识别该 hypervisor 的设备。对于通用安装,OpenIndiana 和 Tribblix 通常是起点;SmartOS 的设计目标是作为 hypervisor 主机,而不是供用户自行安装的客户机。在付费前,先在本地虚拟机中进行测试。
如果只使用 Linux,学习 DTrace 还有价值吗?
尽管工具本身大多无法迁移,但其模型可以迁移。Oracle 于 August 2017 以 GPLv2 发布了 DTrace 内核代码,并维护适用于 Oracle Linux 的移植版本,但该代码从未合并到主线内核;在 Linux 上,实际使用的跟踪机制是 eBPF。bpftrace 使用的语言被设计为类似 DTrace 的 D 语言,因此两者中的探针、谓词和聚合含义相同。掌握 DTrace 的思维方式后,可以在第一次阅读时就理解 bpftrace 脚本。