操作系统GUI历史请看考下面三个网站:
http://coolshell.cn/articles/105.html
http://www.guidebookgallery.org/ 如果你比较关注图形化UI的设计, 可以上这个网站上看看。
http://toastytech.com/guis/index.html 这是一个操作系统图形界面收集的网站,上面几科包括了所有的操作系统图形界面。
网上有牛人对Windows与linux的GUI的纠葛的关系进行了说明,文章如下:
http://forum.linuxfans.org/thread-99989-4-369.html 作者:EricNeon
简单的说,Windows GUI的目标是打印,而linux GUI的目标是网络。早期Mac GUI的目标也是打印,而现在Mac os X的目标是多媒体。
Windows 最初出现的时候,这个世界还是一个纸张的世界。人们刚刚完成了从打孔机向普通打印机的过渡。Windows 的伟大成就之一在于你的工作成果可以方便地看到并打印出来。微软最初在考虑OS的设计时就参考了Mach2系统。
当时操作系统界存在着微内核和宏内核体系的争论。内核提供操作系统的核心功能。微内核(Microkernel)是内核的一种精简形式,通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入的选件,这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。微内核提供一组“最基本”的服务,如进程调度、进程间通信、存储管理、处理I/O设备。其他服务,如文件管理、网络支持等通过接口连到微内核。与此相反,宏内核是集成的,比微内核更大。
而unix系统一贯是按照宏内核的方式设计。历史上最著名的微内核系统有Mach(卡内基 梅隆大学设计开发)、Nucleus Chorus系统(法国Beaverton,oregon设计)。而基于这两个内核,开发系统基金会设计出了OSF/1MK (它实现了Mach内核,并提供虚拟存储管理、进程间通信和设备驱动程序管理。)UNIX SVR4 UNIX系统实验室公司推出了一个微内核的UNIX SVR4(系统V版本4)。它实现了Nucleus微内核。它提供前面讨论的所有微内核特征;然而,在微内核中不管理驱动程序。还有一种就是WorkPlace OS(IBM的微内核是基于Mach微内核的。这种微内核在Motorola PowerPC处理器上运行,它是Intel 80486和Pentium处理器的直接竞争者)
Mach2是Mach的一个延伸项目,当时有几个大学生正在尝试在Mach2上开发一个GUI,微软从苹果的成功中意识到GUI的重要性,于是他们立即将这几个大学上招入门下,并挑选了这个项目作为其研发windows的基础。这时是1983年,整个系统首先被移植DOS上。微软相继开发了windows1.0、windows1.02。在1985年和1987年相继发布了windows1.03和windows2.0版本。
微软在发布了windows2.0以后开始意识到整个系统基于DOS是十分弱智的决策,DOS系统天生就不够强大,只能算是一个初级的玩具。但是DOS系统有一个观念是非常先进的,那就是将整个系统资源划分成C盘、D盘……
为什么说这种分区方式是先进的?因为这符合人类对自然界的基本认识规律。人们会把东西放在某个地方,而在人的意识中,这个东西应该是一个整体。这个东西在被移动、删除时都是被整体移动的。而unix将所有东西看作文件,unix的分区方式是将物件的各个部分以类型分开放置。执行文件放在/bin,/sbin目录下,配置文件放在/etc下。这种放置方式对于普通人来讲可能就是个灾难,人们在操作UNIX时,试图转移一点文件,就要考虑到是否对整个系统造成了影响。而DOS将系统放在C盘中,其他文件可以放在其他任何地方。windows的开发继承了这个传统,将C盘作为系统盘。
目前的linux/unix的标准中也更加重视怎样降低非系统数据对系统的影响。但是windows在这个方面先走了一步。微软在windows2.0以后及时调整了策略,加紧了对Mach2的研究。前面我们说windows的GUI目标是打印,在windows之前的DOS系统中,微软已经开发了大量的GUI工具,但如果我们仔细看这个DOS下的GUI工具,我们会发现,除了最基本的文本编辑,就剩下打印是主要的了。打印的排版、类型、字符都是微软首先考虑的对象。在windows中,更是体现了这个思想——打印优先。
此后,微软公司从Mach2基础开始对Windows的内存管理、图形界面做了重大改进,使图形界面更加美观并支持虚拟内存。我们说,微软优先使用虚拟内存,以减少对内存的占用率是又一个决策性错误。因为系统读取硬盘中虚拟内存的速度明显比不过直接读取内存数据的速度。而linux设计是优先使用内存。(扯远了^_^)
在设计GUI的时候,微软的开发人员试图直接在内核中整合GUI的支持。但是这样做并不容易,到目前,unix/linux也还是将GUI的Server端独立在内核之外。按照微内核的设计思想,似乎将GUI整合进内核中是彻底的背叛。微软只能尽可能地精简内核,在GUI设计中,只保留了最基本的一些元素。注意,这个时候的内核仍然是宏内核的。就在这个同时,微软组织了2000多名工程师,开始了一个全新的项目——NT。NT的目的不仅在于设计一个操作系统参与服务器端的竞争,更重要的是,微软的宏内核计划已经举步唯艰。
新的windows的开发非常缓慢,几乎花了三年。微软于1990年5月份推出Windows3.0并一炮打红。这个“千呼万唤始出来”的操作系统一经面世便在商业上取得惊人的成功:不到6周,Microsoft公司销出50万份Windows3.0拷贝,打破了任何软件产品的6周销售记录,从而一举奠定了Microsoft在操作系统上的垄断地位。
一年之后推出的Windows3.1对Windows 3.0作了一些改进,引入TrueType字体技术,这是一种可缩放的字体技术,它改进了性能;还引入了一种新设计的文件管理程序,改进了系统的可靠性。更重要的是增加对象链接合嵌入技术(OLE)和多媒体技术的支持。Windows3.0和Windows3.1都必须运行于MS DOS操作系统之上。TrueType技术的引入是“打印优先”思想的集中体现。也是从windows3.1开始,微软正式开始发布支持双字节的多语言系统。中文版的windows就这么开始了。但是GUI构成在宏内核中显得非常庞大,微软必须考虑彻底抛弃DOS才行。
在微软的产品体系中,NT和windows并驾齐驱,虽然两者的内核不同,但是基于宏内核的Windows有了一点突破。90年代中期,正好是PC架构从16位体系转向32位体系的关键时刻。微软抓住了这个时机发布了Windows95,并宣称这是一个完全32位的操作系统。Windows95具备了现在“Windows”概念所需要的几乎所有特性。所以在操作系统界内,说到windows,其实就是说win95。
Windows95(又名Chicago),它可以独立运行而无需DOS支持。Windows95是操作系统发展史上一个里程碑式的作品,它对Windows3.1版作了许多重大改进,包括:更加优秀的、面向对象的图形用户界面,从而减轻了用户的学习负担;全32位的高性能的抢先式多任务和多线程;内置的对Internet的支持;更加高级的多媒体支持(声音、图形、影像等),可以直接写屏并很好的支持游戏;即插即用,简化用户配置硬件操作,并避免了硬件上的冲突;32位线性寻址的内存管理和良好的向下兼容性等等。
注意,上面说的“面向对象技术”正是当时最时髦的研究成果,windows中的分区和文件管理方式延续了DOS的设计——系统盘始终放在C盘,文件位置则由用户自己定位。微软在win95中提供了一个DOS控制台,以完成所谓的技术过渡。GUI的应用绝不仅仅是一个窗口管理器的式样,windows的文件管理器也与内核更加紧密结合,并且微软开始提供一个IE浏览器与当时的网景竞争。可以说这个时候的IE十分简陋,界面的操作方式与win95本身并没有多大的整合度。
前面说微软宣称win95是完全的32位系统,以及多用户系统,这其实并不真实。win95本身虽然也有控制台修复模式,但是这个模式在GUI设计时并没有做好。所谓的多用户的GUI很少有人能够真正使用。win95的内核仍然是宏内核。在第二年,也就是1996年,微软正式发布了NT4.0,这个系统是微软历史上又一个里程碑。NT4.0的意义不仅仅是带给微软服务器市场上的胜利,还有一个关键细节被人忽略了,这就是微内核系统上GUI设计思想的成功。
96年,微软又发布了一个WIN CE 1.0。这个版本是微软在GUI设计上经过反省后开发的一个基于微内核的系统。微软已经发现在宏内核中整合一个GUI是非常吃力不讨好的策略。但是微软这个时候不可能停手,因为网景公司对它的压力很大,而32位体系对于win95来说仅仅还是个试验。
于是微软又做了一个大手笔的动作,请了全球上千名高级工程师,开发win98。win98的策略是将win95中的16位支持代码全部转向32位体系代码;免费赠送新的IE浏览器,把网景打下台;重新做一次针对宏内核的GUI设计,这也是微软破釜沉舟的一次冒险。幸运的是,win98成功了。win98对于很多操作系统界的人来说很简单,没什么好提的,就是一个win95+新的IE。win98奠定了微软在全球桌面系统老大的地位。但是win98的32位代码改成工程进展出现重大问题。一些GUI的简单错误直接影响到内核的处理,所以我们经常在win98中见到蓝屏现象,而在win95和以后的版本中比较少见。
unix是大多以宏内核为主的。linux也是宏内核。
in98的困境使微软开始考虑放弃在“宏内核”上架设GUI。随后微软相继发布了win97和winme,目的在于修正win98中的代码问题,并且在winme中大胆尝试了新的GUI设计方案。这个方案就使后来在XP中使用的方案。
大家在安装XP时可以看见“基于winNT架构构建”的说明,为什么微软要标榜这个呢?这说明微软在宏内核上的GUI构建已经失败,他们的主要方向将转到微内核。所以可以这么说,在windows me以前的产品中,windows系列都是使用宏内核,只不过这个宏内核的一些设计融合了Mach2和DOS的设计思想。不知道这么说,bamfox兄弟是否明白。
从windows2K以后,包括XP,2003和开发中的longhorn都是基于Mach2微内核的系统。win me可以说既是微软宏内核系统最后的版本,也是XP的试验版本。
天哪,说了半天,终于开始讲微内核。汗~~
说起微内核就不得不提苹果公司。苹果公司在1982年开始研发他们的Classic Mac OS,整个系统从一开始就采用了Mach微内核来作为基础内核。Classic是一个100%的GUI系统,没有终端。苹果最初设计GUI的时候,发明了一个很先进的文件系统:一个文件包括了两个不同的“分支”(forks)。它分别把参数存在“资源分支”(resource fork),而把原始数据存在“数据分支”(data fork)里,这在当时是非常创新的。但是,因为不能识别此系统,这让它与其它操作系统的沟通成为挑战。
在苹果最初的几个系统中,GUI被设计成独占式的。这导致了内存管理和多任务以及功能扩展等现代操作系统必须必备的功能被严重限制了,从而引发了很多批评。当时Steven Jobs离开了Apple,独立开创了Next系统公司,并立志要创建最好的unix工作站。他把原先苹果公司采用的GUI重新设计,直接与mach结合,做成了Next Cube。Next Cube曾经是桌面上最酷的工作站,除了出色的硬件性能,Next还开发了全新的面向对象的编程环境叫做 NextStep. 这是当时最好的桌面环境了。当然代价就是高昂的价格,六千美元的起始价让许多商业用户转向了SUN 和HP. 不过由于NeXT 在学术界的声望,不少当时最优秀的计算机人才或多或少地受到了NextStep的影响,包括后来的Java ,在设计上受到了NeXT step很大的影响。世界上第一台web server就是运行在NeXT的工作站上。人们都一致同意,面向对象技术的完美体验就是使用NeXT step。NeXT Step在当时最大的卖点有两条:一是基于最纯正的面向对象的系统,二是因为NeXT Step的跨平台特性。Objective C是动态的编程语言所以它是基于Runtime来提供Meta Data (列如 selector, class information等等)。听起来是不是很熟耳(Java?), 可以说NeXTStep 是java出现前最出色的开发环境。至今还有很多基于NeXTStep的项目还在开发中。
90年代中期,随着互联网的兴起,windows的普及,苹果公司开始走下坡路。Apple当时已经有了一个用来对付windows 95的全新操作系统CopLand, 它因为没能及时赶上技术的需求不得不面对流产的危险。这个系统在GUI方面倒是继续领先潮流,“打印优先”的思想在这个系统被颠覆了。苹果试图用一些自己特有的技术影响整个IT业。但是市场已经向微软倾斜。
IBM与苹果合作开发了新的powerPC体系硬件,按照当时操作系统设计领域的思想,这种靠“独立体系+独立操作系统”的策略可以确保IBM与苹果立于不败之地。但是IBM的OS/2已经难以抵挡windows的入侵,苹果系统也不能适应网络的需求。
苹果的创始人之一乔布斯带着他的NeXTStep回到了苹果公司。两家公司合并后反击微软的策略很简单——立即发布一个新的GUI系统以拖延正面交锋的时间;从新开发一个GUI,以赶上网络应用的需求;GUI以多媒体为中心。这个策略很快被实施,苹果在最短时间内开发并发布了mac OS 8,利用这个系统与windows98抢夺多媒体用户。这个行动非常成功,这为苹果公司争取到了3年多的时间以开发一个全新的系统MAC OS X。
下面说说mac OS X,这也是我最喜欢的操作系统,甚至超过热爱linux。
MAC OS X构架于一个层次型的结构,底部是BSD kernel (Darwin)主要负责系统设备、 进程、 线程调度、网络和内存管理,在这之上是Quartz, OpenGL 和Quicktime负责图形和媒体处理, 而整个GUI 就构建在这个层次之上。darwin内核是mach3.0与FreeBSD、NetBSD内核以及专利的面向对象驱动层 IOKit 的结合。这个内核可以说是集合了微内核与宏内核最经典的部分,但是它应该归属于宏内核。
注意:darwin核心中,mach3.0是在最底层,上面的BSD提供了全功能。所以已经很难断定这个核心到底是属于微内核还是属于宏内核。
mac OS X的GUI提供了四种开发框架:Carbon(基于C/C++的开发环境,提供了对旧版mac os开发的兼容性。MAC OS X 中的Find就是基于carbon编写的。大多数商业软件也都是基于carbon, 可以说直到今天Carbon是OSX上用的最广泛的编程环境)、Cocoa(用Objective C编写的开发环境,它基于NextStep的开发环境。事实上很多Cocoa提供的服务能够被不同的编程语言调用,甚至是script language。Cocoa本身也使用了部分Carbon提供的功能。在某种程度上Carbon和Cocoa的关系类似于以前在windows平台上win32和MFC之间的关系)、J2SE(Mac 上也提供了标准的Java 2 标准版的所有功能,事实上苹果上的Java虚拟机的AWT/JFC部分也是基于Carbon的,这也是为什么COCOA Java和标准JAVA之间相互调用会有问题产生的根本原因)、posix(UNIX遍程的标准API,,它基于C,很多GUI 系统,如Xwindows也是基于posix)。
说到完全的GUI风格,Mac OS X应该属于后来者,真正抢眼的要算BeOS。早在1995年左右,苹果公司的一部分元老级开发人员不满于苹果的一些策略,独立成立了一个Be公司,开发了一种叫做BeOS的系统。第一个版本于1996年11月正式发布。
直到目前,很多所谓的GUI系统,包括windows在内,其实都不是完全的GUI。他们通过字符、模拟、衬线等方式来设计GUI,这种GUI都是基于字符型的。而BeOS则从内核开始完全独立开发,一个真正的GUI系统就这么出现了。BeOS的定位是powerPC体系上多位体应用平台,所以这导致这种系统很难普及。98年开始,Be公司发布了针对x86体系的BeOS,但是这仍然没有改变现状。更值得一提的是,BeOS是pc体系中最早实现64位的操作系统。
时间进入21世纪,各种新型的GUI设计思想开始出现。其中苹果公司的Mac OS X进入开发流程,另一项试图将mac系统移植到PC上的努力也开始了,opendarwin项目正式启动。而将XFree86移植到mac的项目也开始发展起来,项目叫做Xdarwin。
前面说过,mac OS X 提供四种GUI的开发框架,一般mac OS X使用的是Cocoa开发体系,也就是NeXTStep的变种。而X window是属于posix的框架,与mac OS X默认使用的不同,所以不能直接在MAC OS X上架设X。Xdarwin项目让那些试图在mac上使用开源桌面的人的梦想得以实现。而opendarwin最新的成果表明,在x86体系上可以运行超过80%的mac软件。GUI从此开始走向统一。
也不是所有的操作系统都是基于mach内核的,BSD的核心我就还没说呢。而且BSD内核也是一个非常主要的核心。
mach是非常老了,只是这个核心做的很简洁,所以很多操作系统都是直接在这个内核的基础上做些改进的。
Mach在发展中有四个主要分支:Mach、Mach2、Mach3.0、Mach4。注意这四个分支不是同一个内核的四个版本,而是不同的内核。据我的了解,苹果早期的内核是修改了mach核心,而现在的MAC OS X是修改了Mach3.0。Mach2是被NT采用。Mach4是从mach 3发展而来的,用于flux项目。
hurd最初是基于mach开发的,现在最新的版本是K8版,我还没安装过,已经下载了,暂时没刻盘,因为据说有可能不能用CD引导。等我多看些资料再说。