alantu2018

Linux内核剖析(一)Linux的历史

Unix操作系统


Unix的由来


汤普逊里奇最早是在贝尔实验室开发Unix的,此后的10年,Unix在学术机构和大型企业中得到了广泛的应用,当时的UNIX拥有者AT&T公司以低廉甚至免费的许可将Unix源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进,形成了所谓的“Unix变种”,这些变种反过来也促进了Unix的发展,其中最著名的变种之一是由加州大学柏克莱分校开发的BSD产品。

后来AT&T意识到了Unix的商业价值,不再将Unix源码授权给学术机构,并对之前的Unix及其变种声明了版权权利。变种BSD Unix在Unix的历史发展中具有相当大的影响力,被很多商业厂家采用,成为很多商用Unix的基础。BSD使用主版本加次版本的方法标识,如4.2BSD,4.3BSD,在原始版本的基础上还有派生版本,这些版本通常有自己的名字,如4.3BSD-Net/1,4.3BSD-Net/2等。其不断增大的影响力终于引起了AT&T的关注,于是开始了一场旷日持久的版权官司,这场官司一直打到AT&T将自己的Unix系统实验室卖掉,新接手的Novell公司采取了一种比较开明的做法,允许柏克莱分校*发布自己的BSD,但是前提是必须将来自于AT&T的代码完全删除,于是诞生了4.4 BSD Lite版,由于这个版本不存在法律问题,4.4BSD Lite成为了现代BSD系统的基础版本。尽管后来,非商业版的Unix系统又经过了很多演变,但其最终都是创建在BSD版本上(Linux除外)。所以从这个角度上,4.4 BSD又是所有*版本Unix的基础,它们和System V及Linux等共同构成Unix操作系统这片璀璨的星空。

BSD在发展中也逐渐派生出3个主要的分支:FreeBSD、OpenBSD和NetBSD。

此后的几十年中,Unix仍在不断变化,其版权所有者不断变更,授权者的数量也在增加。Unix的版权曾经为AT&T所有,之后Novell拥有了Unix,再之后Novell又将版权出售给了SCO,但不包括知识产权和专利权(这一事实双方尚存在争议)。有很多大公司在取得了Unix的授权之后,开发了自己的Unix产品,比如IBM的AIX、HP的HP-UX、SUN的Solaris和SGI的IRIX。

Unix因为其安全可靠,高效强大的特点在服务器领域得到了广泛的应用。直到GNU/Linux流行开始前,Unix也是科学计算、大型机、超级电脑等所用操作系统的主流。

UNIX的完整历史


初创期

Unix的诞生和Multics(Multiplexed Information and Computing System)是有一定渊源的。Multics是由麻省理工学院,AT&T贝尔实验室和通用电气合作进行的操作系统项目,被设计运行在GE-645大型主机上,但是由于整个目标过于庞大,糅合了太多的特性,Multics虽然发布了一些产品,但是性能都很低,最终以失败而告终。

AT&T最终撤出了投入Multics项目的资源,其中一位开发者──肯·汤普逊则继续为GE-645开发软件,并最终编写了一个太空旅行游戏。经过实际运行后,他发现游戏速度很慢而且耗费昂贵——每次运行会花费75美元。

在丹尼斯·里奇的帮助下,汤普逊用PDP-7的汇编语言重写了这个游戏,并使其在DEC PDP-7上运行起来。这次经历加上Multics项目的经验,促使汤普逊开始了一个DEC PDP-7上的新操作系统项目。汤普逊和里奇领导一组开发者,开发了一个新的多任务操作系统。这个系统包括命令解释器和一些实用程序,Multics是“MULTiplexed Information and Computing System”的缩写,在1970年时,那部PDP-7却只能支持两个用户,当时,Brian Kernighan就开玩笑地戏称他们的系统其实是:“UNiplexed Information and Computing System”,缩写为“UNICS”。于是这个项目被称为UnICS( Uniplexed Information and Computing System)。后来,大家取其谐音这个名字被改为UNIX。

发展期

最初的Unix是用汇编语言编写的,一些应用是由叫做B语言的解释型语言和汇编语言混合编写的。B语言在进行系统编程时不够强大,所以汤普逊和里奇对其进行了改造,并与1971年共同发明了C语言。1973年汤普逊和里奇用C语言重写了Unix。在当时,为了实现最高效率,系统程序都是由汇编语言编写,所以汤普逊和里奇此举是极具大胆创新和革命意义的。用C语言编写的Unix代码简洁紧凑、易移植、易读、易修改,为此后Unix的发展奠定了坚实基础。

1974年,汤普逊和里奇合作在ACM通信上发表了一篇关于UNIX的文章,这是UNIX第一次出现在贝尔实验室以外。此后UNIX被*机关,研究机构,企业和大学注意到,并逐渐流行开来。

1975年,UNIX发布了4、5、6三个版本。1978年,已经有大约600台计算机在运行UNIX。1979年,版本7发布,这是最后一个广泛发布的研究型UNIX版本。20世纪80年代相继发布的8、9、10版本只授权给了少数大学。此后这个方向上的研究导致了九号计划的出现,这是一个新的分布式操作系统。

1982年,AT&T基于版本7开发了UNIX System Ⅲ的第一个版本,这是一个商业版本仅供出售。为了解决混乱的UNIX版本情况,AT&T综合了其他大学和公司开发的各种UNIX,开发了UNIX System V Release 1。

这个新的UNIX商业发布版本不再包含源代码,所以加州大学柏克莱分校继续开发BSD UNIX,作为UNIX System III和V的替代选择。BSD对UNIX最重要的贡献之一是TCP/IP。BSD有8个主要的发行版中包含了TCP/IP:4.1c、4.2、4.3、4.3-Tahoe、4.3-Reno、Net2、4.4以及4.4-lite。这些发布版中的TCP/IP代码几乎是现在所有系统中TCP/IP实现的前辈,包括AT&T System V UNIX和Microsoft Windows。

其他一些公司也开始为其自己的小型机或工作站提供商业版本的UNIX系统,有些选择System V作为基础版本,有些则选择了BSD。BSD的一名主要开发者,比尔·乔伊,在BSD基础上开发了SunOS,并最终创办了太阳计算机系统公司。

1991年,一群BSD开发者(Donn Seeley、Mike Karels、Bill Jolitz和Trent Hein)离开了加州大学,创办了Berkeley Software Design, Inc (BSDI)。BSDI是第一家在便宜常见的Intel平台上提供全功能商业BSD UNIX的厂商。后来Bill Jolitz离开了BSDI,开始了386BSD的工作。386BSD被认为是FreeBSD、OpenBSD和NetBSD、DragonFlyBSD的先辈。

AT&T继续为UNIX System V增加了文件锁定,系统管理,作业控制,流和远程文件系统。1987到1989年,AT&T决定将Xenix(微软开发的一个x86-pc上的UNIX版本),BSD,SunOS和System V融合为System V Release 4(SVR4)。这个新发布版将多种特性融为一体,结束了混乱的竞争局面。

1993年以后,大多数商业UNIX发行商都基于SVR4开发自己的UNIX变体了。

现况

UNIX System V Release 4发布后不久,AT&T就将其所有UNIX权利出售给了Novell。Novell期望以此来对抗微软的Windows NT,但其核心市场受到了严重伤害,最终Novell将SVR4的权利出售给了X/OPEN Consortium,后者是定义UNIX标准的产业团体。最后X/OPEN和OSF/1合并,创建了Open Group。Open Group定义的多个标准定义着什么是以及什么不是UNIX。

实际的UNIX代码则辗转到了Santa Cruz Operation,这家公司后来出售给了Caldera Systems。Caldera原来也出售Linux系统,交易完成后,新公司又被重命名为SCO Group。

部门的解散

根据一项报道指出,当年负责研发UNIX与后续维护工作的贝尔实验室1127部门已于2005年8月正式声明解散。肯·汤普逊已退休,现居加州;丹尼斯·里奇调到别的部门;而Douglas McIlroy则在达特茅斯学院担任教授。

Unix的文化

UNIX is not just an operating system, but a way of life.(UNIX不仅仅是一个操作系统,更是一种生活方式。) 经过几十年的发展,UNIX在技术上日臻成熟的过程中,她独特的设计哲学和美学也深深地吸引了一大批技术人员,他们在维护、开发、使用UNIX的同时,UNIX也影响了他们的思考方式和看待世界的角度。这些人自然而然地形成了一个社团。

UNIX重要的设计原则:

简洁至上

提供机制而非策略
  • 1
  • 2
  • 3

理查德·斯托曼和他的*软件计划(GNU)


在1983年,理查德·斯托曼创建了以创建一个*软件,类Unix,与POSIX兼容的操作系统为目标的GNU计划。作为这个计划其中的一部分,他又写了GNU通用公共许可证(GPL)。20世纪90年代初,已经有足够的软件去创建一个完整的操作系统。但因为在1987年时,理查德·斯托曼决定以Mach微内核进行开发,认为可以借此加速操作系统的开发,但因为一直不确定卡内基梅隆大学何时要将核心源代码发布,造成项目三年进展缓慢。GNU的内核,GNU Mach和GNU Hurd没能够充分吸引开发者,这导致了GNU的未能完成。

在20世纪80年代还有另外一个关于*操作系统的项目,伯克利软件套件。这是由UC Berkeley从AT&T的第六版Unix开发而来的。因为它包含了AT&T所拥有的的Unix代码,所以AT&T在20世纪90年代初对加利福尼亚大学提起了法律诉讼。这严重限制了BSD的发展与应用。

MINIX是安德鲁·斯图尔特·塔能鲍姆在1987年发布一个用于教学的微内核架构的类Unix系统。虽然系统的源代码容易得到,但是对源代码的修改与再发布却受到了限制。另外,MINIX的16位的设计与当时日渐便宜及受欢迎的、个人电脑的Intel 80386架构兼容得不好。

这些因素使得Torvalds开始了他的项目。他曾说过,如果那时候有可用的GNU或者386BSD内核的话,他很可能就不会去写他自己的内核了

Linux操作系统


Linux的诞生


1991年,在赫尔辛基,Linus Torvalds开始那个后面成为了Linux内核的项目。最初它只一个Torvalds用来访问大学里的大型的Unix服务器的虚拟终端。他专门写了一个用于他当时正在用的硬件的,与操作系统无关的程序,因为他要用他那用80386处理器的新PC机的功能。开发是在Minix上,用至今仍为首选的编译器——GCC——来完成的。
Linus Torvalds

Torvalds在他的书只为欢乐中说过,他最后才意识到自己写了一个操作系统内核。1991年8月25日,他在发布到新闻组“comp.os.minix.”的Usenet上发布了这个系统:

“   使用minix操作系统的各位,大家好!
我正在为386(486)AT clones写一个(*的)操作系统(只是爱好而已,不会和GNU一样成为广泛且专业的操作系统)。这个计划从4月份开始酝酿,现在已做好准备。我希望得到人们关于minix优缺点的任何反馈意见,因为我的操作系统和它有类似的方面(因为可行性方面的原因,两者的文件系统物理布局相同)。 我刚刚把bash(1.08)和gcc(1.40)移植到了系统上,而且看来运行得很好。这意味着我可以在几个月内我就可以把它变得有实用性了。我想知道大家想要些什么特色。欢迎提任何的建议,但是我不保证我会实现你的建议:-)

Linus (torvalds@kruuna.helsinki.fi)

另:是的,它没有包含任何minix的代码;它的文件系统还是一个多线程的。它没有可移植性(它利用了386的任务调度算法等),而且它很可能永远只会支持AT的硬盘(我只有这种硬盘:-( )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

名称的由来


Linus Torvalds本要把他的发时叫做Freax——“fread”,“free”和“x”(暗指Unix)的合成词。在开发系统的前半年里,他把文件以文件名“Freax”存储。Torvalds考虑过Linux这个名字,但是因为觉得它过于自我本位而放弃了使用它[6]。

为便于开发,在1991年9月,他把那些文件上传到了赫尔辛基工业大学(HUT)的FTP服务器(ftp.funet.fi)。Torvalds在HUT负责管理那个服务器的同事Ari Lemmke,觉得“Freax”这个名字不是很好,就在不咨询Torvalds的情况下,把项目的名字改成了“Linux”。但是之后,Torvalds也同意“Linux”这个名字了:“经过多次讨论,他承认Linux这个名字更好。在0.01版本Linux的源代码的makefile里仍然使用‘Freax’这个名字,在之后‘Linux’这个名字才被使用。所以,Linux这个名字并不是预先想好的,只是它被广泛接受了而已”。

关于GNU/Linux命名方式的争议


“Linux”这个名称一开始只被Torvalds用于Linux内核。但是这个内核却常和其他软件一起使用,尤其是GNU计划的软件。这很快就成为最受欢迎的GNU软件。1994年六月,在GNU的期刊中,Linux被称作“*Unix克隆版”,Debian计划也开始把它的产品叫做“Debian GNU/Linux”。1996年5月,Richard Stallman发布了编辑器Emacs的19.31版本,其中系统的名称从Linux变成了Lignux。这种拼法为的是明确指出GNU和Linux的结合。但是这不久就被“GNU/Linux”所代替了。

对这个名称,不同人有不同的反应。GNU和Debian项目使用那个名字,但是,多数开发者仍然简单地用“Linux”来指代它们的结合。

官方吉祥物


Tux
Tux
1996年,Torvalds为Linux选定了企鹅作为它的吉祥物。Larry Ewing提供了吉祥物的初稿。现在正在使用的著名的吉祥物就是基于这份初稿的。James Hughes根据“Torvalds’s Unix”为它取了名字Tux。

新的发展


内核

除了Torvalds,还有许多知名的如阿兰考克斯Alan Cox和马塞洛托萨蒂Marcelo TosattiLinux内核维护者。 Cox维护2.2版的内核直到2003年底,同样, Tosatti维护2.4版的内核直到2006年年中,程序员Andrew Morton 带动了于2003年12月18日发布的首个稳定版本-2.6版内核的开发和维护。而旧版本也还在持续地改进中。

Linux在多方面成功应用,其主要原因在于它是*软件和它的软件的稳定性、安全性和可扩展性,以及因此而带有的可维护性。虽然确实存在着漏洞,例如vmsplice() exploit,但是这些漏洞会很快被修复[来源请求]。

社区

关于Linux的大部分工作都是由社区完成的:世界各地使用Linux的程序员都把建议的改进发给维护员。很多公司还不但参与内核的开发,还参与了一些随Linux一起发布的辅助软件的编写。

Linux的版本当中,既有像Debian那样由自发组织发布的,又有像openSUSE和Fedora那样直接和一些公司相关的。为了交换意见,各个项目的成员常在各种会议交流会上会面。其中最大的交流会是在德国(目前是柏林)举行的LinuxTag。每年有大约10,000人聚集在一起讨论Linux以及与Linux相关的项目。

开源发展实验室和Linux基金会

开源码发展实验室(Open Source Development Lab)创立于2000年。它是一个独立的非营利性组织。它的目标是优化Linux以应用于数据中心和运营商的领域。它是Linus Torvalds和Andrew Morton工作的赞助来源。2006年年中,Morton去了Google(Google也是使用Linux内核的);Torvalds全职为OSDL开发Linux内核。非商业性运营机制的资金主要来源于Red Hat,Novell,三菱,英特尔, IBM ,戴尔和惠普等几家大公司。

2007年1月22日,OSDL和*标准组织合并为Linux基金会,把它们的工作焦点集中在改进GNU/Linux以与Windows竞争。

相关公司

虽然是开源项目,但是还是有一些公司从中获取了利益。这些公司大多也是开源发展实验室的成员。它们在Linux的改进与开发中投入了许多资源以使其能够适应不同领域的应用。其中包括驱动程序捐赠的硬件,对开发Linux软件的人员现金的捐赠,以及对Linux程序员的雇用。例如IBM和HP,它们首先在它们的服务器上使用了Linux;又如Red Hat,它维护着它自已的版本。同样,Trolltech通过对Qt的开发和把它GPL许可化,以及启用一些X和KDE开发人员来支持Linux。前者更使得开发KDE成为了可能。

关于Linux的争论

Linux自出现以来就已经引起了反复的争议。

“Linux已经过时”

塔能鲍姆-托瓦兹辩论
1992年,著名的计算机科学家,Minix和微核心的作者,安德鲁·斯图尔特·塔能鲍姆在新闻组comp.os.minix上写了一篇题为《Linux已经过时》的文章。这篇文章标志着对Linux内核的著名的大讨论的开始。其中对Linux的批评主要是:

该内核是宏内核的,因此它是过时的;
因使用Intel 386处理器而带来的不可移植性。“写一个与某特定硬件,特别是像Intel这种奇怪的硬件相关的操作系统,在根本上就是错误的。”;
没有个人严格控制源代码;
Linux使用了一系列无用的特色(他认为多线程的文件系统只会使用系统性能低下)。
事实证明,塔能鲍姆认为Linux会在几年之内就会过时并被GNU Hurd取替(他认为GNU Hurd更为现代化)的看法是错误的。Linux已经被移植到所有主流的平台,而且它开放的开发模式引领了一种杰出的开发步伐。相反,GNU Hurd还没有拥有可作为产品服务器的稳定性水平]。
  • 1
  • 2
  • 3
  • 4
  • 5

反对开源文件的出版物

来自微软的竞争
虽然Torvalds说过微软感到的来自Linux的威胁与他无关,但是微软和Linux阵营在1997年到2001年间还是有着很多敌对的情况。这种情况在1998年Eric S. Raymond发表《万圣节文件》的时候变得明显起来。这里由一位微软工程师写的关于寻求解决*软件对微软的威胁的策略的文章。

SCO-Linux争议

2003年3月,SCO Group指责IBM把UNIX的代码移植到Linux侵犯了他们的版权。SCO声称它们拥有代码的版权并IBM提起了诉讼。Red Hat又提起了反诉讼,因此SCO又提起了其他相关的诉讼。在这些诉讼进行的同时,SCO开始把Linux的许可权卖给那些不愿意冒受SCO投诉的险的用户。因为Novell也声称拥有UNIX的版权,所以它又对SCO提起了诉讼。接着SCO便声明破产了。

名称的商标

Linux是Linus Torvalds的注册商标。

商标权
在1994和1995年,有多个来自不同国家的人想把Linux注册为商标,从而一些Linux公司可以从中收取特许使用金。很多Linux的开发人员和用户都不同意此举。Torvalds在Linux国际的帮助下得到了Linux这个商标,然后他把这个商标转让给了Linux国际。对这个商标的保护后来就由一个专门的基金会——非营利性的Linux标识协会——来管理。2000年,Linus Torvalds指定了分配许可权的基本规则。这意味着任何要想以Linux的名义发布产品和服务的人,都要拥有许可证。而许可证要通过购买获得。

大事年表

1983:Richard Stallman创建了以创建一个*的操作系统为目标的GNU计划。
1989:Richard Stallman撰写了第一版的GNU GPL。
1991:Linux内核在8月25日由21岁的芬兰学生Linus Benedict Torvalds公开发布。
1992:在GNU GPL下Linux内核被重新授权使用,产生了第一个“Linux发行版本”。
1993:超过100个开发者致力于Linux内核开发。在他们的努力下,内核逐渐适应了GNU的环境,这个为Linux创造了巨大的应用空间的广阔环境。Slackware首次发布。后来在同一年,Debian项目设立,现已成为最大的社区发布项目。
1994: 3月, Torvalds认为内核的所有组件已经完全成熟,他放出了Linux的1.0版本。XFree86项目组提供了一个图形化用户界面(GUI).同年Red Hat公司 和SUSE 发行了他们各自的Linux 1.0分发版本。
1995: Linux被移植到DEC Alpha和Sun公司的SPARC平台上,而在接下来的几年里它又被广泛地移植到更多的平台上。
1996: Linux内核2.0版本发布。此时内核已经支持多处理器,因而成为各大公司的绝佳选择。
1998:很多大公司,诸如IBM, Compaq ,Oracle表示支持Linux系统。另外,一部分程序员开始了图形化用户界面KDE的开发。
1999:一些程序员开始致力于开发图形化环境GNOME,它可以替代依靠Qt工具包才能工作的KDE。在这一年里IBM宣布了一项支持Linux的浩大的工程。
2004: XFree86小组分裂,同现有的X Windows标准组织 共同成立X.Org基金会,促使了X Window ServerLinux版本极其快速而迅猛的发展。

年鉴


20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机;主机负责运算,而终端负责输入输出;

1965年,Bell实验室、MIT、GE(通用电气公司)准备开发Multics系统,为了同时支持300个终端访问主机,但是1969年失败了;
刚开始并没有鼠标、键盘,输入设备只有卡片机,因此如果要测试某个程序,则需要将读卡纸插入卡片机,如果有错误,还需要重新来过;
Multics:Multiplexed Information and Computing Service

1969年,Ken Thompson(C语言之父)利用汇编语言开发了FIle Server System(Unics,即Unix的原型)
因为汇编语言对于硬件的依赖性,因此只能针对特定硬件;
只是为了移植一款“太空旅游”的游戏;

1973年,Dennis Ritchie和Ken Thompson发明了C语言,而后写出了Unix的内核
将B语言改成C语言,由此产生了C语言之父;
90%的代码是C语言写的,10%的代码用汇编写的,因此移植时只要修改那10%的代码即可;

1977年,Berkeley大学的Bill Joy针对他的机器修改Unix源码,称为BSD(Berkeley Software Distribution)
Bill Joy是Sun公司的创始人;
1979年,Unix发布System V,用于个人计算机;
1984年,因为Unix规定:“不能对学生提供源码”,Tanenbaum老师自己编写兼容于Unix的Minix,用于教学;
1984年,Stallman开始GNU(GNU’s Not Unix)项目,创办FSF(Free Software Foundation)基金会;
产品:GCC、Emacs、Bash Shell、GLIBC;
倡导“*软件”;
GNU的软件缺乏一个开放的平台运行,只能在Unix上运行;
*软件指用户可以对软件做任何修改,甚至再发行,但是始终要挂着GPL的版权;
*软件是可以卖的,但是不能只卖软件,而是卖服务、手册等;
1985年,为了避免GNU开发的*软件被其他人用作专利软件,因此创建GPL(General Public License)版权声明;
1988年,MIT为了开发GUI,成立了XFree86的组织;
1991年,芬兰赫尔辛基大学的研究生Linus Torvalds基于gcc、bash开发了针对386机器的Lniux内核;
1994年,Torvalds发布Linux-v1.0;
1996年,Torvalds发布Linux-v2.0,确定了Linux的吉祥物:企鹅;

Unix/Linux发展图解


linux
Unix/Linux发展图解
更详细

分类:

技术点:

相关文章: