Unix历史及相关概念回顾

欢迎来到Unix的世界

很多人都用了很多年的Unix(其实更熟悉的是叫Linux),也接触到Unix世界中的各种概念,比如GCC、GNU、BSD、POSIX、GPL等等,也大都知道一些传奇的如雷贯耳的人物,比如Ken Thompson、Dennis Ritchie、Linus Torvalds、Richard Stallman等。但是这些概念是怎么发展和相互关联的,以及这些人物是怎么书写历史传奇的,相信能说清楚的人并不多。这里就专门汇总一下这些信息,供大家参考。

另外,了解这些历史本身也是非常有趣的。看起来各种杂乱无章、琐碎纷繁的点点滴滴,最后还是挡不住历史的潮流,演化出了如今精彩纷呈的现实世界(包括有名的Mac OS、IOS、Android等),而这和人类历史的发展竟如此相像~

Unix

下图是对Unit的历史的一个简单汇总,参考了coolshell上的一篇文章UNIX 40年:UNIX年鉴。如果对其详细历史有兴趣的话,可以去这里看看Unix History(那个白色的横条是一个很残暴的PDF文件,作者牛逼到爆)

image-20190131140627679

上图中有几个重要信息:

  • BSD诞生于1978年,是基于其在1974年收到的Unit的源码拷贝,后面很多重要的发布版本都是源于BSD
  • 1988年为了统一Unit的标准乱象,IEEE提出了POSIX标准
  • 1991年,Linux诞生,但其本身只是一个操作系统的内核,不包含任何的配套软件
  • 1992年,Linux内核被整合近了GNU,GNU+Linux内核,这才是大家常用的Linux系统,实际上应该叫GNU/Linux
  • 2001年,Mac OS诞生,其基于Mach操作系统,Mach系统又是基于BSD,但是替换了其中的Unix内核

Linux

下面的发展简史摘自Linux发展历史,做了少部分改动

Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU计划、POSIX 标准和Internet 网络。。

  • 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在对系统的支持都有很大的变化

其系统的进化是这样的:

  • 1969.9 UNICS(Unix)
  • 1971.11 Unix Time Sharing System Edition Version V1
  • 1972.6 V2 -> 1973.2 V3 ->1973.11 V4 -> 1974.6 V5 -> 1975 V6 -> 1979 V7
  • 1987 Minix V1.0发布,基于Unit Time Sharing System V7
  • 1991.8.1 Linux 0.0.1发布,基于Minix系统

GNU

GNU(GNU's Not Unix)项目是1984年由Richard Stallman发起的一个开源项目,该项目的目标是开发出一个完整的类Unix系统,其源代码能够不受限制地被修改和传播。GNU项目开发出了一个包含Unix操作系统所有的主要部件的环境,除了内核(内核是由Linux项目独立发展而来的)。GNU环境包括EMACS编辑器、GCC编译器、GDB调试器、汇编器、链接器、处理二进制文件的工具以及其他一些部件。

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系统。

实际上市面上所有的Linux发行版其实都应该叫做GNU/Linux发行版,关于GNU的详细信息可以参考官网GNU Operating System

POSIX

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兼容的操作系统上编译执行。

BSD

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有几个比较有名的“分支”系统:

  • FreeBSD,主打高性能和易用性
  • OpenBSD,主打安全性,很多银行系统和重要机构的系统都是基于OpenBSD
  • NetBSD,被设计为几乎可用在任何架构上,支持非常多的体系结构
  • DragonFly BSD,适用于多线程环境的操作系统,如计算机集群
  • Darwin/Mac OS X,Mac OS X基于Darwin操作系统,而Darwin基于BSD。苹果在BSD的基础上开发了MAC OS X和IOS(内核使用开源的BSD代码,其它大部分是闭源的Mac OS代码),类似于谷歌在Linux基础上开发Android

在今天,提到BSD,并非指任何一个BSD的衍生版本,而是指类Unix操作系统的一个分支的总称。

System V

Unix操作系统在操作风格上主要分为System V和BSD。System V由AT&T发布,1983年发布了第一个版本,直到1998年发布了第四个版本,也是最经典的一个版本,简称SVR4。1985年,AT&A发布了SVID(SystemV Interface Definition),希望统一Unix的接口标准(目标和POSIX类似)。

MacOS

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

Android系统是基于Linux系统发展而来的。在Linux的内核上运行了一个Java虚拟机(最开始叫Dalvik虚拟机,后面改为Android Run Time,ART虚拟机),由虚拟机来解释执行用java代码编写的应用程序。

开源

从Unix诞生开始,就伴随着开源的概念。开源全称是Open Source,是开放源代码的意思,也就意味着开放,任何人都可以得到程序的源代码。但是开源并不意味着免费(虽然大部分都是免费),也是受限于版权限制的,只是这些版权相对闭源来说要开放宽松了很多。在版权限制范围内,可以基于源代码做修改并重新发行,甚至收费。开源的本质是在开放,是接纳、包容和发展,求同存异,互利共赢。

许可证

开源并非是无限制的开放,也是有版权的,这些版权的声明就是开源许可证。比较常见的许可证有:GPL、BSD、Apache、MIT、LGPL、Mozilla等。下图根据网上搜索的信息简单整理了一下各许可证的主要许可范围,从图中可以看到MIT许可证是最宽松的,而GPL是相对比较严格的。

image-20190319010021235

下面分别简单介绍上面几种许可证的特点:

  • 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协议
    • 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广

    很多公司企业在选择开源软件的时候都首选BSD协议,因为可以完全控制这些第三方的代码,而且在必要的时候可以进行修改或者二次开发。使用BSD协议的比较有名的产品有nginx、CruiseControl、Redis等

  • MIT,MIT License,是最为宽松的协议,这个协议唯一的条件就是在修改后的代码或者发行包包含原作者的许可信息,比较适用商业软件。使用MIT协议的产品如jquery、Node.js等

  • Apache License,是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

    • 需要给代码的用户一份Apache Licence
    • 如果你修改了代码,需要在被修改的文件中说明
    • 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明
    • 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改
  • MPL,Mozilla Public License,允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,它要求基于这种软件的修改无偿贡献版权给该软件。这样,围绕该软件的所有代码的版权都集中在发起开发人的手中。但MPL允许修改和无偿使用,对链接没有要求。

还有其它形形色色的开源协议,详情可以参考Various Licenses and Comments about Them

参考

posted @ 2019-03-19 03:19  justinme  阅读(1213)  评论(0编辑  收藏  举报