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 位）。