说明:
往前对Linux的历史模模糊糊,一知半解的,于是决定要根据自己的理解把Linux的发展史稍微总结一下,这样总结下来,感觉Linux的发展是一条非常完美的线,而自己对于Linux的理解又加深了很多,个人觉得这样对学好Linux是非常有帮助的,同时也希望可以帮助网友在对Linux发展史的理解上能有一个较为清晰简洁的概念和思路。
一、Linux发展简史
1.1969年以前:Bell,MIT与GE的“Mutics”系统
Bell:贝尔实验室,隶属于AT&T公司
MIT:麻省理工学院
GE:通用电气公司
Mutics:有“多数”的意思,意在让多人同时使用一台主机的资源(多用户)
·60年代初,MIT开发出分时操作系统,最多同时提供30台终端机(技术上的限制)连接一台大型主机,以让更多用户可以同时使用同一台昂贵主机的资源;
·1965年,Bell、MIT与GE共同发起Mutics项目,目的是想让大型主机可以同时提供300台以上终端机来连接大型主机;
·1969年前后,Mutics项目资金缺乏,虽然项目仍然进行,不过Bell最终退出了该项目;
·Mutics项目最终还是成功的,只是没有受到太大的重视(需求问题)。
2.1969年:Ken Thompson的小型File Server System
Thompson:贝尔实验室的成员,当时参与了Mutics项目开发
·Mutics项目培养了优秀的人才,Thompson便是其中一员;
·Thompson从Mutics项目中获得了不少的想法;
·为了移植“太空旅游”游戏,Thompson将Mutics项目中庞大复杂的系统进行简化,在PDP-7主机上以汇编语言写出了一组内核程序、内核工具程序以及一个小的文件系统,被称为Unics(UNIX的原型);
·Thompson开发的文件系统概念:
a.所有的程序或系统装置都是文件
b.不管构建编辑器还是附属文件,所写的程序只有一个目的,就是要有效地完成目标
3.1973年:UNIX正式诞生,Ritchie等人以C语言写出第一个正式UNIX内核
汇编语言:具有专一性,与硬件相关,Unics即用汇编语言所开发
B语言:高级语言,但所编译出来的内核性能不是很好
C语言:高级语言,由Dennis Ritchie将B语言重新改写而成
·Thompson开发的Unics实用性强,在Bell内部广为流传;
·当时计算机机器架构(硬件架构)都不太相同,给Unics移植带来一定的复杂性;
·Ritchie将B语言改写成C语言,并与Thompson合作,用C语言来重新改写与编译Unics的内核;
·发行出UNIX的正式版本;
·由于高级语言的特性,UNIX很容易被移植到不同的机器上(硬件架构不同的主机)。
4.1977年:重要的UNIX分支——BSD诞生
可移植性:UNIX用高级语言开发,理论具有可移植性,即只要取得UNIX的源码,针对不同主机特性加以修改,即可以移植到不同的主机上
Berkeley:加州柏克莱分校
Bill Joy:Sun公司创始人
Berkeley Softsare Distribution:即BSD
FreeBSD:由BSD改版而来,可以安装在x86硬件架构上
·由于UNIX的可移植特性,1973年后,Bell得以与学术界合作开发UNIX(学术界进行学术研究,往往需要使用计算机,而当时缺乏的是一个好的操作系统);
·Bell与Berkeley进行了重要的接触;
·Berkeley的Bill Joy取得UNIX的内核源码后,修改成适合自己机器的版本,增加很多工具软件与编译程序,并将其命名为Berkeley Softsare Distribution,即BSD;
·Bell Joy创建办Sun公司,以其修改的内核(BSD)来进行自己的商业UNIX版本的开发。
5.1979年:重要的System V架构与版权声明
协议:这里指硬件架构的通用生产协议,当时计算机硬件公司没有该概念,因此所生产的硬件需要合适的UNIX系统
x86:早期的个人计算机架构,该架构下的CPU没有多任务的作业能力
纯种的UNIX:指BSD以及System V
·UNIX高可移植性、强大性能、无版权纠纷,商业公司开发UNIX操作系统,推出自家的主机搭配“自家”的UNIX操作系统;
·这些公司开发的硬件没有遵循统一的协议(当时没有),开发的UNIX操作系统及相关软件只能在自家硬件架构的主机上运行;
·这些公司有:AT&T、IBM、HP、DEC、Sun、Cray等;
·UNIX强调多用户、多任务,由于x86的特性,没有人愿意移植UNIX到x86架构主机上;
·AT&T推出的System V第七版UNIX,支持x86架构的个人计算机;
·AT&T出于商业考虑,发行其第七版UNIX时,提出“不可对学生提供源码”,即要将UNIX版权收回。
6.1984年之一:x86架构的Minix操作系统诞生
Minix:迷你的UNIX操作系统
·System V每七版的版权声明,影响了教导UNIX内核源码学问的谭宁邦教授;
·为了教学的方便,谭宁邦教授与UNIX兼容的迷你UNIX操作系统Minix;
·Minix只能通过磁盘/磁带购买,但是提供Minix源码;
·谭宁邦教授没有继续开发Minix,只是点到为止。
7.1984年之二:GNU项目与FSF基金会成立
Richard Mathew Stallman:史托曼,GNU项目发起人,起草GPL
GNU项目:创建一个自由、开放的UNIX操作系统(Free UNIX)
GPL:,General Public License,GNU的通用公共许可证,避免GNU自由软件被商业利用而发起
AI Lab.:***圈中出名的人工智能实验室,1971年史托曼进入该实验室
Lisp:MIT开发的操作系统,属于专利软件,史托曼早期在Lab中即使用其来开发软件
Free Software Foundation:即FSF,自由软件基金会
--自由分享的环境
·史托曼早年进入AI Lab.中,强调“分享”,对于软件没有专利的困扰;
·AI Lab.的管理层问题,导致优秀***离开并加入商业公司开发软件;
·史托曼坚持分享、自由而留下来,但意识到需要成立一个开放的团体来共同努力。
--使用UNIX开发阶段
·实验室硬件的更换,使得史托曼放弃了Lisp,并得以接触UNIX;
·UNIX在那时虽然也是专利软件,但相比Lisp,其在架构上还是比较开放的;
·史托曼将在Lisp上写的软件移植到UNIX上,并公布源码。
--GNU项目的推展
·1984年史托曼开始GNU项目,旨在创建一个自由、开放的UNIX操作系统;
·由于当时只用史托曼一个人,并且创建操作系统并不容易,困难重重;
·史托曼采取“先开发UNIX操作系统上的软件”的策略,这些软件称为GNU软件;
·开发出Emacs:程序编辑器(非编译器),进行程序语法的检查;
·为了开发出UNIX下的编译程序(非常重要),史托曼利用Emacs出售赚来的钱,成立FSF;
·FSF请更多工程师和志愿者来编写软件;
·进而开发的重要软件:Gcc,C语言的编译程序
8.1985年:GNU的通用公共许可证——GPL
·起草GPL,是为了避免GNU自由软件被他人利用而成为专利软件
·GNU项目的重要自由软件:
Emacs
GNU C(GCC)
GNU C Library(GLIBC)
Bash shell
·这些软件使得软件开发者可以更好地进行软件开发工作,从而壮大了自由软件团体;
·这些软件仍然是在那些授权的UNIX平台上工作,当时并没有“自由的UNIX内核”存在,直到Linux出现。
9.1988年:图形接口XFree86项目
XFree86:,开发用户图形接口的非营利性组织,即X Window System + Free + x86的简称
·用户图形接口需求日益加重;
·MIT在1984年已与第三方合作开发出X Window System;
·MIT在1988年成立非营利性组织XFree86。
10.1991年:荷兰大学生Linus Torvalds的一则消息
·1991年,Torvalds在BBS上发布消息,称以bash,gcc等工具写了一个小小的内核程序,并可以在Intel的386机器上面运行。
二、GNU项目
1.自由软件(Free Software)活动
·将源码连同软件程序一起公布的举动,就是自由软件活动。
2.自由软件的版权:GNU GPL
·GNU=GNU's Not UNIX;
·GNU与FSF开发出来的软件都挂上GPL的版权声明,FSF内核观念是:版权制度是促进社会进步的手段,版权本身不是自然权力。
3.自由软件“自由(Free)”的真谛
·史托曼对GPL一直是强调Free的;
·Free的解释:
-英文解释:
"Free software" is a matter of liberty, not price. To understand the concept, you should think of "free speech", not "free beer". "Free software" refers to the users' freedom to run, copye, distribute, study, change, and improve the software.
-中文大意:
自由软件是和种自由的权力,并非是“价格”。例如,你拥有自由呼吸和言论自由的权力,但这不意味着你可以到处喝免费的啤酒(也就是说,自由软件的重点并不是指“免费”的),而是指具有“自由度”的软件)。自由软件意味着用户可以自由执行、复制、再发行、学习、修改和改善自由软件。
·一个软件挂上GPL版权声明后,就成了自由软件,可以获得其源码,然后进行如下的操作:
a.取得软件与源码
b.复制
c.修改
d.再发行
e.改善
·但不能把修改后的自由软件作如下要求:
a.修改授权:不能将GPL授权的软件在经过自己修改后取消GPL授权
b.单纯销售
4.自由软件与商业行为
服务:软件、源码、软件相关手册说明文件、软件咨询服务、技术支持服务等;
·自由软件可以进行销售,但需要连同售后服务一起提供,其实销售的就是服务;
·一些Linux开发商自己开发的软件工具则不一定是自由软件,主要看有无GPL授权。
三、Tlrvalds(托瓦兹)的Linux开发
1.接触Minix
Minix:前面已经提到过,类似UNIX,并与UNIX兼容,可以在Intel 386的个人计算机上运行
·Tlrvalds从小就有汇编语言的学习基础
·因使用UNIX的不便,转而使用Minix;
·Tlrvalds购买Intel 386计算机,安装了Minix;
·从Minix提供的源码中,Tlrvalds学习到了很多内核程序的设计概念。
2.对386硬件的多任务测试
多任务:同时运行多个程序(CPU工作的切换)
·早期Intel 86架构计算机不受重视,因为对多任务支持不佳;
·Intel 386计算机在此性能上有提高;
·Tlrvalds贷款购买386计算机,并对硬件做多任务测试。(先测试,再安装Minix)
3.初次释出Linux 0.02
POSIX:可携式操作系统接口,在于规范内核与应用程序之间的接口,该标准主要是针对UNIX与一些软件运行时候的标准
·测试386硬件并安装Minix后,Tlrvalds决定自己写一个内核程序;
·使用GNU的bash与Gcc,Tlrvalds开发出能够在386计算机上运行的内核程序;
·发布消息,公布内核源码在FTP的Linux目录下,于是该内核程序被称为Linux,此时版本为0.02.
·为了兼容UNIX,让更多软件能在Linux上运行,Tlrvalds参考标准的POSIX规范,修改Linux;
·于是Linux就有了许多与UNIX相像的特性,这也是它们的区别与联系。
4.Linux的开发:虚拟团队产生
--单一个人维护阶段
·网友下载Linux内核后有问题或有需求,向Tlrvalds提出;
·Tlrvalds解决后,在FTP发布最新的Linux内核,并告知版本号。
--广大志愿者加入阶段
·有些硬件无法取得,托瓦兹不可能解决所有的问题;
·拥有相关硬件的志愿者,写出相关驱动程序与软件,并交由Tlrvalds;
·Tlrvalds将其带入内核经测试可行后,即将志愿者的代码加入其内核中;
·后来将上述随时都可能加入到内核的程序代码,先做成模块,也即让Linux具有模块的功能;
·模块后就无需“每次要实现对某硬件的支持都要将其写入内核中”。
--内核功能细部分分工开发阶段
·素未谋面的网友帮助Tlrvalds进行内核程序的测试,由Tlrvalds作最后内核加入的源码的选择与整并;
·这些来自五湖四海的人们便组成了虚拟团队;
·为了方便团队的数据传输,Linux成立了内核网站:www.kernel.org
·1994年,完成内核正式版1.0,并加入了X Window System的支持;
·1995年,完成2.0版本,Tlrvalds并指定企鹅为Linux的吉祥物。
5.Linux的内核版本
2.6.32-431.e16
·各组数字说明:
major 2 |
minor 6 |
patch 32 |
build 431 |
desc e16 |
表示主版本号,有结构性变化时才变更 | 表示次版本号,新增功能时才发生变化;一般奇数表示测试版,偶数 表示生产版。 |
表示对次版本的修订次数或补丁包数 | 表示编译(或构建)的次数,每次编译可能对少量程序做优化或修改,但一般没有大的(可控的)功能变化 | 用来描述当前的版本特殊信息;其信息由编译时指定,具有较大的随意性,但也有一些描述标识是常用的 |
6.Linux distributions(Linux系统发行版本)
·Linux只是一个可操纵硬件的内核及其相关的内核工具
·一些商业公司或非营利团体考虑到普通用户的实际需求,制定发布Linux发布商套件(Linux distributions):
·Linux是GPL授权的,因此Linux distribution也可以从网上下载和使用;
·商业公司是将Linux distribution和其提供的服务一起售卖的。
·目前Linux distribution的开发团体很多,但是这些团体在以下这些方面都是一致的:
a.Linux内核版本
b.FHS:目录结构树的规范标准
c.LSB:增强Linux发行版兼容性的规范,可参考:http://www.ibm.com/developerworks/cn/linux/l-lsb-intr/
d.Linux下的主流软件
·在以下这些方面可能是不一致的:
a.开发商自家开发的管理工具(含自由软件与商业软件)
b.套件管理的模式(RPM与dpkg)