Copland (作業系統)

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

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

開發工作正式開始於1994年3月。在接下來的幾年裏,Copland的預覽版引起了大量媒體關注,讓Mac用戶了解到了作業系統的一些新概念,如面向對象、抗崩潰設計和多任務處理。1995年8月,高級副總裁David Nagel在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開發人員能夠利用一些妥協性的簡化措施,從而顯著提升性能,使其運行速度甚至超過了更昂貴的Lisa。然而,這種設計也導致了未來發展的若干問題。

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

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

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

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

——亞當·布魯克斯·韋伯,Byte (1986年9月)[1]

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

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

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

Copland的設計

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

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

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


  1. ^ Webber, Adam Brooks. Amiga vs. Macintosh. Byte. Vol. 11 no. 9. September 1986: 249–256.  (Adam Webber was the programmer responsible for porting TrueBASIC to the Amiga and Macintosh)