受到早期个人计算机的性能限制,操作系统通常只通过命令行(BASIC)与用户交互。在这时大部分人只把个人计算机当作一个性能强大的游戏机使用,对计算机能做到的其他事缺乏了解。在1981年,第一个图形界面操作系统Alto在施乐问世了。然而施乐并没有发现图形界面的潜力,只把它当作一个内部项目使用。另一方面,当时个人计算机市场的领头羊之一苹果慧眼识珠,在OSX诞生前,苹果已经创造出了Macintosh这个成功的图形界面操作系统。Micintosh和施乐的Alto类似,使用鼠标作为指向设备,让用户可以直观地使用电脑的每个部分。
然而竞争对手也已经发现了良好的图形界面可以让入门用户也能发挥电脑的强大功能,也开发了自己的图形界面操作系统。其中最有名的便是微软基于MS-DOS开发的Windows系列。在1988年,Macintosh已经问世了四年,苹果知道自己需要一个更新的系统来竞争。在一番头脑风暴之后,苹果内部使用三色卡片区别三个不同的项目。蓝色卡片是关于Macintosh的一系列改进,是1991年苹果发布的Macintosh System 7的基础。粉色卡片则是一个更加激进的计划,构想了一个更加现代的操作系统。其中包括了面向对象,保护内存,多线程支持等等一系列现代操作系统的功能。最后的红色卡片则包含了比红色卡片更加激进的计划。
然而,粉色和红色卡片的构想被证明是难以实现的,而即使是最保守的蓝色卡片也一直到1991年才发布,此时微软已经在1990年发布了非常受欢迎的Windows 3.x系统,并在1993年发布了脱离MS-DOS的Windows NT系统以及1995年发布了更加受欢迎的Windows 95系统。苹果却在1991年后在更新的操作系统上几乎毫无建树。在1991到1997年苹果有高达7个操作系统有关的计划在实行中,包括运行在x86平台上的Star Trek项目,目标是构建全新的微内核的Raptor和NuKernel项目,与IBM合作尝试实现粉色卡片的TalOS项目,全面升级现有Macintosh的Copland和Gershwin项目,以及收购并改进一个现有的操作系统BeOS计划的Be项目。这七个项目的目标尽管各有千秋,但他们最后的结局无一例外的是流产了。其中最好的结局是Copland计划的一部分融入Macintosh的现有代码,而Gershwin则被认为只是个名头,并没有人去实现它。此时苹果处于低谷时期,管理层的目光又转回了乔布斯和他自己创建的NEXTSTEP操作系统。尽管当时NEXTSTEP还没有获得巨大的成功,它的设计已经吸引了一些企业用户,并且与苹果其他的计划不同的是它是一个真正的可以运行的操作系统。苹果在1997年收购了NeXT公司,事实证明,NEXTSTEP将为苹果翻开下一篇章。
NEXTSTEP使用了一个混合内核,它的底层是CMU开发的一个名不见经传的微内核Mach,而用户空间则是一个BSD系统。因此NEXTSTEP是一个Unix兼容的操作系统,并和当时的Unix系统一样提供一个命令行供用户操作。然而NEXTSTEP真正引人注目的地方是它的图形系统。事实上,很多NEXTSTEP的功能一直保留到现在的OSX中,包括:
- 屏幕底部的Dock
- 多窗口处理,程序可以被隐藏而不是退出
- 一个可以访问网络存储的文件管理器
- 一个面向对象的驱动框架,Driver Kit
- 拖拽操作文件,例如可以直接把图片拖进邮件应用中作为附件发送
NEXTSTEP和其他操作系统另一个不同之处是使用了Objective-C开发整个系统。Objective-C受Smalltalk启发,是一个强调面向对象的C家族语言。由于这个特性NEXTSTEP的很多部分都是面向对象设计的。另一方面,NEXTSTEP大大简化了编写图形化程序的难度。系统自带一个Interface Builder使用户可以拖拽构建图形界面,然后再针对其编程。在1995年,NEXTSTEP发布了最后一个版本3.3,此时它已经是一个完整的图形界面操作系统,有着CD音效已经多任务处理功能,这也是苹果未来的系统雏形。
NEXTSTEP的内核和其他系统的区别在于整个内核是围绕Mach这个微内核构建的。而Mach最初来源于罗切斯特大学一个一个实验性项目RIG。RIG的目标是为不同的设备创建一个统一的接口。例如磁带机,打印机,制图机乃至于网络上的另一台计算机在RIG中都是统一的资源。这个计划诞生了Aleph内核,这个内核的特点是所有的进程都可以发送消息通信。每一个进程有一些port可以用来接收信息。如果进程X想要发一个消息给Y,那只需要指定Y的port号即可直接发送。由于消息的目的地并不是进程而是port,这个机制允许一个进程拦截另一个进程的信息,构建更加强大的系统。然而,由于RIG在1975年诞生,运行的硬件有诸多限制,例如没有虚拟内存,对port使用没有保护,以及由于内存限制每条消息最多只能2KB。因此这个项目很快就被搁置了。
随后,一名RIG的研究人员到卡耐基梅隆大学继续做着类似的研究。吸取RIG的经验,以及有了更新的硬件,一个新的内核Accent诞生了。Accent最大的改进是支持了虚拟内存,因此消息没有了大小限制,并且port有了权能作为保护措施。Accent更进一步地将跨进程通信的能力拓展到了网络上,一台计算机可以通过一个中转进程向另一台计算机的进程发送消息而不用担心它在网络的什么位置。然而Accent还是有一些问题,例如它不能支持多个处理器,并且不能兼容Unix的程序,也就意味着Accent没有成熟的生态。
为了进一步修补这些问题,Mach诞生了。Mach相对于Accent加入了完整的多处理器支持,并且要能兼容Unix。最后,开发者希望这个新内核要比Unix内核简单,因为Unix在当时已经有了15年的历史,内核臃肿程度让Mach开发者之一Richard Rashid将它成为“充满了特性或者功能的垃圾场”。因此,Mach使用4.3BSD作为起点,逐步替换掉复杂的Unix内核,并用更加简单的Mach微内核的功能代替。终于,在1986年Mach诞生了。Mach和Accent相比更加完善,但还是保留了从RIG以来就有的消息和port系统用于任务间通信(Mach将进程process称作任务task)。Mach相比Unix也改进了虚拟内存子系统。原本的4.3BSD虚拟内存需要一个连续的物理内存空间映射,而Mach的虚拟内存允许将多个分散的物理内存空间组合在一起使用,并且Mach保留了Accent的CoW技术,让内存使用更加充分。这个虚拟内存子系统的抽象非常完善,以至于理论上应用程序可以用同样的系统调用直接使用另一台计算机的内存而不会注意到任何区别。现在的OpenBSD的虚拟内存子系统就是以Mach的为基础做成的。
在Mach1和2中,由于整个系统是从4.3BSD修改的,BSD和Mach依然在同一个内存空间中,也就是说Mach还不是真正的微内核。从Mach3开始,Mach内核彻底脱离了BSD,BSD成为了一个用户空间程序,而不直接触及硬件。所有的底层调用全部由Mach内核完成。这个版本的Mach将硬件也抽象成了一个可以接收消息的port,让人物和硬件接口统一。此时的Mach内核更像一个虚拟机,可以让直接另一个操作系统运行在Mach内核上。然而,将操作系统运行在微内核上意味着需要在不同的系统之间来回切换,并且Mach使用的IPC机制尽管强大但有着不小的性能开销,因此Mac OS X使用了Mach2的做法,让BSD和Mach内核运行在同一个空间中以减小开销。随着Mach的成熟以及NEXTSTEP的收购,属于OS X的历史即将开始。
在收购了NeXT公司后,苹果开始对自己的操作系统进行一系列更新。收购后的第一个版本是1996年发布的7.6版操作系统,这也是第一个被称作 “Mac OS”而不是Macintosh的操作系统。在这个版本中苹果着重强调了这个系统的网络功能,包括内置的拨号功能已经可以将网络资源存储到桌面的功能。7.6只是一个过渡版本,很快,Mac OS来到了Mac OS 8版本。
Mac OS 8融合了之前提到的Copland的一部分功能,例如HFS+文件系统以及Carbon API的原型Copland API。在用户体验方面,Mac OS 8重新设计了一个更加好看的图形界面,以及加入了多用户的支持。另外,这个系统中还内置了浏览器(IE和网景)以及Java运行时。接下来的Mac OS 9则成为了第一个可以通过网络更新的系统版本,以及加入了文件加密和Keychain密码保护功能。然而这些版本都是在原本的Macintosh的基础上的改进,Mac OS 9.2.2也成为了Macintosh系统的最后一个版本,这些现在被称为Classic Mac OS系统。
在对Macintosh改进的同时,苹果也在马不停蹄地改进NeXT的OPENSTEP系统(NeXTSTEP的开源版本),并在1997年WWDC正式亮相。此时新系统被称作Rhapsody,它有一个全新的底层,包含
- 基于Mach和BSD的内核
- 一个兼容Classic Mac OS的子系统(蓝盒子)
- 一个OPENSTEP API的扩展(黄盒子)
- 一个Java虚拟机
- 一个基于Display PostScript窗口系统
- 一个融合NeXTSTEP标志性的拖拽功能和Mac OS的华丽界面的用户界面
其中兼容Classic Mac OS的子系统是一个加载了Mac OS 8的映像的虚拟机,而开发环境(也被称作黄盒子)提供了针对三个OPENSTEP核心框架:Foundation,Application Kit和Display PostScript的支持。开发者可以使用Objective-C和Java开发程序。黄盒子除了在Rhapsody上提供以外,也提供Windows版本供开发者使用。
在发行了两个Rhapsody版本之后,苹果终于发布了Mac OS X系统和Darwin。Darwin是一个供开发者使用的开源版Mac OS X内核。首先发布的是Mac OS X server,本质上是Rhapsody的另一个改进版,包含了一些开发用的工具,例如apache服务器和一些网络工具。而桌面版的系统则发布了开发者预览版,并在2000年9月13日发布了一个公众预览版Mac OS X,标志着Mac OS X正式进入市场。在这个版本中Mac OS X使用了拟物化界面设计,并在底部加入了的dock。在2001年3月24日,Mac OS X发布了一个正式版“猎豹”。OS X(Darwin)使用的内核名为XNU,是X is Not Unix的缩写。XNU除了使用Mach以外,还加入了一些其他项目的代码,例如苹果赞助的MkLinux的代码,和NetBSD以及OpenBSD的代码。