1、Linux是什么

电脑主机是由一堆硬体所组成的,为了有效率的控制这些硬体资源,于是乎就有作业系统的产生了。
作业系统角色.gif

2、Unix的历史

早在Linux出现之前的二十年(大约在1970 年代),就有一个相当稳定而成熟的作业系统存在了!那就是Linux的老大哥『Unix』是也!(Linux的核心是由Linus Torvalds在1991年的时候开发出来的)。

1969年以前:一个伟大的梦想—Bell,MIT与GE的『Multics』系统

  1. ![早期主机与终端机的相关性.jpg](https://cdn.nlark.com/yuque/0/2021/jpeg/1545523/1617854779498-e601fd72-196b-445e-a8cf-349743ab2c33.jpeg#height=228&id=JvbpW&margin=%5Bobject%20Object%5D&name=%E6%97%A9%E6%9C%9F%E4%B8%BB%E6%9C%BA%E4%B8%8E%E7%BB%88%E7%AB%AF%E6%9C%BA%E7%9A%84%E7%9B%B8%E5%85%B3%E6%80%A7.jpg&originHeight=228&originWidth=400&originalType=binary&size=18363&status=done&style=none&width=400)

相容分时系统(Compatible Time-Sharing System, CTSS)
它可以让大型主机透过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。

在1965年前后,由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE,或称为通用电器)共同发起了Multics的计画(Multics有复杂、多数的意思存在), Multics计画的目的是想要让大型主机可以达成提供300个以上的终端机连线使用的目标。

1969年:Ken Thompson的小型file server system

在认为Multics计画不可能成功之后,贝尔研究室就退出该计划。

Thompson因为自己的需要,希望开发一个小小的作业系统以提供自己的需求。经过四个星期的奋斗,他终于以组合语言(Assembler)写出了一组核心程式,同时包括一些核心工具程式,以及一个小小的档案系统。那个系统就是Unix的原型!当时Thompson将Multics庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。(当时尚未有Unix的名称)
Ken Thompson:C语言之父和Unix之父.png
Ken Thompson:C语言之父和Unix之父

1973年:Unix的正式诞生,Ritchie等人以C语言写出第一个正式Unix核心

由于Thompson写的那个作业系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。(贝尔实验室是隶属于美国电信大厂AT&T公司)

后来Thompson与Ritchie合作想将Unics改以高阶程式语言来撰写。当时现成的高阶程式语言有B语言。但是由B语言所编译出来的核心效能不是很好。后来Dennis Ritchie (注3 )将B语言重新改写成C语言,再以C语言重新改写与编译Unics的核心,最后正名与发行出Unix的正式版本!

Dennis Ritchie:C语言之父和Unix之父.png
Dennis Ritchie:C语言之父和Unix之父

1977年:重要的Unix分支—BSD的诞生

虽然贝尔属于AT&T,但是AT&T此时对于Unix是采取较开放的态度。Unix是以高阶的C语言写成的, 理论上是具有可移植性的!亦即只要取得Unix的原始码,并且针对大型主机的特性加以修订原有的原始码(Source Code), 就可能将Unix移植到另一部不同的主机上头了。

柏克莱大学的Bill Joy (注4 )在取得了Unix的核心原始码后,着手修改成适合自己机器的版本,并且同时增加了很多工具软体与编译程式,最终将它命名为Berkeley Software Distribution ( BSD)。这个BSD是Unix很重要的一个分支,Bill Joy也是Unix业者『Sun(升阳)』这家公司的创办者!Sun公司即是以BSD发展的核心进行自己的商业Unix版本的发展的。(后来可以安装在x86硬体架构上面FreeBSD即是BSD改版而来!)

Bill Joy:BSD开发者.png
Bill Joy:BSD开发者

1979年:重要的System V 架构与版权宣告

AT&T由于商业的考量,以及在当时现实环境下的思考,于是想将Unix的版权收回去。

1984年之一:x86架构的Minix作业系统开始撰写并于两年后诞生

关于1979年的版权声明中,影响最大的当然就是学校教Unix核心原始码相关学问的教授了!

谭宁邦教授于是乎自己动手写了Minix这个Unix Like的核心程式!在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看Unix核心原始码!并且强调他的Minix必须能够与Unix相容才行!
Tanenbaum:Minix开发者.png
Tanenbaum:Minix开发者

1984年之二:GNU计画与FSF基金会的成立

Richard Mathew Stallman(史托曼)在1984年发起的GNU计划,对于现今的自由软体风潮, 真有不可磨灭的地位!
Stallman:著名黑客,GNU创始人,开发了Emacs、gcc、bash shell.png

1984年,史托曼开始GNU计画, 这个计划的目的是:建立一个自由、开放的Unix作业系统(Free Unix)。

其实GNU是GNU’s Not Unix的缩写,意思是说,GNU并不是Unix啊!

C语言的编译器,那就是现在相当有名的GNU C Compiler(gcc)

Emacs编辑器;

成立自由软体基金会(FSF, Free Software Foundation);

他还撰写了更多可以被呼叫的C函式库(GNU C library),以及可以被使用来操作作业系统的基本介面BASH shell!这些都在1990年左右完成了!

到了1985年,为了避免GNU所开发的自由软体被其他人所利用而成为专利软体,所以他与律师草拟了有名的通用公共许可证(General Public License, GPL),并且称呼他为copyleft (相对于专利软体的copyright!

1988年:图形介面XFree86计划

X Window System + Free + x86

1991年:芬兰大学生Linus Torvalds的一则简讯

芬兰的赫尔辛基大学的Linus Torvalds在BBS上面贴了一则消息, 宣称他以bash, gcc等GNU 的工具写了一个小小的核心程式,该核心程式单纯是个玩具,不像GNU 那么专业。不过该核心程式可以在Intel的386机器上面运作就是了。这让很多人很感兴趣!从此开始了Linux不平凡的路程!
Linus Torvalds:Linux之父,芬兰赫尔辛基大学.png

很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的,这么多人在世界各地为Linux编写代码,那Linux的代码是如何管理的呢?

事实是,在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!

你也许会想,为什么Linus不把Linux代码放到版本控制系统里呢?不是有CVS、SVN这些免费的版本控制系统吗?因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。有一些商用的版本控制系统,虽然比CVS、SVN好用,但那是付费的,和Linux的开源精神不符。

不过,到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。

安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。

Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。