Solaris 分支如何延續成 illumos?
Sun 將 ZFS 與 DTrace 開放到 Solaris,Oracle 收購後重新關閉原始碼。illumos 接手開發,讓這兩項技術至今仍可在 Solaris 與其他系統上使用。
Solaris 與 illumos 是什麼
Solaris 與 illumos 是同一個 Unix 原始碼樹的兩個分支。Sun Microsystems 開發了 Solaris,並在 2005 年公開其大部分原始碼。Oracle 於 2010 年收購 Sun,之後停止公開該原始碼,因此 Oracle 以外的開發者將開放程式碼延續下去,並採用新的名稱:illumos。2026 年,這個作業系統本身屬於小眾系統。但其中內建的儲存層與追蹤工具並非如此,這就是這段歷史值得你了解的原因。
如果你在 Linux 或 FreeBSD 上執行 ZFS,使用的就是當年 Sun 為 Solaris 撰寫的程式碼。這些程式碼的存續時間超過了該公司、產品線,以及授權爭議。本文將說明這一切如何發生,並核對相關日期。
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 繼承了這個名稱及其程式碼。
2005 年 Solaris 10 引入的功能
Solaris 10 於 31 January 2005 發布。這裡之所以需要介紹它,是因為該公司後來保留下來的所有成果,都包含在這個版本或其更新中。
DTrace 由 Sun 的 Bryan Cantrill、Mike Shapiro 與 Adam Leventhal 開發,最早於 November 2003 提供。它能對執行中的 kernel 與 user process 進行檢測,不必重新編譯,也不必重新啟動正在監控的 process。尚未啟用的 probe 不會產生效能成本,因為只有在 script 要求時才會套用 instrumentation。這也是 administrators 願意在 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,並從 redundant copy 修復損壞的 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 版為基礎。其著作傳承條款以個別檔案為單位運作: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 也成為可安裝的發行版: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 kernel 採用 GPLv2。這就是為什麼 ZFS on Linux 會以 kernel module 的形式在 kernel source tree 外部建置,而不是合併至其中,也因此不在 mainline kernel 內。以任何開放授權公開程式碼的決定,對本篇後續內容最為重要,而開放原始碼授權的歷史將說明公司為何會做出這項決定。
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 build,也不會發佈 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 的起源,以及為何稱為 fork
2010 年 8 月 3 日,在備忘錄外洩前 10 天,Garrett D'Amore 宣布了 illumos。這個名稱由表示光的拉丁文 illum 與 OS(作業系統)組成。專案將其寫成一個單字,只有第一個字母大寫。
目標是 OS/Net,通常寫作 ON。這是整合核心與核心系統工具的程式碼樹。OpenSolaris 從未完全開放。部分元件以封閉的二進位檔形式發布,Sun 以外的任何人都無法重新建置,包括 C 函式庫(libc_i18n)中的國際化程式碼、NFS lock manager、cryptographic framework、mpt 等 LSI host bus adapter 驅動程式,以及部分 SPARC 平台程式碼。替換這些元件是專案的第一項工作,因為無法從原始碼建置的作業系統,就無法維護。
D'Amore 謹慎使用 fork 一詞。他寫道:「以我們追蹤 OS/Net 的方式來看,我們目前還不是 fork。」他所描述的是一個下游 repository,會跟隨 Oracle 的程式碼樹,也能將變更回饋至上游。10 天後,上游停止發布內容。由於已經沒有可追蹤的內容,illumos 預設成為 fork。截至 2026 年 8 月,核心程式碼樹 illumos-gate 已超過 23,000 次 commit,且仍持續接受新的 commit。
哪些發行版源自 illumos
illumos 不是可直接安裝的項目。它是核心原始碼樹,各發行版會在其上建構可用的系統。以下是目前仍在發布的發行版。
- OpenIndiana 於 14 September 2010 在 London 的 JISC Centre 正式推出,是舊有 OpenSolaris 桌面與伺服器發行版最直接的後繼者。它採用名為 Hipster 的 rolling release 模式,2026.04 snapshot 於 5 May 2026 發布。
- OmniOS 是伺服器發行版。原始廠商停止維護後,現由社群以 OmniOS CE 的形式維護。
- SmartOS 是以 zones 為基礎建構的 hypervisor 平台。Joyent 建立了 SmartOS,並於 April 2022 宣布 SmartOS 與 Triton 將移交給 MNX Solutions,於 1 May 2022 生效。
- NexentaStor 使用相同的基礎建構儲存設備,也是 illumos 所源自的商業產品線。
- Tribblix 是由 Peter Tribble 維護的小型發行版,詳見下文。
- DilOS 在 illumos kernel 之上提供 Debian 的套件工具。
現在安裝 illumos 系統的方式
Tribblix 是實用的範例,因為它規模小、文件公開,而且仍持續發布版本。x86 版的 Milestone 41 於 5 August 2026 發布,SPARC 系列則於 21 April 2026 達到 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 現在都由同一個 repository 支援,因此 OpenZFS 的所有功能都能在兩個平台上使用。」FreeBSD 13.0 捨棄自行維護的 illumos 衍生副本,改用該共享原始碼樹。
兩條 ZFS 分支在磁碟格式上已經分歧。開放分支停留在 pool version 28,也就是 Sun 公開的最後版本,並在 placeholder version 5000 下改用具名 feature flags。如此一來,pool 會宣告自身使用的功能,而不是只提供單一版本號。Oracle 則在封閉原始碼的情況下持續遞增自己的版本號。一側建立的、超過 version 28 的 pool,無法由另一側匯入。如果你正在選擇執行平台,OpenZFS 在 FreeBSD 與 Linux 上的實際差異說明了兩種主機之間真正不同的部分。
DTrace 移植到其他平台的距離較短。到 2009 年 1 月的 FreeBSD 7.1 時,它已是 FreeBSD 的標準功能;Apple 也在 Mac OS X 10.5 Leopard 中加入 DTrace。Oracle 於 2017 年 8 月以 GPLv2 公開 DTrace kernel code;這項變更在 2018 年 2 月受到廣泛注意,因而移除了 Linux 使用 DTrace 的授權障礙。它從未合併到 mainline kernel。實務上的 Linux tracing 以 eBPF 為主,而 bpftrace 提供了一種刻意設計成接近 DTrace D 的 scripting language。
重點在於這是普遍模式,而不只適用於 Solaris。Sun 以允許其他人保存副本並持續開發的授權公開 ZFS 與 DTrace。當出資開發的公司停止運作後,開發仍能繼續,因為程式碼已存在於其他原始碼樹與其他開發者手中。Solaris 中從未公開的部分,包括 illumos 必須重寫的封閉 binaries,則隨公司一同消失。這就是開放原始碼帶來的改變,也是Linux 發行版彼此衍生的方式背後所使用的相同機制。
應該在 VPS 上執行 illumos 嗎?
對幾乎所有人而言,答案是否定的。以上內容也不是建議你嘗試這麼做。illumos 支援的硬體範圍很窄,因為它的驅動程式集合來自 Sun 支援的硬體,以及之後由小型社群撰寫的驅動程式。VPS 供應商會提供 Linux 和 BSD 映像檔,因此安裝 illumos 通常代表:將自己的 ISO 上傳到允許使用自訂映像檔的供應商,然後確認虛擬磁碟與網路裝置是否能被辨識。第三方軟體則來自該發行版自己的套件集合,或由你自行編譯。
確實有一些理由可以執行它:你需要持續維護某個 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 lock manager、cryptographic framework 和數個驅動程式。2010 年之後的 illumos 程式碼都不是來自 Oracle,因為 Oracle 已停止發布相關程式碼。
Linux 為什麼不能把 ZFS 納入核心?
因為授權條款不相容。ZFS 採用 CDDL,Free Software Foundation 將其歸類為與 GPL 不相容的自由軟體授權,而 CDDL 的這項不相容性源自 MPL 1.1。Linux kernel 採用 GPLv2。實際結果是,Linux 上的 OpenZFS 以 out of tree kernel module 形式發布,通常由 DKMS 針對每個已安裝的 kernel 建置,或以預先建置的 module package 形式提供。它運作良好,但每次安裝新 kernel 都必須重新建置 module,因此可能比最新的 kernel release 晚數天或數週。
Oracle Solaris 目前仍受支援嗎?
是。Oracle Solaris 11.4 於 28 August 2018 發布,目前仍是現行版本。依 Oracle 的 lifetime support policy,Premier Support 提供至 November 2031,Extended Support 提供至 November 2037。Oracle 在 2 September 2017 裁撤了 Solaris 團隊的大部分人員,此後 11.4 持續取得 support repository 更新,但沒有新的 major version。完整原始碼也不像 OpenSolaris 當年那樣公開發布。
我可以在 VPS 上安裝 illumos 嗎?
有時可以,但通常無法直接從供應商的 image list 安裝。一般需要選擇允許掛載 custom ISO 並提供 console 的供應商,然後確認 illumos tree 中的 virtual disk 和 network driver 能辨識 hypervisor 提供的裝置。OpenIndiana 和 Tribblix 通常是一般用途安裝的起點,而 SmartOS 的設計用途是作為 hypervisor host,不是 guest。付費前,先在本機 virtual machine 中測試。
如果我只使用 Linux,還值得學習 DTrace 嗎?
雖然大部分工具無法直接轉用,但其模型仍然適用。Oracle 在 August 2017 以 GPLv2 發布 DTrace kernel code,並維護 Oracle Linux 的 port,但該程式碼從未合併至 mainline kernel;實務上的 Linux tracing 則使用 eBPF。bpftrace 使用的語言設計成類似 DTrace 的 D,因此 probes、predicates 和 aggregations 在兩者中代表相同概念。學會 DTrace 的思考方式後,第一次看到 bpftrace scripts 就能讀懂。