Solaris 到 illumos:延續至今的分支
Sun 將 ZFS 與 DTrace 加入 Solaris 並公開原始碼,Oracle 收購後停止公開。了解 illumos 如何延續開放版本,讓兩者至今仍可執行。
Solaris 與 illumos 是什麼
Solaris 與 illumos 是同一個 Unix 原始碼樹的兩個分支。Sun Microsystems 開發 Solaris,並在 2005 年公開其大部分原始碼。Oracle 在 2010 年收購 Sun,之後停止公開該原始碼,因此 Oracle 以外的開發者以新名稱 illumos 延續這份開放原始碼。到了 2026 年,這個作業系統本身已屬小眾。但其中的儲存層與內建追蹤工具並非如此,這正是這段歷史值得你了解的原因。
如果你在 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 在其中有 10 年位於 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 連同程式碼一起繼承了這個名稱。
Solaris 10 在 2005 年引入的功能
Solaris 10 於 31 January 2005 發布。這裡之所以重要,是因為公司解散後仍保留下來的所有功能,都包含在該版本或其更新中。
DTrace 由 Sun 的 Bryan Cantrill、Mike Shapiro 與 Adam Leventhal 開發,最早於 November 2003 提供。它可以對執行中的 kernel 與 user process 進行檢測,不必重新編譯,也不必重新啟動受監控的 process。尚未啟用的 probe 不會產生成本,因為只有在 script 要求時才會加入檢測,因此系統管理員願意在 production machine 上使用它。DTrace 在 The Wall Street Journal 2006 Technology Innovation Awards 中獲得最高獎項,並於 2008 年獲得 USENIX STUG (Software Tools User Group) award。
ZFS 由 Sun 的 Jeff Bonwick、Bill Moore 與 Matthew Ahrens 設計,並於 14 September 2004 對外公布。它將 volume manager 與 filesystem 合併為單一層,因而能在讀取時驗證每個 block 的 checksum,並從備援副本修復損壞的 block。寫入採用 copy on write:block 不會在原位置直接覆寫,因此寫入期間發生當機時,舊資料仍會保持完整,不會留下只有一半內容的 filesystem。Snapshot 幾乎不需要額外成本,因為 snapshot 只是之後寫入未修改的 block 集合。ZFS 並未包含在最初的 Solaris 10 發行版本中,而是在 June 2006 隨 Solaris 10 6/06 update 發布。
Zones 是第三個部分。Zone 讓單一 kernel 提供多個彼此隔離的 user space,每個 user space 都有自己的 root filesystem、process table 與 network configuration。Zones 於 February 2004 出現在 Solaris 10 beta build 中,並隨正式版本發布。FreeBSD 從不同方向較早實現了相同概念,而 jails 與 Docker containers 的比較 仍是理解 kernel level isolation 實際含義最清楚的方法。Zones 目前仍存在於 illumos,並且是下方至少一個 distribution 的基礎。
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 日,以 CDDL 授權發布在剛上線的 opensolaris.org 網站上,時間比 Solaris 10 本身發布早 6 天。Solaris 系統的大部分程式碼接著於 2005 年 6 月 14 日開放。ZFS 於 2005 年 10 月 31 日整合至 Solaris 主要開發主幹,並在 2005 年 11 月 16 日的 build 27 中提供給 OpenSolaris 開發者。OpenSolaris 也成為可安裝的 distribution:2008.05 於 2008 年 5 月 5 日以 live CD 形式推出,2009.06 則於 2009 年 6 月 1 日推出 SPARC 支援。
授權條款的選擇至今仍決定了你能執行哪些程式。Free Software Foundation 將 CDDL 歸類為 free software licence,但認定它與 GPL (GNU General Public License) 不相容;這項不相容性承襲自 MPL 1.1。Linux kernel 採用 GPLv2。因此,ZFS on Linux 會在 kernel source tree 外部建置為 kernel module,而不是整合進 kernel,也因此不在 mainline kernel 中。以任何 open licence 發布的決定,才是本故事後續最重要的因素,而 開放原始碼授權的歷史說明了公司為何會做出這項決定。
Oracle 收購 Sun 後發生了什麼
Oracle 於 20 April 2009 宣布將以 US$7.4 billion 收購 Sun;扣除 Sun 的現金與負債後,淨額為 US$5.6 billion。交易於 27 January 2010 完成。
13 August 2010,Mike Shapiro、Bill Nesheim 與 Chris Armes 撰寫的一份 Oracle 內部備忘錄在公司內部流傳,之後遭到外洩。備忘錄直接說明了新政策:「我們不再於 Solaris 作業系統開發期間,以 nightly 為頻率,即時發布整個作業系統的原始碼。」這也排除了後續的社群建置版本:「我們不會再發布其他 binary distributions,例如 Solaris binaries 的 nightly 或 bi-weekly builds,或 OpenSolaris 2010.05 及後續版本。」開放原始碼版本改為跟隨已發布的產品:「我們會在 enterprise Solaris operating system 完整版本發布後,發布已核准的 CDDL 或其他開放原始碼授權程式碼更新。」
23 August 2010,OpenSolaris Governing Board 通過一項決議,記錄 Oracle 未曾任命與董事會聯絡的人員,並已於 13 August 宣布終止開發合作關係。董事會投票決定,依照 Sun 原先制定的章程,將社群控制權交還給 Oracle;該章程也因此解散董事會。
Oracle Solaris 11 於 9 November 2011 發布。2 September 2017,Oracle 解雇了 Solaris 團隊中的大多數成員。Oracle Solaris 11.4 於 28 August 2018 發布;截至 July 2026,該版本仍是目前版本,並持續取得 support repository 更新。Oracle 上次修訂 11.4 的 lifetime support policy 是在 January 2024,當時維持 Premier Support 至 2031,並將 Extended Support 從 2034 延長至 2037。因此,Solaris 是仍受支援的商業產品,具有已公布的支援終止日期;目前版本則自 2018 年起一直維持不變。
illumos 的起源,以及為何稱為 fork
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 的 rolling release,而 2026.04 snapshot 已於 2026 年 5 月 5 日發布。
- OmniOS 是伺服器發行版。原始廠商停止維護後,現由社群以 OmniOS CE 的形式維護。
- SmartOS 是建置於 zones 之上的 hypervisor 平台。Joyent 建立了 SmartOS,並於 2022 年 4 月宣布 SmartOS 與 Triton 將移交給 MNX Solutions,於 2022 年 5 月 1 日生效。
- NexentaStor 使用相同的基礎建置儲存設備,也是 illumos 所源自的商業產品線。
- Tribblix 是由 Peter Tribble 維護的小型發行版,以下會加以介紹。
- DilOS 將 Debian 的套件管理工具建置在 illumos kernel 之上。
今日安裝 illumos 系統的方式
Tribblix 是很好的範例,因為它規模小、文件公開,而且仍持續發布版本。x86 的 Milestone 41 已於 5 August 2026 發布。SPARC 系列則於 23 September 2026 移至 Milestone 35;這是合成版本,將包括 gcc 10 在內的較新套件置於 Milestone 34 作業系統之上,但可下載的 SPARC 安裝 ISO 仍是 Milestone 34。該專案將自身描述為採用現代元件的復古風格,並沿用 Solaris 使用的 SVR4 套件格式,而未改用較新的套件系統。
安裝程序會從 live image 執行。啟動 ISO 後,以使用者 jack 登入,密碼為 jack,接著切換為 root,並對磁碟裝置執行安裝程式。專案自己的安裝文件提供以下指令:
./live_install.sh -G c1t0d0-G 旗標會寫入 EFI(extensible firmware interface)分割區配置,-b 則改用傳統 MBR(master boot record)配置。磁碟名稱遵循 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 控制面板的一鍵映像檔功能中找到這種安裝方式,而這正是 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 專案於 2013 年 9 月 17 日宣布成立,用於協調這些移植版本。原始 ZFS 作者之一 Matt Ahrens 也是創始成員。OpenZFS 2.0 於 2020 年 11 月 30 日發布,其版本說明直接指出結果:「ZFS on Linux 專案已重新命名為 OpenZFS!Linux 與 FreeBSD 現在都由同一個儲存庫支援,因此所有 OpenZFS 功能都能在兩個平台上使用。」FreeBSD 13.0 捨棄自己的 illumos 衍生版本,改用這個共用原始碼樹。
兩條 ZFS 開發路線在磁碟格式上已經分歧。開放版本停留在 pool version 28,也就是 Sun 公開的最後版本,之後在 placeholder version 5000 下改用具名 feature flags。如此一來,pool 會宣告自己使用哪些功能,而不是只使用單一版本號。Oracle 則在封閉原始碼的情況下持續增加自己的版本號。在其中一方建立、且版本高於 28 的 pool,無法由另一方匯入。如果你正在選擇執行平台,OpenZFS 在 FreeBSD 與 Linux 上的實際差異說明了兩個主機之間真正不同的部分。
DTrace 的移植範圍較小。它在 2009 年 1 月的 FreeBSD 7.1 已成為標準功能,Apple 也在 Mac OS X 10.5 Leopard 中加入 DTrace。Oracle 於 2017 年 8 月以 GPLv2 發布 DTrace kernel code,這項變更在 2018 年 2 月受到廣泛注意,也因此移除了 Linux 的授權障礙。它從未合併至 mainline kernel。實務上,Linux tracing 依賴 eBPF,而 bpftrace 為它提供了刻意接近 DTrace 的 D scripting language。
這個模式才是重點,並不只適用於 Solaris。Sun 以允許其他人保留副本並持續開發的授權,發布了 ZFS 與 DTrace。當支付開發費用的公司停止運作後,開發仍能持續,因為程式碼已存在於其他原始碼樹與其他人手中。Solaris 中從未開放的部分,包括 illumos 必須重寫的 closed binaries,則隨公司一同消失。這就是開放原始碼帶來的改變,也是 Linux 發行版彼此衍生的方式背後採用的相同機制。
是否應該在 VPS 上執行 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 是獨立專案,於 2010 年 8 月 3 日宣布成立,基於最後發布的 OpenSolaris 核心原始碼,也就是 OS/Net 整合專案。它的第一項工作,是替換 OpenSolaris 隨附的封閉二進位元件,包括 libc_i18n、NFS 鎖定管理程式、加密架構與多個驅動程式。2010 年之後的 illumos 程式碼都不是來自 Oracle,因為 Oracle 已停止發布相關程式碼。
Linux 為什麼不能在其核心中包含 ZFS?
原因是授權條款不相容。ZFS 採用 CDDL;Free Software Foundation 將 CDDL 歸類為自由軟體授權,但認定它與 GPL 不相容,而 CDDL 的這項不相容性承襲自 MPL 1.1。Linux 核心採用 GPLv2。實務上,OpenZFS on Linux 會以核心樹外模組的形式提供,通常由 DKMS 針對每個安裝的核心進行建置,或以預先建置的模組套件提供。它的運作效果良好,但每次推出新的核心時都必須重新建置模組,因此可能比最新核心版本晚數天或數週。
Oracle Solaris 目前仍受支援嗎?
是。Oracle Solaris 11.4 於 2018 年 8 月 28 日發布,到了 2026 年 7 月仍是目前版本,並持續取得支援儲存庫更新。Oracle 的生命週期支援政策,依 2024 年 1 月針對 11.4 的最新修訂,將 Premier Support 延續至 2031 年,Extended Support 延續至 2037 年。Oracle 在 2017 年 9 月 2 日解雇了 Solaris 團隊中的大多數人員;此後,11.4 持續取得支援儲存庫更新,但沒有新的主要版本。完整原始碼也不像 OpenSolaris 時期那樣公開發布。
我可以在 VPS 上安裝 illumos 嗎?
有時可以,但通常無法直接使用供應商映像檔清單中的映像檔。一般需要選擇允許附加自訂 ISO 並提供主控台的供應商,接著確認 illumos 原始碼樹中的虛擬磁碟與網路驅動程式能辨識該虛擬機器管理程式提供的裝置。對一般用途的安裝而言,OpenIndiana 與 Tribblix 通常是起點;SmartOS 則是為虛擬機器管理程式主機設計,不是作為客體系統使用。付費前,先在本機虛擬機器中測試。
如果我只使用 Linux,還值得學習 DTrace 嗎?
雖然工具本身大多無法直接移植,但其模型仍然適用。Oracle 在 2017 年 8 月以 GPLv2 發布 DTrace 核心程式碼,並維護 Oracle Linux 的移植版本;但該程式碼從未合併至主線核心,而 Linux 實務上的追蹤功能是透過 eBPF 運作。bpftrace 使用的語言刻意設計成類似 DTrace 的 D 語言,因此 probes、predicates 與 aggregations 在兩者中代表相同概念。學會 DTrace 的思考方式後,第一次閱讀 bpftrace scripts 就能理解其內容。