Copland (操作系統)

Copland操作系統是蘋果公司在1994年至1996年間開發的一款操作系統，專為Macintosh計算機設計，它原本計劃以System 8之名發佈，或在命名規則改變後以Mac OS 8作為名稱發佈，可是該系統最終未能上市。其時，System 7操作系統已經顯得老舊，蘋果計劃以Copland接替System 7。它引入了諸如內存保護、搶佔式多任務等新的底層操作系統功能，同時保持與現有Mac應用程序的兼容性。Copland的暫定繼任者代號為Gershwin，計劃引入更先進的功能，例如應用級多線程處理。
開發工作正式開始於1994年3月。在接下來的幾年裡，Copland的預覽版引起了大量媒體關注，讓Mac用戶瞭解到了操作系統的一些新概念，如面向對象、抗崩潰設計和多任務處理。1995年8月，高級副總裁David Nagel在Macworld Expo上宣佈，Copland會於1996年中期發佈。隨後在1996年5月，吉爾·阿梅利奧表示，Copland是公司的主要重點，目標是在年底發佈。然而，內部開發工作面臨許多問題，由於公司人員和項目管理失調，蘋果一再錯過開發里程碑和開發者版本發佈的預定日期。
這個系統在開發過程中不斷引入新特性，並在內部測試版本中表現出嚴重的不穩定。Ellen Hancock臨危受命，試圖將項目帶回正軌，然而漢考克很快得出結論，認為該項目永遠無法完成。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能夠檢查應用程序的內存，以獲取諸如線條繪製模式或顏色等設置。
這些限制意味著，如果不重寫整個系統和應用程序代碼，支持多任務功能將十分困難。然而，這樣做又會使得操作系統在現有硬件上慢得令人難以忍受。因此，蘋果公司在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環境會自動重啟。
這是Copland運行時架構圖。圖中包含了紫色框，顯示控制線程，而粗線條表示不同的內存分區。左上角是藍盒，運行多個System 7應用程序（藍色）及支持它們的Toolbox代碼（綠色）。兩個無頭應用程序在各自的空間中運行，提供文件和網頁服務。在底部是與內核在同一內存空間中的操作系統服務端，表示它們的共存位置。
而在編寫時就考慮到Copland的新應用程序，可以直接與系統的服務端通信，從而在性能和可擴展性方面獲得許多優勢。它們還可以與內核直接交互，以啟動單獨的應用程序或線程，這些應用程序或線程作為獨立進程在受保護的內存中運行，就像大多數現代操作系統一樣。可是，這些獨立運行的應用程序不能使用非可重入調用，例如QuickDraw，也因此無法提供用戶界面。蘋果建議較大的程序可以將用戶界面放入一個普通的Macintosh應用中，然後再在外部啟動一個工作線程。
Copland完美原生支持PowerPC。System 7已經成功地被移植到PowerPC平臺上；系統的大部分功能都以PPC代碼運行，包括高級功能（如大多數的用戶界面工具箱管理器）以及底層功能（如中斷管理）。系統中有足夠的 68k代碼可以仿真運行，尤其是用戶應用程序，但操作系統必須在兩種環境之間映射一些數據。特別是，每次對Mac OS的調用，都需要在68k和PPC的中斷系統之間進行映射。移除這些映射將大大提高系統的整體性能。在1996年的WWDC上，工程師們聲稱系統調用的執行速度將提升多達50%。
Copland還基於那時候新定義的Common Hardware Reference Platform（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的系統，受電影《黃色潛水艇》中的角色影響，他們自稱為“Blue Meanies (Apple Computer)”。但粉色團隊的工作則受到“第二系統效應”的困擾，其發佈日期不斷推遲，前途未卜。一部分原因可以歸因於隨著時間推移在蘋果公司逐漸普遍的問題；隨著粉色項目的延期，其工程師們轉而投入到藍色項目中。這使得粉色團隊面臨人手上的困擾，並遭遇了與高員工流動率相關的問題。管理層沒有重視這些技術開發上的問題，導致持續難以交付出可用的產品。
而與此同時，剛剛發佈的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項目，這是將System 7及其基本應用程序移植到兼容Intel的x86機器上的項目，還達到了內部演示階段。然而，由於Taligent項目仍然是重點關注的對象，新操作系統項目很難獲得任何實際進展。
蘋果公司的藍色團隊則是繼續在原操作系統上添加新功能。在1990年代初期，蘋果公司發佈了一系列主要的新功能包，其中包括QuickDraw GX、Open Transport、OpenDoc、Apple Open Collaboration Environment等等。大多數這些功能包的體積比原始操作系統還要大。即使是較小的補丁也會帶來穩定性問題，而隨著這些功能包的體積和需求的增加，這些問題也愈加嚴重。到 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項目首次由David Nagel在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開發團隊成員告知過這些計劃。一些分析師預測，這一能力將增加蘋果在企業市場的滲透率，而另一些人則表示這意味著“遊戲結束”，只是麥金塔平臺無關緊要的一個標誌而已。

**開發者版本**
在WWDC 1996上，蘋果的新CEO，吉爾·阿梅利奧，在整場講演中幾乎都在講那時已被稱為System 8的Copland。他反覆強調，這是蘋果目前工作的唯一重點，並且將在幾個月內向開發者發佈，計劃於1996年底正式發佈。然而，會議上幾乎沒有展示正在運行的操作系統。被拿出來展示的是將納入軟件包中的各種技術和用戶界面組件（如新型文件管理對話框）。核心系統技術的展示很少，且一年前展示的新文件系統也沒有出現。
有一種真正上手使用新操作系統的方法——就是在開發者實驗室預約一個時間。然而，這體驗並不順利：
有過一次對OS 8現狀的實地演示。雖然能夠瞥見幾眼誘人的未來功能，但整體體驗非常糟糕。它連文本編輯都還不支持，所以你能做的只有打開和查看文檔（任何需要輸入的對話框字段都是空白且無反應的）。此外，它極其脆弱，經常崩潰，往往在運行過程中損壞磁盤上的系統文件。演示人員定期格式化和重建硬盤。讓我們甚至能夠看到這個系統，實在令人難以置信。
親歷這場展會中的一些人抱怨微內核不成熟，特別是缺乏對稱多處理功能，而這種功能在幾個月內要發佈的系統中添加是極其困難的。之後，阿梅利奧重新登臺，宣佈他們將把這一功能添加到特性列表中。
1996年8月，“開發者版本0”被寄送給了少數幾個精選的合作伙伴。與演示中所宣稱的改進的穩定性完全不同，這系統經常什麼都不做就會崩潰，並且完全無法用於開發。在十月份，蘋果將計劃的交付時間改為了“某個時間”，暗示或許會推遲到1997年。最感到意外的團隊之一是蘋果自己的硬件團隊，他們一直在等待Copland能夠使PowerPC得到原生支持，不再受軟件遺留問題的困擾。蘋果軟件質量保證團隊的成員開玩笑說，考慮到當前的資源和系統中的大量漏洞，他們可能要等到2030年左右才能將程序清理完畢並準備發貨。

**項目取消**
到了1996年8月晚些時候，狀況仍然沒有改善。阿梅利奧抱怨Copland只是“一堆碎片的集合，每一片都由不同的團隊負責…幻想著能夠把這些部分神奇地融合在一起。”為了挽救局面，阿梅利奧從國家半導體公司挖來了Ellen Hancock，讓她接管工程部門，替換掉Ike Nassi，並使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電腦的授權，成功終結了Macintosh clone市場。之後，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 位）。

**參考資料 ==