Linux介绍

今日,Linux以及开源软件已经占有了大部分公司的服务器。但是,和我一批差不多刚刚进入软件职业几年的程序员来说,咱们现在只能被迫的承受和运用这些东西,如果不认真广泛的查找一大堆材料,咱们真的很难了解它们的曩昔……

试问,你不了解它的过去,你怎么参与到它的未来呢?

概述

我们真的离美国、离硅谷、离那些不算遥远“激情燃烧的岁月”太远了!

今天,我要尝试去发掘那些过去,认真了解我们眼前的自由软件是如何走到今天的。

一切就绪,从哪里开始呢?

如果按照时间线显然会太杂乱了,我想,按照几个关键词会是比较好的方式。

一. UNIX

接上篇《C语言、编程语言发展史》 所述,在贝尔实验室中由于近似好奇或兴趣的驱动,UNIX被创建了出来。

发展壮大

此后的10年,UNIX在学术机构和大型企业中得到了广泛的应用,当时的UNIX拥有者at&t公司以低廉甚至免费的许可将UNIX源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进,形成了所谓的“UNIX变种”,这些变种反过来也促进了UNIX的发展,其中最著名的变种之一是由加州大学伯克利分校开发的伯克利软件套件(Berkeley Software Distribution,BSD)产品。

版权之争

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

总结以上,也就是说:现在的UNIX和类UNIX分为3类

正统UNIX

System V,商业、收费的;

类UNIX - BSD衍生版本

非商业,大部分免费;

类UNIX - Linux和其它

非商业,大部分免费;

UNIX/类UNIX发展历史(截止2007年) - Wikipedia

UNIX规范

POSIX

Portable Operating System Interface of UNIX,POSIX(UNIX的可移植操作系统接口)。见名知意,POSIX是一种统一UNIX操作系统接口的规范。

当前的POSIX主要分为四个部分:Base Definitions、System Interfaces、Shell and Utilities和Rationale。

Linux基本逐步实现了POSIX兼容,但没有参与正式认证。微软的Windows NT声称部分实现了POSIX标准。

单一UNIX规范

单一UNIX规范(Single UNIX Specification)是一套UNIX系统的统一规格书,它扩充了POSIX,定义了标准UNIX操作系统

当前,只有符合单一UNIX规范的UNIX系统才能称为UNIX系统,否则只能称为类UNIX(UNIX-like)

单一UNIX规范的历史:

1980年代中,开始有人提出计划,想要统一不同UNIX 操作系统的接口。

1988年,这些标准被汇整为IEEE 1003(ISO/IEC 9945),也就是POSIX

1990年代,发布共通应用程序界面规格(Common API Specification),又称为Spec 1170。

1997年,单一UNIX规范第二版(Single UNIX Specification version 2)。

2001年: POSIX:2001, 单一UNIX规范第三版。

2004年:POSIX:2004。

2008年:POSIX:2008。

符合规范的UNIX(可以自称UNIX系统)有:

AIX

HP/UX

OS X( 原 Mac OS X )

Reliant UNIX

SCO

Solaris

Tru64 UNIX

z/OS

K-UX

二. Stallman&自由软件运动

1. 自由软件运动 - free software

这个运动是什么?为什么会产生这种运行呢?

二十世纪六十年代,IBM 等公司所开发的软件都是自由分发的。那个时候的商业模式都是以硬件为中心,软件只是被看作使硬件工作的东西。他们提供软件的同时也提供源代码,软件可以被修改并因此得到改进,这便是现在开源软件的早期情况。

但是,随着硬件价格的不断下跌,销售硬件的利润也逐渐减小,制造商开始期望软件能够带来额外的收入。越来越多的厂商开始单独销售软件,也不再提供软件的源代码。

1983年春天,Richard Matthew Stallman,这位曾经在 MIT 人工智能实验室工作的程序员,发起了 GNU 项目,旨在开发一个自由的类 UNIX 的操作系统。他为专有软件的增长和随之而来的用户不再能够修改他们电脑上的程序而忧心忡忡。软件开发者被束缚,有悖自由精神的现象随之普遍发生。GNU 项目的创立,标志了自由软件运动的开始,随后的 1985年10月,Stallman 又创立了自由软件基金会(Free Software Foundation, FSF)。

需要明白的是(以下是Stallman原话的中译):

“自由软件”是权利问题,不是价格问题。要理解这个概念,自由应该是“言论自由”中的“自由”,而不是“免费啤酒”中的“免费”。

自由软件关乎使用者运行、复制、发布、研究、修改和改进该软件的自由!

2. Stallman

理查德·马修·斯托曼(Richard Matthew Stallman RMS,1953-今)是自由软件运动的精神领袖,GNU计划以及自由软件基金会(Free Software Foundation)的创立者、著名黑客。他被尊称为:rms。

他的主要成就包括Emacs及后来的GNU Emacs,GNU C 编译器及GNU 除错器。 他所写作的GNU通用公共许可证(GNUGPL)是世上最广为采用的自由软件许可证,为copyleft观念开拓出一条崭新的道路。他最大的影响是为自由软件运动竖立了道德、政治以及法律框架。他被许多人誉为当今自由软件的斗士、伟大的理想主义者,但同时也有人批评他过于固执、观点落伍。

Stallman个人履历:

1953年斯托曼出生于美国纽约曼哈顿地区;

1971年进入哈佛大学学习,同年受聘于麻省理工学院人工智能实验室(AI Laboratory),成为一名职业黑客。 在AI实验室工作期间,斯托曼开发了多种今后影响深远的软件,其中最著名的就是Emacs。斯托曼在AI是一名典型的黑客,是整个黑客文化的一份子。

1980年后,黑客社群在软件工业商业化的强大压力下日渐土崩瓦解,甚至连AI实验室的许多黑客也组成了Symbolic公司,试图以专利软件来取代实验室中黑客文化的产物 - 免费可自由流通的软件。斯托曼对此感到气愤与无奈。

1985年,在对Symbolic进行了一段时间的抗争后,他最终发表了著名的GNU宣言(GNU Manifesto),正式宣布要开始进行一项宏伟的计划:创造一套完全自由免费,兼容于UNIX的操作系统GNU(GNU’s Not UNIX!)

1985年10月,他又建立了自由软件基金会(Free Software Foundation)来协助GNU计划。

1989年,他与一群律师起草了广为使用的GNU通用公共协议证书(GNU General Public License, GNU GPL),创造性地提出了“反版权 - copyleft“的概念。 同时,GNU计划中除了最关键的Hurd操作系统内核之外,其他绝大多数软件已经完成。

1991年,芬兰大学生Linus Torvalds在GPL条例下发布他自己创作的Linux操作系统内核,至此GNU计划正式完成,操作系统被命名为GNU/Linux(或简称Linux)。

斯托曼是一名坚定的自由软件运动倡导者!

与其他提倡开放源代码的人不同,斯托曼并不是从软件质量的角度而是从道德的角度来看待自由软件。他认为使用专利软件是非常不道德的事,只有附带了源代码的程序才是符合其道德标准的。对此许多人表示异议,并也因此有了自由软件运动开源软件运动之分。

3. GNU和GPL

GNU计划是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallman最早是在net.unix-wizards新闻组上公布该消息,并附带《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。

可以理解GNU计划是:开发出一个兼容UNIX接口的全新的自由的操作系统。

也就是说:此OS应该是类似UNIX的,但完全不是UNIX。

GPL

GNU通用公共许可证(GNU General Public License,GPL),即反版权 - Copyleft概念。

为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款。

但是GPL过于自由(严格),只要用到了GPL的软件,那么自身也必须遵守GPL,这让很多人不能接受。

承接上文所说“对此许多人表示异议,并也因此有了自由软件运动与开源软件运动之分”,后文会说开源软件运动

GNU是“GNU is Not UNIX”的递归缩写。Stallman宣布GNU应当发音为Guh-NOO(革奴)以避免与new这个单词混淆(注:Gnu在英文中原意为非洲牛羚,发音与new相同)。

UNIX在当时是一种广泛使用的商业操作系统。由于GNU计划实现UNIX系统的接口标准,因此GNU打算分别开发不同的操作系统部件。GNU计划采用了部分当时已经可自由使用的软件,例如TeX排版系统和X Window视窗系统等。不过GNU计划也开发了大批其他的自由软件。这包括了:

Emacs:一个功能强大的文字编辑器;

GCC:GNU Compiler Collection,GNU编译器集合;

大部分的UNIX系统程序库、工具;

但是,唯一没有完成的重要组件就是操作系统的内核(正在开发,GNU称之为HURD)

三. Linus - Linux

上文书说到:万事俱备,只欠内核!(正在开发,此事暂时放下不表)

1. Linus - 林纳斯

1991年,大洋彼岸的欧洲,芬兰赫尔辛基,21岁的赫尔辛基大学大学生,林纳斯·托瓦茨(Linus Torvalds)开始在一台386sx兼容微机上学习Minix(也是UNIX-like)操作系统。不久之后,林纳斯觉得Minix并不好用,随后他开始着手自己开发一个类UNIX系统。

(题外话,Git也是这guy开发的)

Linus开发的Linux履历:

1991年4月13日在comp.os.minix 上发布说自己已经成功地将bash 移植到了minix 上,而且已经爱不释手、不能离开这个shell 软件了。

1991年7月3日,第一个与Linux有关的消息是在comp.os.minix上发布的(当然此时还不存在Linux这个名称,当时林纳斯·托瓦兹的脑子里想的可能是FREAX,FREAX的英文含义是怪诞的、怪物、异想天开等)。

1991年的10月5日,林纳斯·托瓦兹在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核的诞生(Freeminix-like kernel sources for 386-AT)

1993年,大约有100余名程序员参与了Linux内核代码编写/修改工作,其中核心组由5人组成,此时Linux 0.99的代码大约有十万行,用户大约有10万左右。

1994年3月,Linux1.0发布,代码量17万行,当时是按照完全自由免费的协议发布,随后正式采用GPL协议。

在自由软件之父斯托曼的某些精神感召下,Linus很快将这个操作系统内核加入到了GUN计划中,并通过GPL授权。越来越多的全球范围的程序员加入到开发和维护Linux的工作中来了。

2. Linux

准确来说,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。

在Linux加入GNU伊始,原UNIX内核的开发计划并没有改变,但是随着Linux越来越多流行,在事实上GNU + Linux已经成为了GNU计划的最终产物。

关于Linux:

从技术上说Linux只是一个内核。内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。

一个内核并不是一套完整的操作系统。有一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux(在该系统中包含了很多GNU计划的系统组件)。

命名:

随后,在90年代中期,斯托曼要求Linux更名为“GNU/Linux”但鉴于当时Linux已经流行,且Linux朗朗上口简短好记,Linux社区没有采纳这个名称。虽然Linux内核只占此系统的3%,而GUN的代码占据了28%。当然,也有部分人认为操作系统一词就是指的内核(Kernel),而那些其他程序只能称为应用软件

3. Linux distribution - 发行版

上文说到,Linux只是内核,而Linux + GNU 可以组成一个不算完全的操作系统。虽然这些都是自由软件,但是让用户自己去进行所有组合和拼装以及编译操作还是有一定难度的。所以,出现了Linux 发行版

Linux 发行版(Linux distribution,也被叫做GNU/Linux 发行版),为一般用户预先集成好的Linux操作系统及各种应用软件。一般用户不需要重新编译,在直接安装之后,只需要小幅度更改设置就可以使用,通常以软件包管理系统来进行应用软件的管理。

Linux发行版通常包含了包括桌面环境、办公包、媒体播放器、数据库等应用软件。这些操作系统通常由Linux内核、以及来自GNU计划的大量的函数库,和基于X Window的图形界面。有些发行版考虑到容量大小而没有预装 X Window,而使用更加轻量级的软件,如:busybox, uclibc 或 dietlibc。现在有超过300个Linux发行版。大部分都正处于活跃的开发中,不断地改进。

1995年1月,Bob Young创办了RedHat(小红帽),以GNU/Linux为核心,集成了400多个源代码开放的程序模块,搞出了一种冠以品牌的Linux,即RedHat Linux,称为Linux Distribution - 发行版,在市场上出售。这在经营模式上是一种创举。

发行版可以分为商业、社区、和非商非社版。我们听说和使用最多的有:Red Hat、Debian、Ubuntu、CentOS等。

四. 开源软件运动

1998年2月,以Eric Raymond为首的一批年轻的”老牛羚骨干分子”终于认识到GNU/Linux体系的产业化道路的本质,并非是什么自由哲学,而是市场竞争的驱动,创办了Open Source Intiative(开放源代码促进会)在互联网世界里展开了一场历史性的Linux产业化运动。

随后,OSI和FSF分道扬镳。

开源软件(open source software),是说源代码可以任意获取的计算机软件,这种软件的版权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改、增进提高这款软件的质量。

开源协议通常匹配开放源代码的定义的要求,如果人为设置一些源码开放条件限制,则称之为:公开源代码的免费软件(Freeware)。

1. 开放源代码促进会

开放源代码促进会(Open Source Initiative,OSI),是一个旨在推动开源软件发展的非盈利组织。

1998年2月,OSI由布鲁斯·裴伦思埃里克·斯蒂芬·雷蒙等人创立。当时,网景公司为了与微软的IE竞争,将他们的旗舰产品网景浏览器(Navigator)发布成自由软件。然而随后网景公司还是输掉了第一次浏览器大战。

————————– 开源软件”open-source software”一词出自自由软件的营销活动中。

2. Eric Raymond

埃里克·斯蒂芬·雷蒙(Eric Steven Raymond,1957至今),是著名黑客,《大教堂与集市》作者,是开放源代码运动的主要领导人。被称为:ESR。

从1998年2月 - 2005年2月,雷蒙担任OSI的主席。

雷蒙有句名言(又被称为林纳斯定律):“足够多的眼睛,就可以让所有问题浮现。Given enough eyeballs, all bugs are shallow”。

3. 与自由软件区别

许多人将开放源代码与自由软件(free Software)视为相同,但若以定义条件而言,自由软件仅是开放源代码的一种,也就是自由软件的定义较开放源代码更为严格。

4. 著名开源软件

应用软件:

7-Zip——文件压缩软件。

Blender——三维绘图及渲染软件。

Eclipse——集成开发环境。

GIMP——GNU图像处理软件。

Scribus——桌面出版软件。

Inkscape——矢量图形编辑器。

Emacs——纯文本编辑器。

Vim——纯文本编辑器。

Chromium——网页浏览器。

Mozilla Firefox——网页浏览器。

Mozilla Thunderbird——电子邮件客户端软件。

NASA World Wind——虚拟地球软件。

Open Broadcaster Software——在线直播软件。

DocFetcher——桌面搜索软件。

操作系统:

Android——基于Linux的操作系统。

Firefox OS——基于Linux的操作系统。

FreeBSD——类Unix的操作系统。

Linux——类Unix操作系统家族。

OpenIndiana——类Unix操作系统家族。

ReactOS——创建在Windows NT架构的操作系统。

Haiku——与BeOS兼容的操作系统。

编程语言:

Perl——一种通用的编程语言。

PHP——适用于网络开发的编程语言。

Python——一种通用的编程语言。

Ruby——一种通用的编程语言。

Swift——一种支持多编程范式,编译式编程语言。

服务器软件:

Apache HTTP Server——一种网页服务器。

Drupal——内容管理系统。

Joomla!——内容管理系统。

MediaWiki——运行于维基百科的Wiki引擎。

MongoDB——文件导向数据库管理系统

Moodle——课程管理系统、虚拟学习环境。

Arduino——单片机微电脑,由艺术家、设计师、业余爱好者所使用。

五. License

今天存在很多的开源/自由协议,这里我们了解下最著名的4个。

GPL(GNU General Public License)

我们很熟悉的Linux就是采用了GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。

由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。

严格自由:如果使用了GPL软件那么自身也必须是GPL软件

LGPL(GNU Lesser General Public License)

LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。

弱化的GPL:可以引用LGPL软件而不需要自身GPL/LGPL,但不能修改原LGPL软件

BSD License(Original、FressBSD、Original BSD)

BSD license(Berkeley Software Distribution License),是自由软件中使用最广泛的许可证之一。BSD软件就是遵照这个许可证来发布,该许可证也因此而得名。

BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。

BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

可以随意使用,仅需要包含原软件BSD License即可

Apache Licence 2.0(Apache License, Version 2.0、Apache License, Version 1.1、Apache License, Version 1.0)

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

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

类似BSD License

六. 总结

如上所述,软件行业的版权发展思路就是如下三种:

Copyright- 完全限制

要遵守限制重重的著作权 - Copyright。

Copyleft- 完全自由

带有基于政治(是类似言论自由这种)以及哲学思想的理想主义方式。如GPL,必须完全自由,只要跟GPL有关系就必须也是GPL。

Copycenter- 开放

如BSD License,BSD的后续版本可以选择要继续是BSD或其他自由软件条款或封闭软件等等。

这三种思路现在都各有各的发展,都有其适用情况。

对商业公司来说Copyright是商业必须!

对自由软件运动斗士和生来就有自由基因的软件来说Copyleft是一种信仰!

对开源拥护者,但也想获得商业利益的人来说Copycenter是最好的选择!

推荐阅读更多精彩内容