Solaris 到 illumos:为何这个分支延续至今
Sun 曾将 Solaris 大部分源代码公开,Oracle 于 2010 年收购 Sun 后停止公开。本文核对 2005 年 Solaris 10、2010 年收购及 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 宣布将用一个基于 SVR4 的系统取代 SunOS 4,并采用新的市场名称 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 月推出。它可以检测正在运行的 kernel 和用户进程,无需重新编译,也无需重启正在监控的进程。尚未启用的探针不会产生开销,因为只有脚本请求时,检测代码才会被动态写入。这也是管理员愿意在生产机器上使用它的原因。DTrace 获得了 The Wall Street Journal 2006 年 Technology Innovation Awards 的最高奖项,并于 2008 年获得 USENIX STUG(Software Tools User Group)奖。
ZFS 由 Sun 的 Jeff Bonwick、Bill Moore 和 Matthew Ahrens 设计,并于 2004 年 9 月 14 日公布。它将 volume manager 和 filesystem 合并为一个层,从而可以在读取时校验每个 block,并从冗余副本修复损坏的 block。写入采用 copy on write:block 不会在原位置直接覆盖,因此写入过程中发生崩溃时,旧数据仍然完整,不会留下只写入一半的 filesystem。Snapshot 几乎不产生额外开销,因为 snapshot 本质上只是之后写入未触及的 block 集合。ZFS 没有包含在 Solaris 10 的初始版本中,而是在 2006 年 6 月随 Solaris 10 6/06 更新发布。
Zones 是第三项技术。一个 zone 可以让一个 kernel 提供多个相互隔离的用户空间,每个用户空间都有自己的 root filesystem、进程表和网络配置。Zones 于 2004 年 2 月出现在 Solaris 10 的 beta 构建版本中,并随正式版本发布。FreeBSD 从不同方向更早实现了相同理念,而 jails 与 Docker 容器的比较 仍然是理解 kernel 级隔离实际含义的最清晰方式。Zones 如今仍存在于 illumos 中,并且是下面至少一个发行版的基础。
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 版。它的 copyleft 作用于单个文件: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 日宣布将以 74 亿美元收购 Sun;扣除 Sun 的现金和债务后,净交易金额为 56 亿美元。该交易于 2010 年 1 月 27 日完成。
2010 年 8 月 13 日,Mike Shapiro、Bill Nesheim 和 Chris Armes 撰写的一份 Oracle 内部备忘录在公司内部传阅,随后遭到泄露。备忘录直接说明了新政策:“我们将不再在 Solaris 操作系统开发期间,以每夜构建的方式实时发布其完整源代码。”备忘录排除了继续提供社区构建版本的可能:“我们不会再发布其他二进制发行版,例如 Solaris 二进制文件的每夜构建版或每两周构建版,也不会发布 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 日发布,至今仍是当前版本。根据 Oracle 的终身支持政策,11.4 的 Premier Support 将持续到 2031 年 11 月,Extended Support 将持续到 2037 年 11 月。因此,Solaris 仍是受支持的商业产品,并且已公布支持终止日期;当前版本自 2018 年起一直未变。
illumos 的起源,以及它为何被称为分支
2010 年 8 月 3 日,也就是备忘录泄露前 10 天,Garrett D'Amore 宣布了 illumos。这个名称由表示“光”的拉丁词 illum 和 operating system 的缩写 OS 组成。该项目将其写成一个单词,并且只有首字母大写。
目标是 OS/Net,通常写作 ON:这是包含内核和核心系统工具的整合代码库。OpenSolaris 从未完全开放。多个组件以闭源二进制文件形式发布,Sun 之外的人员无法重新构建,包括 C 库(libc_i18n)中的国际化代码、NFS 锁管理器、加密框架、用于 LSI 主机总线适配器的 mpt 驱动等驱动程序,以及部分 SPARC 平台代码。替换这些组件是项目的首要任务,因为无法从源代码构建的操作系统也就无法维护。
D'Amore 谨慎使用了“分支”一词。他写道:“按我们跟踪 OS/Net 的方式,我们今天还不是一个分支。”他描述的是一个下游代码库:该代码库会跟随 Oracle 的代码树,并且可以将更改反馈到上游。10 天后,上游停止发布更新。由于已经没有可供跟踪的内容,illumos 默认成为一个分支。核心代码树 illumos-gate 截至 2026 年 8 月已超过 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 版于 21 April 2026 达到 Milestone 34。该项目将自身描述为采用现代组件的复古风格系统,并保留了 Solaris 使用的 SVR4 软件包格式,而没有迁移到更新的软件包系统。
安装过程从 live 镜像启动。启动 ISO 后,以用户 jack 登录,密码为 jack,然后切换为 root,并针对磁盘设备运行安装程序。项目自己的安装文档给出了以下命令:
./live_install.sh -G c1t0d0-G 标志用于写入 EFI(可扩展固件接口)分区布局,-b 则改为选择传统 MBR(主引导记录)布局。磁盘名称遵循 Solaris 的 cXtYdZ 约定,而不是 /dev/sda;如果您来自 Linux,这将是第一个感到陌生的地方。软件集合称为 overlay,可以在同一行中指定名称:
./live_install.sh -G c1t0d0 develop desktop安装完成后,软件包工具为 zap。它基于 overlay 工作,并自动处理依赖项:
zap refresh
zap install-overlay develop
zap update-overlay -a以上就是 Tribblix 发布的命令。这些命令可在您控制的硬件或虚拟机管理程序上运行。VPS 控制面板中的一键镜像通常不会提供这种安装方式,这正是 2026 年 illumos 部署现状的真实写照。
ZFS 和 DTrace 为什么比 Solaris 延续得更久
ZFS 在源代码发布后几乎立即离开了 Solaris。Pawel Jakub Dawidek 将其移植到 FreeBSD,自 FreeBSD 7.0 于 2008 年发布以来,ZFS 一直是 FreeBSD 的组成部分。Linux 原生 ZFS 的开发始于 2008 年,并在 2013 年发布了首个稳定版本。2010 至 2013 年间,illumos 保存着 ZFS 源代码的参考副本,因为 Oracle 的代码树处于闭源状态,其他所有移植版本都需要从某处获取上游代码。这就是分叉的具体价值:没有它,各个移植版本就没有可以合并的共同祖先。
OpenZFS 项目于 2013 年 9 月 17 日宣布成立,用于协调这些移植工作。ZFS 最初的作者之一 Matt Ahrens 也是创始人之一。OpenZFS 2.0 于 2020 年 11 月 30 日发布,其发行说明明确写道:“ZFS on Linux 项目已更名为 OpenZFS!现在 Linux 和 FreeBSD 都从同一个代码仓库获得支持,因此所有 OpenZFS 功能都可在两个平台上使用。”FreeBSD 13.0 移除了自有的 illumos 派生副本,改用这个共享代码树。
两个 ZFS 分支在磁盘格式上已经分化。开放分支停留在池版本 28,也就是 Sun 发布的最后一个版本;随后在占位版本 5000 下改用命名功能标志。这样,存储池会声明自身使用的功能,而不再使用单个版本号。Oracle 则在闭源状态下继续递增自己的版本号。一侧创建的、版本高于 28 的存储池无法在另一侧导入。如果您正在选择运行平台,OpenZFS 在 FreeBSD 和 Linux 上的实际差异介绍了这两个主机之间真正不同的部分。
DTrace 的迁移范围更小。到 2009 年 1 月发布的 FreeBSD 7.1 时,DTrace 已成为 FreeBSD 的标准功能;Apple 也在 Mac OS X 10.5 Leopard 中加入了 DTrace。Oracle 于 2017 年 8 月以 GPLv2 发布 DTrace 内核代码,这一变化在 2018 年 2 月受到广泛关注,并消除了 Linux 使用 DTrace 的许可证障碍。它从未合并到主线内核。Linux 的实际跟踪工作基于 eBPF,bpftrace为其提供了一种刻意接近 DTrace D 语言的脚本语言。
这里的重点是这种模式,而不是 Solaris 本身。Sun 以允许其他人保留副本并继续开发的许可证发布了 ZFS 和 DTrace。当出资开发这些项目的公司停止运营后,开发仍然继续,因为代码已经存在于其他代码树中,也掌握在其他人手中。Solaris 中从未开放的部分,包括 illumos 必须重写的闭源二进制文件,则随公司一同消失。这就是开放源代码带来的变化,也是Linux 发行版彼此衍生的方式背后的同一机制。
是否应在 VPS 上运行 illumos?
对几乎所有人来说,答案是否定的。上文也不构成尝试使用 illumos 的建议。illumos 支持的硬件范围很窄,因为其驱动集主要来自 Sun 支持的驱动,之后只有一个小型社区继续编写了一部分驱动。VPS 提供商通常发布 Linux 和 BSD 镜像,因此安装 illumos 通常意味着:将自己的 ISO 上传到允许使用自定义镜像的提供商,然后确认虚拟磁盘和网络设备是否能被识别。第三方软件来自该发行版自己的软件包集合,或由您自行编译。
运行 illumos 也有实际原因:您需要继续运行某个 Solaris 工作负载,已经在使用基于 zones 的部署,或者希望阅读其源代码。上文列出的发行版都有维护,其邮件列表也会回答问题。但这与将 illumos 作为新服务器的默认选择不同。
如果您是因为 ZFS 来到这里,则不需要使用 illumos 才能获得 ZFS。您可以在 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 发布,目前仍是最新版本。根据 Oracle 的生命周期支持政策,Premier Support 提供到 November 2031,Extended Support 提供到 November 2037。Oracle 于 2 September 2017 解雇了 Solaris 团队中的大多数员工,此后 11.4 一直通过支持仓库更新获得维护,没有发布新的主版本。其完整源代码也不像 OpenSolaris 当年那样公开发布。
我可以在 VPS 上安装 illumos 吗?
有时可以,但通常无法直接使用提供商镜像列表中的镜像。一般需要选择支持挂载自定义 ISO 并提供控制台的提供商,然后确认 illumos 源代码中的虚拟磁盘和网络驱动程序能够识别该虚拟机管理程序提供的设备。对于通用安装,OpenIndiana 和 Tribblix 通常是起点;SmartOS 则主要设计为虚拟机管理程序主机,而不是客户机。付费前,应先在本地虚拟机中测试。
如果我只使用 Linux,学习 DTrace 还有价值吗?
虽然该工具本身大多无法直接迁移,但其模型仍然适用。Oracle 于 August 2017 以 GPLv2 发布了 DTrace 内核代码,并维护适用于 Oracle Linux 的移植版本,但该代码从未合并到主线内核;在 Linux 上,实际使用的跟踪技术是 eBPF。bpftrace 使用的语言设计为类似 DTrace 的 D,因此探针、谓词和聚合在两者中的含义相同。学习 DTrace 的思维方式后,您可以首次尝试就读懂 bpftrace 脚本。