Copland (作業系統)

Copland作業系統是蘋果公司在1994年至1996年間開發的一款作業系統，專為Macintosh電腦設計，它原本計劃以System 8之名發布，或在命名規則改變後以Mac OS 8作為名稱發布，可是該系統最終未能上市。其時，System 7作業系統已經顯得老舊，蘋果計劃以Copland接替System 7。它引入了諸如記憶體保護、搶占式多任務等新的底層作業系統功能，同時保持與現有Mac應用程式的兼容性。Copland的暫定繼任者代號為Gershwin，計劃引入更先進的功能，例如應用級多線程處理。

開發工作正式開始於1994年3月。在接下來的幾年裡，Copland的預覽版引起了大量媒體關注，讓Mac使用者了解到了作業系統的一些新概念，如面向對象、抗崩潰設計和多任務處理。1995年8月，高級副總裁大衛·納戈爾在Macworld Expo上宣布，Copland會於1996年中期發布。隨後在1996年5月，吉爾·阿梅利奧表示，Copland是公司的主要重點，目標是在年底發布。然而，內部開發工作面臨許多問題，由於公司人員和項目管理失調，蘋果一再錯過開發里程碑和開發者版本發布的預定日期。

這個系統在開發過程中不斷引入新特性，並在內部測試版本中表現出嚴重的不穩定。艾倫·漢考克臨危受命，試圖將項目帶回正軌，然而漢考克很快得出結論，認為該項目永遠無法完成。1996年8月，Copland項目宣布取消，蘋果公司將從公司外尋覓一個新作業系統。在眾多選擇中，他們選擇了NeXTSTEP，並在1997年收購了NeXT以獲得該系統。NeXTSTEP被著手移植到Mac平台上，在這段過渡期內，蘋果公司於1997年發布了相對保守的Mac OS 8，將一些來自於Copland的組件融入其中；隨後，蘋果在1999年發布了Mac OS 9，最終，Mac OS X於2001年成為蘋果公司的下一代作業系統。

Copland的開發工作被視作是需求蔓延的一個例子。2008年，PC World將Copland列入IT歷史上最失敗項目的榜單中。

## 設計

### 經典Mac OS

要理解Copland的背景，就必須了解經典Mac OS，以及經典Mac OS需要解決的架構問題。

麥金塔和麥金塔作業系統始於1984年，在一開始，它們就是設計給單使用者的單任務作業系統，這可以大大簡化硬體研發。由於這種單應用模型，最初的Mac開發人員能夠利用一些妥協性的簡化措施，從而顯著提升性能，使其運行速度甚至超過了更昂貴的Apple Lisa。然而，這種設計也導致了未來發展的若干問題。

由於假設系統一次只運行一個程序，工程師們能夠忽略可重入性這一概念。可重入性指的是一個程序（或代碼庫）能夠在任何時刻被中斷、執行其他任務，然後返回到原始任務中。為了實現可重入性，任何本地數據和狀態在另一個程序調用代碼時必須被保存下來，而如果不要求可重入性，就不用保存狀態。例如，對於QuickDraw來說，這意味著系統可以在庫中存儲狀態資訊，如窗口的當前位置或線條樣式，因為這些資訊只會在當前程序控制下發生變化。更進一步，工程師們將大部分狀態留在應用程式內部，而不是存儲在QuickDraw中，這樣就無需在應用程式和庫之間來回複製這些數據。程序可以將這些設定的更改存儲到自己的內部存儲中，QuickDraw則通過在應用程式中查找已知位置的值來獲取這些數據。

這種共享內存的概念是程序錯誤和崩潰的重要來源。如果一個應用程式向這些共享的區域寫入了錯誤數據，就會導致QuickDraw崩潰，結果便是整台電腦崩潰。同樣，QuickDraw中的任何問題都可能導致它覆寫應用程式中的數據，從而再次引發崩潰。在單應用程式作業系統的情況下，這並不是一個很大的問題，因為在這種情況下，無論是應用程式還是電腦出現問題，都需要重啟。

另外一個主要的問題是早期的Mac沒有記憶體管理單元（MMU），這阻礙了一些基本現代功能的實現。MMU可以提供記憶體保護，保證程序不會意外覆寫其他程序的記憶體，事先提供的共享內存允許數據被輕易地在庫之間傳遞。由於沒有共享內存，API被設計為作業系統和應用程式共享所有記憶體，這使得QuickDraw能夠檢查應用程式的記憶體，以獲取諸如線條繪製模式或顏色等設置。

Macintosh缺乏多任務處理能力，但試圖偽裝成多任務系統，同時它堅持使用複雜的使用者界面，但將許多工作留給應用程式去完成。這些都是很嚴重的缺陷，很難想像有什麼優雅的解決方案。

這些限制意味著，如果不重寫整個系統和應用程式代碼，支持多任務功能將十分困難。然而，這樣做又會使得作業系統在現有硬體上慢得令人難以忍受。因此，蘋果公司在1987年採用了一種名為MultiFinder的系統，它仍然像之前一樣，讓正在運行的應用程式控制電腦，但允許通過點擊窗口快速切換到另一個應用程式。處於後台的程序會定期獲得短時間的運行機會，但和之前一樣，整個過程仍由應用程式控制，而不是作業系統。

由於作業系統和應用程式都共享一塊記憶體空間，任何一個程序錯誤都有可能破壞整個作業系統，導致電腦崩潰。在MultiFinder下，任一地方的崩潰都會使得所有正在運行的記憶體崩潰。多任務運行提高了崩潰的可能性，讓系統更加脆弱。

用於給作業系統增加功能的補丁機制則更是令情況雪上加霜。這些機制被稱為CDEVs和INITs（或稱為控制面板和擴展）。第三方開發者也利用這一機制來增加功能，包括螢幕保護程序和分層Apple菜單。其中一些第三方控制面板幾乎變得無處不在，例如流行的After Dark螢幕保護程序包。由於這些補丁的使用沒有統一標準，一些附加功能，甚至蘋果公司自己對作業系統的擴展都有可能使用相同的補丁並相互干擾，從而導致更多的崩潰。

### Copland的設計

Copland在一個名為Nukernel的微內核上運行Mac OS，Nukernel負責處理基本任務，如應用程式啟動和記憶體管理，將所有其他任務交給一系列被稱為服務端的半特殊程序。例如，網路和文件服務不會由內核本身提供，而是由服務端提供，這些服務端通過進程間通信來發送請求。Copland系統整體由Nukernel、各種服務端和一套應用程式支持庫組成，以實現著名的經典Macintosh編程接口。

應用程式服務通過一個官方稱為「協作式程序地址空間」（Cooperative Program Address Space, CPAS）的程序提供。Mac程序在CPAS環境中運行方式類似於System 7，協作式任務也可照常使用非可重入的Toolbox調用。最壞的情況是，CPAS環境中的一個應用程式崩潰時，可能會導致整個環境崩潰。然而，這不會導致整個系統崩潰，CPAS環境會自動重啟。

<image>

而在編寫時就考慮到Copland的新應用程式，可以直接與系統的服務端通信，從而在性能和可擴展性方面獲得許多優勢。它們還可以與內核直接交互，以啟動單獨的應用程式或線程，這些應用程式或線程作為獨立進程在受保護的記憶體中運行，就像大多數現代作業系統一樣。可是，這些獨立運行的應用程式不能使用非可重入調用，例如QuickDraw，也因此無法提供使用者界面。蘋果建議較大的程序可以將使用者界面放入一個普通的Macintosh應用中，然後再在外部啟動一個工作線程。

Copland完美原生支持PowerPC。System 7已經成功地被移植到PowerPC平台上；系統的大部分功能都以PPC代碼運行，包括高級功能（如大多數的使用者界面工具箱管理器）以及底層功能（如中斷管理）。系統中有足夠的 68k代碼可以仿真運行，尤其是使用者應用程式，但作業系統必須在兩種環境之間映射一些數據。特別是，每次對Mac OS的調用，都需要在68k和PPC的中斷系統之間進行映射。移除這些映射將大大提高系統的整體性能。在1996年的WWDC上，工程師們聲稱系統調用的執行速度將提升多達50%。

Copland還基於那時候新定義的通用硬體參考平台（CHRP），它將Mac硬體標準化，這樣，它就可以由不同的公司生產製造，還可以運行其他作業系統（Solaris 和 AIX 是眾多提及的作業系統中的兩個）。當時這是一個流行的趨勢；許多公司組建了團體，旨在定義標準化的平台，以與當時的「Wintel」平台相競爭——例如88open、Advanced Computing Environment和AIM聯盟。

Copland開發與推廣的最大挑戰，是將這些功能都一併納入一台普通的Mac電腦中。System 7.5已經要占用2.5MB的記憶體，對當時的主流電腦記憶體而言，這占用已經相當可觀。Copland是兩套系統的混合，其本身的基礎上還託管著「藍盒」，自帶一個完整的System 7.5副本。因此，Copland採用了受Mach啟發的記憶體管理系統，並大量依賴共享庫，目標是使其體積比7.5大約增加50%。

## 歷史

### 粉色與藍色

1988年3月，蘋果的技術中層管理人員舉行了一場線下會議，規劃未來的Mac OS發展。發展構思被寫在索引卡片上；短期內似乎很容易實現的特性（如為使用者界面添加顏色）寫在藍色卡片上；較長期的目標——例如搶占式多任務——寫在粉色卡片；長期構想，例如面向對象的文件系統，則寫在紅色卡片上。寫在藍色卡片和粉色卡片上的這些構思的研發是同步進行的，在最初，這兩個項目就被稱為「藍色」和「粉色」。蘋果計劃讓藍隊在1990-1991年這段時期推出一個現有Mac系統的更新版本，讓粉隊在1993年左右推出一個全新的作業系統。

藍色團隊在1991年5月13日發布了後來被稱為System 7的系統，受電影《黃色潛水艇》中的角色影響，他們自稱為「藍色惡棍」。但粉色團隊的工作則受到「第二系統效應」的困擾，其發布日期不斷推遲，前途未卜。一部分原因可以歸因於隨著時間推移在蘋果公司逐漸普遍的問題；隨著粉色項目的延期，其工程師們轉而投入到藍色項目中。這使得粉色團隊面臨人手上的困擾，並遭遇了與高員工流動率相關的問題。管理層沒有重視這些技術開發上的問題，導致持續難以交付出可用的產品。

而與此同時，剛剛發布的NeXTSTEP則激起開發者世界的強烈興趣。原來屬於紅色項目的特性逐漸被合併到粉色項目中，紅色項目（又稱Raptor計劃）最終被取消。在這段時期中，蘋果內部也常常出現類似的問題；為了追求「下一個重大突破」，中層管理隨意地往項目里添加新特性，導致了嚴重的需求蔓延問題。以粉色項目為例，開發進展最終減緩到項目停滯不前的地步。

### Taligent

1991年4月12日，蘋果公司執行長約翰·斯卡利在一台PS/2 Model 70上給IBM的代表團秘密演示了運行中的粉色系統。儘管系統的功能尚不齊備，但其外觀類似於在PC上運行的System 7。IBM對此表現出極大的興趣，在接下來的幾個月里，兩家公司組成了聯盟，以進一步開發該系統。這些工作在1992年初對外公布，並以新名稱「Taligent」進行推廣。當時，斯卡利對蘋果能否憑自身力量發布粉色系統表示了擔憂，他說：「我們希望在電腦行業中成為主要參與者，而不是一個小眾參與者。實現這一目標的唯一途徑是與另一家主要參與者合作。」

新成立的聯合公司內部的內鬥堪稱傳奇，而蘋果內部關於粉色項目的問題很快顯得微不足道。蘋果員工製作了印有圖形的T恤，預言項目最終將變成一個僅由IBM參與的項目。1995年12月19日，蘋果正式退出了該項目。IBM繼續獨自推進Taligent項目，並最終將其應用開發的部分以新名稱「CommonPoint」發布。然而，這並未引起太大興趣，項目在幾個月內就從IBM的產品目錄中消失了。

### 一切照常

Taligent的工作開展的同時，對原有作業系統結構的改進工作卻停滯不前。在此期間，數項新項目啟動了，例如Star Trek project，這是將System 7及其基本應用程式移植到兼容Intel的x86機器上的項目，還達到了內部演示階段。然而，由於Taligent項目仍然是重點關注的對象，新作業系統項目很難獲得任何實際進展。

蘋果公司的藍色團隊則是繼續在原作業系統上添加新功能。在1990年代初期，蘋果公司發布了一系列主要的新功能包，其中包括QuickDraw GX、Open Transport、OpenDoc、PowerTalk等等。大多數這些功能包的體積比原始作業系統還要大。即使是較小的補丁也會帶來穩定性問題，而隨著這些功能包的體積和需求的增加，這些問題也愈加嚴重。到 1990 年代中期，Mac因穩定性差和頻繁崩潰而惡名昭彰。

原作業系統的穩定性已經蕩然無存，現成的答案便是Taligent，大家都認為它會憑藉其全面的現代基礎設施，包括完全可重入、搶占式多任務和記憶體保護來解決這些問題。然而，當Taligent的努力也失敗時，蘋果公司面臨著作業系統老化、沒有明確解決方案的困局。到1994年，即將發布的Windows 95帶起的媒體熱潮不斷升溫，媒體常常質疑蘋果公司應對這一挑戰的能力。媒體對蘋果的態度發生了轉變，經常將蘋果的新項目描述為正在醞釀中的失敗。

### 再試一次

Taligent項目一拍兩散，舊作業系統弊病叢生。在壓力之下，1994年底System 7.5發布後，蘋果管理層決定，這個已有十年的作業系統已經走到盡頭。需要一個新的系統來解決這些問題，而且需要儘快解決。由於現有系統中許多部分難以重寫，蘋果公司制定了一個兩階段的方法來解決這一問題。

在第一階段，現有系統將被遷移到一個新的基於內核的作業系統上，該系統內置了對多任務處理和記憶體保護的支持。現有的庫，如QuickDraw，為新系統重寫將耗費太長時間，而且也不會被改造成重入式。因此，蘋果公司採用了一種方案，即使用一個單一的准虛擬機——藍盒（Blue Box），將應用程式和遺留代碼（如QuickDraw）保留在一個記憶體塊中，使它們可以像以前一樣繼續運行。藍盒在一個獨立的Copland記憶體空間中運行，因此藍盒內的遺留應用程式或擴展崩潰不會導致整個機器崩潰。

在計劃的下一階段，一旦新的內核到位並且基本升級發布後，開發將轉而將舊有的庫重寫成可以直接在新內核上運行的新形式。到那時，應用程式將獲得一些新增的現代功能。

在以音樂為主題的代號命名模式中，System 7.5的代號為Mozart，而這個計劃中的繼任者則被命名為Copland，以紀念作曲家亞倫·科普蘭（Aaron Copland）。緊接著，設想中的繼任系統Gershwin將完成將整個系統遷移到現代平台的過程，但Gershwin的開發從未真正開始過。

### 系統研發

Copland項目首次由大衛·納戈爾在1994年5月宣布。Copland的一些部分，例如新文件系統的早期版本，於1995年5月在WWDC上展示。蘋果公司承諾，Copland的測試版在年底就會準備妥當，到1996年初就會正式上市。等到次年，就會發布Gershwin。在這一年中，蘋果公司向多個雜誌發布了幾份展示新系統外觀的效果圖，並不斷強調公司對這一項目的傾力投入。然而，到年底時，蘋果並沒有發布任何開發者版本。

正如在粉色項目的開發過程中發生的情況一樣，蘋果公司的開發人員很快開始放棄他們自己的項目，轉而投入到新系統的開發中。中層管理人員和項目負責人則反駁稱，他們的項目對系統的成功至關重要，並將其納入Copland開發流程中。因此，這些項目不能被取消，也不能僅僅因為員工被調到Copland項目負責某個部分而被擱置。這個過程在接下來的一年中逐漸加速。

「『每當他們看到一些吸引人的東西時，都要把它加入到作業系統中去。』軟體行業刊物《Softletter》的出版人傑弗里·塔特（Jeffrey Tarter）說。『蘋果公司內部到處都有一些小團隊在做有趣的事情，但這些與蘋果的產品線毫無關係。』」結果形成了一個惡性循環：新功能的加入使得項目進度推遲，於是蘋果公司不得不承諾更多的功能，以證明這些昂貴的延遲是值得的。此外，這種沒完沒了的模式在公司幾乎無法承受任何失誤的時候仍然持續存在。

很快，項目就不怎麼像個新作業系統了，倒像一堆新技術的集合：QuickDraw GX、系統對象模型（System Object Model, SOM），連OpenDoc也成為了系統的核心組件，那些毫無關聯的技術，比如新型文件管理對話框（Open Dialog）和主題支持似乎也是如此。新特性列表的增長速度遠超新特性被實現的速度，項目成為了特徵蔓延的經典案例。一位業內高管指出，「問題的關鍵在於將功能削減至三四個最吸引人的特性，而不是擁有數百個可有可無的功能。我不確定這一點是否正在發生。」

隨著「軟體包」的規模不斷擴大，測試變得越來越困難，工程師們在1995年就評價稱，蘋果公司宣稱的1996年的發布日期是痴人說夢：「Copland絕對沒可能明年發布，能1997年發布出來就不錯了。」

1996年中期，有爆料稱Copland將具有運行為其他作業系統（包括Windows NT）編寫的應用程式的能力。與此同時，儘管有Copland工程師據稱證實了這一點，但Copland項目管理層卻否認了這一說法。據稱，這一功能的開發已超過三年。一位使用者聲稱曾被Copland開發團隊成員告知過這些計劃。一些分析師預測，這一能力將增加蘋果在企業市場的滲透率，而另一些人則表示這意味著「遊戲結束」，只是麥金塔平台無關緊要的一個標誌而已。

### 開發者版本

在WWDC 1996上，蘋果的新CEO，吉爾·阿梅利奧，在整場講演中幾乎都在講那時已被稱為System 8的Copland。他反覆強調，這是蘋果目前工作的唯一重點，並且將在幾個月內向開發者發布，計劃於1996年底正式發布。然而，會議上幾乎沒有展示正在運行的作業系統。被拿出來展示的是將納入軟體包中的各種技術和使用者界面組件（如新型文件管理對話框）。核心系統技術的展示很少，且一年前展示的新文件系統也沒有出現。

有一種真正上手使用新作業系統的方法——就是在開發者實驗室預約一個時間。然而，這體驗並不順利：

有過一次對OS 8現狀的實地演示。雖然能夠瞥見幾眼誘人的未來功能，但整體體驗非常糟糕。它連文本編輯都還不支持，所以你能做的只有打開和查看文檔（任何需要輸入的對話框欄位都是空白且無反應的）。此外，它極其脆弱，經常崩潰，往往在運行過程中損壞磁碟上的系統文件。演示人員定期格式化和重建硬碟。讓我們甚至能夠看到這個系統，實在令人難以置信。

親歷這場展會中的一些人抱怨微內核不成熟，特別是缺乏對稱多處理功能，而這種功能在幾個月內要發布的系統中添加是極其困難的。之後，阿梅利奧重新登台，宣布他們將把這一功能添加到特性列表中。

1996年8月，「開發者版本0」被寄送給了少數幾個精選的合作夥伴。與演示中所宣稱的改進的穩定性完全不同，這系統經常什麼都不做就會崩潰，並且完全無法用於開發。在十月份，蘋果將計劃的交付時間改為了「某個時間」，暗示或許會推遲到1997年。最感到意外的團隊之一是蘋果自己的硬體團隊，他們一直在等待Copland能夠使PowerPC得到原生支持，不再受軟體遺留問題的困擾。蘋果軟體質量保證團隊的成員開玩笑說，考慮到當前的資源和系統中的大量漏洞，他們可能要等到2030年左右才能將程序清理完畢並準備發貨。

### 項目取消

到了1996年8月晚些時候，狀況仍然沒有改善。阿梅利奧抱怨Copland只是「一堆碎片的集合，每一片都由不同的團隊負責…幻想著能夠把這些部分神奇地融合在一起。」為了挽救局面，阿梅利奧從國家半導體公司挖來了艾倫·漢考克，讓她接管工程部門，替換掉艾克·納西，並使Copland的開發回到正軌。

在工作崗位上待了幾個月後，漢考克得出結論，情況已經無可挽回；考慮到當前的開發和工程狀況，她認為Copland永遠也不可能上市。她轉而建議將Copland中各種面向使用者的技術分階段推出，而不是一次性推出一個大版本。蘋果公司在1996年8月正式取消了Copland項目，開發者版本的光碟袋已經印刷完成，但光碟尚未製作。

在這些新技術的外表下，基礎設施卻日漸老化。為了解決這問題，阿梅利奧建議在公司外部尋覓一個全新的作業系統以供使用。Sun公司的Solaris系統和Windows NT都是備選項。漢考克據稱更傾向於Solaris，而阿梅利奧則偏好Windows。據說阿梅利奧甚至致電了比爾·蓋茨討論這個想法，蓋茨承諾將讓微軟工程師投入工作，將QuickDraw移植到NT。

在和Be漫長的協商並傳出與Sun電腦公司合併的流言後，蘋果於1996年12月宣布將購買NeXT公司，將史蒂夫·賈伯斯聘為顧問，讓許多人大跌眼鏡。阿梅利奧打趣說他們「選擇了計劃A，而非計劃Be」。將NeXTSTEP移植到麥金塔平台的項目被命名為Rhapsody，並將成為蘋果跨平台作業系統戰略的核心。這會繼承OPENSTEP現有的對PowerPC、Intel x86、以及DEC Alpha CPU架構的支持，以及在Windows NT上運行的OPENSTEP庫的實現。這實際上使得Mac開發者能夠進入Windows應用市場，他們可以從蘋果公司獲得庫的許可，以便與他們的產品一起分發，或依賴於現有的安裝。

### 項目遺產

根據漢考克的計劃，開發工作在原System 7.5上繼續，多個Copland的元素被融入其中。System 7在7.6版本發布時被重新命名為Mac OS 7，穩定性和性能得到了提升。許多Copland的功能，包括新的多線程 Finder 和對主題（默認為Platinum主題）的支持，被集成到了未發布的 Mac OS 7.7 測試版中，該測試版後來被重新命名並作為Mac OS 8正式發布。

隨著賈伯斯的回歸，第八個大版本的重新命名也讓蘋果能夠利用法律上的漏洞，終止對第三方製造System 7電腦的授權，成功終結了克隆Mac市場。之後，Mac OS 8.1終於支持了新文件系統，Mac OS 8.6升級了超微內核，以便支持有限的搶占式多任務。它使用的接口是Multiprocessing Service 2.x以及更新的版本，但是沒有進程區分，系統仍然在進程之間使用協作式多任務。即使是支持Multiprocessing Services的進程，仍然有一部分運行在藍盒中，藍盒任務還負責運行所有單線程程序，並且是唯一能運行68k代碼的任務。

Rhapsody項目在幾次開發者預覽版發布後被取消，對非Macintosh平台的支持也被放棄，最終以Mac OS X Server 1.0的形式發布。到2001年，這一基礎與Carbon庫和Aqua使用者界面結合，形成了現代的Mac OS X產品。在Mac OS X 10.4（Tiger）發布之前的版本中，仍然使用了無根模式藍盒的概念，以Classic形式運行為舊版本Mac OS編寫的應用程式。許多最初在Copland演示中出現的功能，包括其高級的查找命令、內置的網際網路瀏覽器、文件夾堆疊以及影片會議支持，分別以Spotlight (應用程式)、Safari、Stacks和iChat AV的形式在後續的Mac OS X版本中重新出現，儘管每個功能的具體實現和使用者界面都大相逕庭。

## 硬體要求

根據開發者版本中的文檔顯示，Copland支持以下的硬體配置：

- 基於NuBus的Macintosh: 6100/60, 6100/60AV (無AV功能), 6100/66, 6100/66 AV (無AV功能), 6100/66 DOS (無DOS功能), 7100/66, 7100/66 AV (無AV功能), 7100/80, 7100/80 AV (無AV功能), 8100/80/ 8100/100/ 8100/100 AV (無AV功能), 8100/110
- 基於NuBus的Performa: 6110CD, 6112CD, 6115CD, 6117CD, 6118CD
- 基於PCI的Macintosh: 7200/70, 7200/90, 7500/100, 8500/120, 9500/120, 9500/132
- 使用Drive Setup格式化的驅動器
- 對於DR1及更早版本，安裝程序需要System 7.5或更高版本，並且硬碟容量必須為250MB或更大。
- 顯示器設置為 256 色（8 位）或千色（16 位）。

## 基本資料

- 日語原文：Copland
- 開發者：蘋果公司
- 作業系統家族：麥金塔作業系統
- 源碼模式：閉源
- 運作狀態：歷史性版本，不支援
- 前一代：System 7
- 後一代：Mac OS 8