Copland (作業系統)

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

開發工作正式開始於 1994 年 3 月。在接下來的幾年裡，Copland 的預覽版引起了大量媒體關注，讓 Mac 使用者瞭解到了作業系統的一些新概念，如面向物件、抗崩潰設計和多工處理。1995 年 8 月，高階副總裁在上宣佈，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 歷史上最失敗專案的榜單中。

設計

1.1 經典 Mac OS

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

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

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

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

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

(Adam Webber was the programmer responsible for porting TrueBASIC to the Amiga and Macintosh)}}

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

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

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

1.2 Copland 的設計

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

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

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

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

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

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

歷史

2.1 粉色與藍色

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

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

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

2.2 Taligent

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

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

2.3 一切照常

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

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

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

2.4 再試一次

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

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

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

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

2.5 系統研發

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

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

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

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

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

2.6 開發者版本

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

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

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

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

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

2.7 專案取消

到了 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 應用市場，他們可以從蘋果公司獲得庫的許可，以便與他們的產品一起分發，或依賴於現有的安裝。

2.8 專案遺產

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

隨著喬布斯的迴歸，第八個大版本的重新命名也讓蘋果能夠利用法律上的漏洞，終止對第三方製造 System 7 電腦的授權，成功終結了市場。之後，Mac OS 8.1 終於支援了新檔案系統，Mac OS 8.6 升級了超微核心，以便支援有限的搶佔式多工。它使用的介面是 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 位）。