不少人都用了不少年的Unix(其实更熟悉的是叫Linux),也接触到Unix世界中的各类概念,好比GCC、GNU、BSD、POSIX、GPL等等,也大都知道一些传奇的如雷贯耳的人物,好比Ken Thompson、Dennis Ritchie、Linus Torvalds、Richard Stallman等。可是这些概念是怎么发展和相互关联的,以及这些人物是怎么书写历史传奇的,相信能说清楚的人并很少。这里就专门汇总一下这些信息,供你们参考。html
另外,了解这些历史自己也是很是有趣的。看起来各类杂乱无章、琐碎纷繁的点点滴滴,最后仍是挡不住历史的潮流,演化出了现在精彩纷呈的现实世界(包括有名的Mac OS、IOS、Android等),而这和人类历史的发展竟如此相像~java
下图是对Unit的历史的一个简单汇总,参考了coolshell上的一篇文章UNIX 40年:UNIX年鉴。若是对其详细历史有兴趣的话,能够去这里看看Unix History(那个白色的横条是一个很残暴的PDF文件,做者牛逼到爆)jquery
上图中有几个重要信息:linux
下面的发展简史摘自Linux发展历史,作了少部分改动android
Linux操做系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX 操做系统、MINIX 操做系统、GNU计划、POSIX 标准和Internet 网络。。nginx
- 1981 年IBM公司推出微型计算机IBM PC
- 1991年,GNU计划已经开发出了许多工具软件,最受期盼的GNU C编译器已经出现,GNU的操做系统核心HURD一直处于实验阶段,没有任何可用性,实质上也没能开发出完整的GNU操做系统,可是GNU奠基了Linux用户基础和开发环境
- 1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操做系统。1991年4月,林纳斯·托瓦兹开始酝酿并着手编制本身的操做系统
- 1991 年4 月13 日在comp.os.minix 上发布说本身已经成功地将bash 移植到了minix 上,并且已经爱不释手、不能离开这个shell软件了
- 1991年7月3日,第一个与Linux有关的消息是在comp.os.minix上发布的(此时还不存在Linux这个名称)
- 1991年的10月5日,林纳斯·托瓦兹在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生
- 1993年,大约有100余名程序员参与了Linux内核代码编写/修改工做,其中核心组由5人组成,此时Linux 0.99的代码大约有十万行,用户大约有10万左右
- 1994年3月,Linux1.0发布,代码量17万行,当时是按照彻底自由免费的协议发布,随后正式采用GPL协议
- 1995年1月,Bob Young创办了RedHat(小红帽),以GNU/Linux为核心,集成了400多个源代码开放的程序模块,搞出了一种冠以品牌的Linux,即RedHat Linux,称为Linux"发行版",在市场上出售
- 1996年6月,Linux 2.0内核发布,此内核有大约40万行代码,并能够支持多个处理器。此时的Linux 已经进入了实用阶段,全球大约有350万人使用
- 1998年2月,以Eric Raymond为首的一批年轻的"老牛羚骨干分子"终于认识到GNU/Linux体系的产业化道路的本质,并不是是什么自由哲学,而是市场竞争的驱动,创办了"Open Source Intiative"(开放源代码促进会)"复兴"的大旗,在互联网世界里展开了一场历史性的Linux产业化运动
- 2001年1月,Linux 2.4发布,它进一步地提高了SMP系统的扩展性,同时它也集成了不少用于支持桌面系统的特性:USB,PC卡(PCMCIA)的支持,内置的即插即用,等等功能
- 2003年12月,Linux 2.6版内核发布,相对于2.4版内核2.6在对系统的支持都有很大的变化
其系统的进化是这样的:程序员
GNU(GNU's Not Unix)项目是1984年由Richard Stallman发起的一个开源项目,该项目的目标是开发出一个完整的类Unix系统,其源代码可以不受限制地被修改和传播。GNU项目开发出了一个包含Unix操做系统全部的主要部件的环境,除了内核(内核是由Linux项目独立发展而来的)。GNU环境包括EMACS编辑器、GCC编译器、GDB调试器、汇编器、连接器、处理二进制文件的工具以及其余一些部件。shell
GNU为何没有包含Unix内核,是由于GNU的开发策略。GNU计划是开发一个与Unix兼容的操做系统,在Unix系统内核已经很是完善的状况下,优先开发周边的应用程序,等本身的内核开发出来以后,直接替换掉内核便可。待大部分应用程序已经开发完毕的时候,GNU开始开发本身的内核,即GNU Hurd。可是GNU Hurd一直处于试验阶段,没有任何可用性,而这时恰好遇到了Linux的横空出世(1991.8.1 Linux发布0.0.1版,GNU Hurd1991.5月发布)。Linux做为内核,配合GNU丰富的应用程序,很天然的就结合在了一块儿,成为了风靡全球的GNU/Linux系统。macos
实际上市面上全部的Linux发行版其实都应该叫作GNU/Linux发行版,关于GNU的详细信息能够参考官网GNU Operating System安全
Portable Operating System Interface of Unix的缩写,定义了一套标准接口 - 操做系统为应用程序提供的接口。因为Unix系统的开放性,到了1988年,各类Unix系统满天飞,在一个系统上正常工做的应用程序不能移植到另外一个系统上,这种不可移植性还每每还被大Unix厂商做为本身的卖点,极大地分裂和违背了Unix的初衷。为了统一这种乱象,出现了几种标准:AT&T成立了Unix international标准组织,几大厂商(DEC、HP、IBM等)成立了开放软件基金会(OSF, Open Software Foundation),而IEEE则发布了POSIX标准,这些标准的目的都是为了统一Unix的接口标准(但实际上,POSIX标准并不局限于Unix系统)。
POSIX标准意在指望得到源码级别的软件可移植性,即为一个POSIX兼容的操做系统编写的程序,能够在任何其它POSIX兼容的操做系统上编译执行。
Berkeley Software Distribution,伯克利软件套件。
AT&A的贝尔实验室在1971年发布了初版的Unix Time Sharing System,到了1975年已经发布到第6版。1974年,加州大学伯克利分校(Berkeley)获取到一份Unix的源码拷贝,在此基础上作一些学术上的研究。1978年,Berkeley的Bill Joy,基于AT&T的Unix V6,增长了一些本身的附件软件,打包在一块儿发布了一个版本,这个版本就是初版的BSD。
1984年,Berkeley发布了第四版的BSD,该版本是世界上第一个支持TCP/IP的Unix发行版(同年,Bill Joy成立了SUN公司)
BSD有几个比较有名的“分支”系统:
在今天,提到BSD,并不是指任何一个BSD的衍生版本,而是指类Unix操做系统的一个分支的总称。
Unix操做系统在操做风格上主要分为System V和BSD。System V由AT&T发布,1983年发布了第一个版本,直到1998年发布了第四个版本,也是最经典的一个版本,简称SVR4。1985年,AT&A发布了SVID(SystemV Interface Definition),但愿统一Unix的接口标准(目标和POSIX相似)。
MacOS最终能够追溯到BSD分支,其大体演化过程为:
BSD4.2(1983.9) -> Mach(1986) -> NeXTSTEP 1.0(1989.9) -> Mac OS X 10.0(2001.3)
1986年,Rick Rashid及其同事在Carnegie Mellon大学创造了Mach操做系统的第一个版本,用于取代BSD的Unix内核。
2001年,Apple 发布 Mac OS X,这是一个基于Mach内核和BSD开发的桌面操做系统。
Android系统是基于Linux系统发展而来的。在Linux的内核上运行了一个Java虚拟机(最开始叫Dalvik虚拟机,后面改成Android Run Time,ART虚拟机),由虚拟机来解释执行用java代码编写的应用程序。
从Unix诞生开始,就伴随着开源的概念。开源全称是Open Source,是开放源代码的意思,也就意味着开放,任何人均可以获得程序的源代码。可是开源并不意味着免费(虽然大部分都是免费),也是受限于版权限制的,只是这些版权相对闭源来讲要开放宽松了不少。在版权限制范围内,能够基于源代码作修改并从新发行,甚至收费。开源的本质是在开放,是接纳、包容和发展,求同存异,互利双赢。
开源并不是是无限制的开放,也是有版权的,这些版权的声明就是开源许可证。比较常见的许可证有:GPL、BSD、Apache、MIT、LGPL、Mozilla等。下图根据网上搜索的信息简单整理了一下各许可证的主要许可范围,从图中能够看到MIT许可证是最宽松的,而GPL是相对比较严格的。
下面分别简单介绍上面几种许可证的特色:
GPL,GNU General Public License,其主要特色在于其“传染性”,只要软件中有使用了GPL协议的产品,包括直接引用源代码或者引用修改后的衍生代码,则该软件也必须采用GPL协议,开源和免费,不容许衍生代码做为商业软件发布和销售。Linux和大部分GNU产品都是采用的GPL协议。
LGPL,GNU Library or “Lesser” General Public License,容许商业软件经过引用类库的方式使用LGPL产品,而不须要公开软件的源代码。新增的代码不须要采用LGPL协议,可是修改的代码则必须采用LGPL协议。LGPL协议的开源代码很适合做为第三方类库被商业软件引用,但不适合但愿以LGPL协议代码为基础,经过修改和衍生的方式作二次开发的商业软件采用。使用LGPL协议的比较有名的产品有JBoss、Hibernate、FCKeditor等
BSD,Berkeley Software Distribution,BSD开源协议是一个给于使用者很大自由的协议。基本上使用者能够自由的使用,修改源代码,也能够将修改后的代码做为开源或者专有软件再发布。
当使用了BSD协议的代码,或者以BSD协议代码为基础作二次开发本身的产品时,须要知足三个条件:
不少公司企业在选择开源软件的时候都首选BSD协议,由于能够彻底控制这些第三方的代码,并且在必要的时候能够进行修改或者二次开发。使用BSD协议的比较有名的产品有nginx、CruiseControl、Redis等
MIT,MIT License,是最为宽松的协议,这个协议惟一的条件就是在修改后的代码或者发行包包含原做者的许可信息,比较适用商业软件。使用MIT协议的产品如jquery、Node.js等
Apache License,是著名的非盈利开源组织Apache采用的协议。该协议和BSD相似,一样鼓励代码共享和尊重原做者的著做权,一样容许代码修改,再发布(做为开源或商业软件)。须要知足的条件也和BSD相似:
MPL,Mozilla Public License,容许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种受权维护了商业软件的利益,它要求基于这种软件的修改无偿贡献版权给该软件。这样,围绕该软件的全部代码的版权都集中在发起开发人的手中。但MPL容许修改和免费使用,对连接没有要求。
还有其它形形色色的开源协议,详情能够参考Various Licenses and Comments about Them