共计 9746 个字符,预计需要花费 25 分钟才能阅读完成。
今日,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 是最好的选择!