1.4 缘起——GNU计划与开源运动
# 4. 缘起——GNU计划与开源运动
# 4.1 GNU计划与FSF基金会的成立
Richard Mathew Stallman(史托曼)在1984年发起的GNU计划,对于现今的自由软件风潮, 真有不可磨灭的地位!目前我们所使用的很多自由软件或开源软件,几乎均直接或间接受益 于GNU这个计划呢! 那么史托曼是何许人也?为何他会发起这个GNU计划呢?
# 一个分享的环境
Richard Mathew Stallman 从小就很聪明!他在 1971年的时候,进入骇客圈中相当出名的人工智能实验室(AI Lab.), 这个时候的骇客专指计算机功力很强的人,而非破坏计算机的怪客(cracker)喔!
当时的骇客圈对于软件的着眼点几乎都是在“分享”,骇客们都认为互相学习对方的程序码,这 样才是产生更优秀的程序码的最佳方式! 所以 AI 实验室的骇客们通常会将自己的程序码公布 出来跟大家讨论喔!这个特色对于史托曼的影响很大!
不过,后来由于管理阶层以及骇客群们自己的生涯规划等问题,导致实验室的优秀骇客离开 该实验室, 并且进入其他商业公司继续发展优秀的软件。但史托曼并不服输,仍然持续在原来的实验室开发新的程序与软件。 后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团体来共同努力!
# 使用Unix开发阶段
1983年以后,因为实验室硬件的更换,使得史托曼无法继续以原有的硬件与操作系统继续自由程序的撰写~ 而且他进一步发现到,过去他所使用的Lisp操作系统,是麻省理工学院的专利软件, 是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。于是他便放弃了 Lisp这个系统。 后来,他接触到Unix这个系统,并且发现,Unix在理论与实际上,都可以在 不同的机器间进行移植。虽然 Unix 依旧是专利软件, 但至少 Unix 架构上还是比较开放的! 于是他开始转而使用Unix系统。
因为Lisp与Unix是不同的系统,所以,他原本已经撰写完毕的软件是无法在Unix上面运行的! 为此, 他就开始将软件移植到Unix上面。并且,为了让软件可以在不同的平台上运行, 因 此,史托曼将他发展的软件均撰写成可以移植的型态!也就是他都会将程序的源代码公布出 来!
# GNU计划的推展
1984年,史托曼开始GNU计划, 这个计划的目的是:创建一个自由、开放的Unix操作系统 (Free Unix)。 但是创建一个操作系统谈何容易啊!而且在当时的GNU是仅有自己一个人单 打独斗的史托曼~ 这实在太麻烦,但又不想放弃这个计划,那可怎么办啊?
聪明的史托曼干脆反其道而行~“既然操作系统太复杂,我就先写可以在Unix上面运行的小程 序,这总可以了吧?”在这个想法上, 史托曼开始参考Unix上面现有的软件,并依据这些软件 的作用开发出功能相同的软件,且开发期间史托曼绝不看其他软件的源代码, 以避免吃上官 司。后来一堆人知道免费的GNU软件,并且实际使用后发现与原有的专利软件也差不了太 多,于是便转而使用GNU软件, 于是GNU计划逐渐打开知名度。
虽然GNU计划渐渐打开知名度,但是能见度还是不够。这时史托曼又想:不论是什么软件, 都得要进行编译成为二进制文件(binary program)后才能够执行,如果能够写出一个不错的 编译器,那不就是大家都需要的软件了吗? 因此他便开始撰写C语言的编译器,那就是现在相当有名的GNU C Compiler(gcc)! 这个点相当的重要!这是因为C语言编译器版本众 多,但都是专利软件, 如果他写的C编译器够棒,性能够佳,那么将会大大的让GNU计划出 现在众人眼前!
但开始撰写GCC时并不顺利,为此,他先转而将他原先就已经写过的Emacs编辑器写成可以 在Unix上面跑的软件,并公布源代码。 Emacs是一种程序编辑器,他可以在使用者撰写程序的过程中就进行程序语法的检验,此一功能可以减少程序设计师除错的时间! 因为Emacs太 优秀了,因此,很多人便直接向他购买。
# FSF——自由软件基金会成立
此时网际网络尚未流行,所以,史托曼便借着Emacs以磁带(tape)出售,赚了一点钱 ,进 而开始全力撰写其他软件。并且成立自由软件基金会(FSF, Free Software Foundation),请更多工程师与志工撰写软件。终于还是完成了GCC,这比Emacs还更有帮助! 此外,他还撰写了更多可以被调用的C函数库(GNU C library),以及可以被使用来操作操作系统的基本 接口BASH shell! 这些都在1990年左右完成了!
Emacs
如果纯粹使用文字编辑器来编辑程序的话,那么程序语法如果写错时,只能利用编译时发生的错误讯息来修订了,这样实在很没有效率。 Emacs则是一个很棒的编辑器!注意!是 编辑(editor)而非编译(compiler)! 他可以很快的立刻显示出你写入的语法可能有错误的 地方,这对于程序设计师来说, 实在是一个好到不能再好的工具了!所以才会这么的受到欢 迎啊!
# GPL——GNU的通用公共许可证
到了1985年,为了避免GNU所开发的自由软件被其他人所利用而成为专利软件, 所以他与律 师草拟了有名的通用公共许可证(General Public License, GPL), 并且称呼他为 copyleft(相对于专利软件的copyright!)。 关于GPL的相关内容我们在下一个小节继续谈 论,在这里,必须要说明的是, 由于有GNU所开发的几个重要软件,如:
- Emacs
- GNU C (GCC)
- GNU C Library (glibc)
- Bash shell
造成后来很多的软件开发者可以借由这些基础的工具来进行程序开发! 进一步壮大了自由软 件团体!这是很重要的!不过,对于GNU的最初构想 “创建一个自由的Unix操作系统”来说, 有这些优秀的程序是仍无法满足, 因为,当下并没有“自由的Unix核心”存在...所以这些软件仍只能在那些有专利的 Unix平台上工作~~一直到Linux的出现...
FSF
更多的FSF开发的软件可以参 考如下网页:
https://www.fsf.org/resources
事实上,GNU 自己开发的核心称为 hurd, 是一个架构相当先进的核心。不过由于开发者在开发的过程中对于系统的要求太过于严谨,因此推出的时程一再延后,所以才有后来 Linux 的开发!
# 1991年:芬兰大学生Linus Torvalds的一则简讯
到了1991年,芬兰的赫尔辛基大学的Linus Torvalds在BBS上面贴了一则消息, 宣称他以 bash, gcc等 GNU 的工具写了一个小小的核心程序,该核心程序单纯是个玩具,不像 GNU 那 么专业。 不过该核心程序可以在Intel的386机器上面运行就是了。这让很多人很感兴趣!从此开始了Linux不平凡的路程!
# 4.2 GNU、自由软件和开放源代码
# 自由软件的活动
1984年创立GNU计划与FSF基金会的Stallman先生认为,写程序最大的快乐就是让自己发展的良好的软件让大家来使用了! 另外,如果使用方撰写程序的能力比自己强,那么当对方修改完自己的程序并且回传修改后的程序码给自己,那自己的程序撰写功力无形中就更往上爬 了! 这就是最早之前 AI 实验室的骇客风格!
而既然程序是想要分享给大家使用的,不过,每个人所使用的计算机软硬件并不相同, 既然如此的话,那么该程序的源代码(Source code)就应该要同时释出, 这样才能方便大家修改 而适用于每个人的计算机中呢!这个将源代码连同软件程序释出的举动,在 GNU 计划的范畴 之内就称为自由软件(Free Software)运动!
此外,史托曼同时认为,如果你将你程序的Source code分享出来时,若该程序是很优秀的, 那么将会有很多人使用, 而每个人对于该程序都可以查阅source code,无形之中,就会有一 票人帮你除错啰! 你的这支程序将会越来越壮大!越来越优秀呢!
# 自由软件的版权GNU GPL
而为了避免自己的开发出来的Open source自由软件被拿去做成专利软件, 于是Stallman同时 将GNU与FSF发展出来的软件,都挂上GPL的版权宣告~ 这个F**SF的核心观念是“版权制度是促进社会进步的手段, 版权本身不是自然权力。”**对于FSF有兴趣或者对于GNU想要更深入的 了解时,请参考GNU官网: http://www.gnu.org 里面有 更为深入的解说!
GNU名字
为什么要称为GNU呢?其实GNU是GNU's Not Unix的缩写,意思是说,GNU并不是 Unix啊!那么GNU又是什么呢? 就是GNU's Not Unix嘛!.....如果你写过程序就会知道,这个 GNU = GNU's Not Unix可是无穷循环啊!忙碌~ 另外,什么是Open Source呢?所谓的source code是程序发展者写出的原始程序码, Open Source就是,软件在发布时,同时将作者的源代码一起公布的意思!
# 自由(Free)的真谛
那么这个GPL(GNU General Public License, GPL)是什么玩意儿? 为什么要将自由软件挂 上GPL的“版权宣告”呢?这个版权宣告对于作者有何好处?
首先,Stallman对GPL一直是强调 Free的,这个Free的意思是这样的: "Free software" is a matter of liberty, not price. To understand the concept, you should think of "free speech", not "free beer". "Free software" refers to the users' freedom to run, copy, distribute, study, change, and improve the software
大意是说,Free Software(自由软件)是一种自由的权力,并非是“价格!” 举例来说,你可以拥有自由呼吸的权力、你拥有自由发表言论的权力, 但是,这并不代表你可以到处喝“免费的啤酒!(free beer)”,也就是说, 自由软件的重点并不是指“免费”的,而是指具有“自由度, freedom”的软件, 史托曼进一步说明了自由度的意义是: 使用者可以自由的执行、复制、再 发行、学习、修改与强化自由软件。
这无疑是个好消息!因为如此一来,你所拿到的软件可能原先只能在Unix上面跑, 但是经过 源代码的修改之后,你将可以拿他在Linux或者是Windows上面来跑!总之, 一个软件挂上了 GPL版权宣告之后,他自然就成了自由软件!这个软件就具有下面的特色:
- 取得软件与源代码:你可以根据自己的需求来执行这个自由软件;
- 复制:你可以自由的复制该软件;
- 修改:你可以将取得的源代码进行程序修改工作,使之适合你的工作;
- 再发行:你可以将你修改过的程序,再度的自由发行,而不会与原先的撰写者冲突;
- 回馈:你应该将你修改过的程序码回馈于社群!
但请特别留意,你所修改的任何一个自由软件都不应该也不能这样:
修改授权:你不能将一个GPL授权的自由软件,在你修改后而将他取消GPL授权~ 单纯贩卖:你不能单纯的贩卖自由软件。
也就是说,既然GPL是站在互助互利的角度上去开发的,你自然不应该将大家的成果占为己 有, 因此你当然不可以将一个GPL软件的授权取消,即使你已经对该软件进行大幅度的修改! 那么自由软件也不能贩卖吗?当然不是!还记得上一个小节里面, 我们提到史托曼 借由贩卖Emacs取得一些经费,让自己生活不至于匮乏吧?是的! 自由软件是可以贩售的, 不过,不可仅贩售该软件,应同时搭配售后服务与相关手册~ 这些可就需要工本费了呢!
# 自由软件与商业行为:
很多人还是有疑问,目前不是有很多Linux开发商吗?为何他们可以贩售Linux这个GPL授权的 软件? 原因很简单,因为他们大多都是贩售“售后服务!”所以,他们所使用的自由软件, 都 可以在他们的网站上面下载!(当然,每个厂商他们自己开发的工具软件就不是GPL的授权 软件了!) 但是,你可以购买他们的Linux光盘,如果你购买了光盘,他们会提供相关的手册 说明文档, 同时也会提供你数年不等的谘询、售后服务、软件升级与其他协力工作等等的附 加价值!
所以说,目前自由软件工作者,他们所赖以维生的,几乎都是在“服务”这个领域呢! 毕竟自由软件并不是每个人都会撰写,有人有需要你的自由软件时,他就会请求你的协助, 此时, 你就可以通过服务来收费了!这样来说, 自由软件确实还是具有商业空间的喔!
很多人对于GPL授权一直很疑惑,对于GPL的商业行为更是无法接受! 关于这一点,在这里还是要再次的申明,GPL是可以从事商业行为的! 而很多的作者也是借由这些商业行为来得以取得生活所需,更进一步去发展更优秀的自由软件! 千万不要听到“商业”就排斥!这对于发展优良软件的朋友来说,是不礼貌的!
上面提到的大多是与使用者有关的项目,那么 GPL 对于自由软件的作者有何优点呢?大致的优点有这些:
- 软件安全性较佳;
- 软件执行性能较佳;
- 软件除错时间较短;
- 贡献的源代码永远都存在。
这是因为既然是提供源代码的自由软件,那么你的程序码将会有很多人帮你查阅, 如此一 来,程序的漏洞与程序的优化将会进展的很快!所以,在安全性与性能上面, 自由软件一点 都不输给商业软件喔!此外,因为GPL授权当中,修改者并不能修改授权, 因此,你如果曾 经贡献过程序码,嘿嘿!你将名留青史呢!不错吧!
对于程序开发者来说,GPL实在是一个非常好的授权,因为大家可以互相学习对方的程序撰 写技巧, 而且自己写的程序也有人可以帮忙除错。那你会问啊,对于我们这些广大的终端用 户,GPL有没有什么好处啊?有啊!当然有! 虽然终端用户或许不会自己编译程序码或者是 帮人家除错,但是终端用户使用的软件绝大部分就是GPL的软件, 全世界有一大票的工程师 在帮你维护你的系统,这难道不是一件非常棒的事吗? ^_^
就跟人类社会的科技会进步一样,授权也会进步喔!因应源代码分区与重组的问题,与其他开源软件的授权包容性,以及最重要的数码版权管理 (Digital Rights Management, DRM) 等问题,GPL 目前已经出到第三版 GPLv3。但是,目前使用最广泛的,还是 GPLv2 喔!包括 Linux 核心就还是使用 GPLv2 的说!
# 开放源代码
Free Software → Open Software
由于自由软件使用的英文为 free software,这个 free 在英文是有两种以上不同的意义,除了 自由之外,免费也是这个单字! 因为有这些额外的联想,因此许多的商业公司对于投入自由软件方面确实是有些疑虑存在的!许多人对于这个情况总是有些担心
为了解决这个困扰,1998 年成立的“开放源代码促进会 (Open Source Initiative)”提出了开 放源代码 (Open Source,亦可简称开源软件) 这一名词! 另外,并非软件可以被读取源代 码就可以被称为开源软件喔!该软件的授权必须要符合下面的基本需求,才可以算是 open source 的软件:
- 公布源代码且用户具有修改权:用户可以任意的修改与编译程序码,这点与自由软件差 异不大;
- 任意的再散佈:该程序码全部或部份可以被贩售,且程序码可成为其他软件的元件之 一,作者不该宣称具有拥有权或收取其他额外费用。
- 必须允许修改或衍生的作品,且可让再发布的软件使用相似的授权来发表即可。
- 承上,用户可使用与原本软件不同的名称或编号来传播。
- 不可限制某些个人或团体的使用权
- 不可限制某些领域的应用:例如不可限制不能用于商业行为或者是学术行为等特殊领域等等
- 不可限制在某些产品当中,亦即源代码可以应用于多种不同产品中。
- 不可具有排他条款,例如不可限制本程序码不能用于教育类的研究中,诸如此类。
根据上面的定义,GPL 自由软件也可以算是开源软件的一个,只是对于商业应用的限止稍微 多一些而已。 与 GPL 自由软件相比,其他开源软件的授权可能比较轻松!比较轻松的部份包括:再发布的授权可以跟原本的软件不同; 另外,开源软件的全部或部份可作为其他软件的一部分,且其他软件无须使用与开源软件相同的授权来发布!这跟GPL自由软件差异就大 了! 自由软件的GPL授权规定,任何软件只要用了GPL的全部或部份程序码,那么该软件就得要使用GPL的授权!这对于自由软件的保障相当大! 但对于想要保有商业公司自己的商业机密的专属软件来说,要使用GPL授权还是怕怕的!这也是后来商业公司拥抱其他 open source 开源软件授权的缘故!因为可以用于商业行为啰!更多的差异或许可以参考一下开源促进会的说明。
另外,Open source 这个名词只是一个指引,而实际上并不是先有 open source 才有相关的 授权。早在 open source 出来之前就有些开源软件的授权存在了 (例如 GPL )。不过 有 open source 这个名词之后,大家才更了解到开源软件授权的意义就是了。
简单来说,开源软件的特点就是把软件程序与源代码文件一起打包提供给用户,让用户在不受限制地使用某个软件功能的基础上还可以按需进行修改,或编制成衍生产品再发布出去。用户具有使用自由、修改自由、重新发布自由以及创建衍生品的自由。这也正好符合了黑客和极客对自由的追求,因此国内外开源社区的根基都很庞大,人气也相当高。
坦白来讲,每位投身于Linux行业的技术人或者程序员只要听到开源项目就会由衷地感到自豪,这是一种从骨子里带有的独特情怀。开源的企业不单纯是为了利益,而是互相扶持,努力服务好更多的用户。开源软件最重要的特性有下面这些。
**低风险:**使用闭源软件无疑把命运交付给他人,一旦封闭的源代码没有人来维护,你将进退维谷;而且相较于商业软件公司,开源社区很少存在倒闭的问题。
**高品质:**相较于闭源软件产品,开源项目通常是由开源社区来研发及维护的,参与编写、维护、测试的用户量众多,一般的bug还没有等爆发就已经被修补。
**低成本:**开源工作者都是在幕后默默且无偿地付出劳动成果,为美好的世界贡献一份力量,因此使用开源社区推动的软件项目可以节省大量的人力、物力和财力。
**更透明:**没有哪个笨蛋会把木马、后门等放到开放的源代码中,这样无疑是把自己的罪行暴露在阳光之下。
# 常见的开源授权协议
如果开源软件为了单纯追求“自由”而牺牲程序员的利益,这将会影响程序员的创造激情,因此世界上现在有60多种被开源促进组织(Open Source Initiative)认可的开源许可协议来保证开源工作者的权益。对于那些只知道一味抄袭、篡改、破解或者盗版他人作品的不法之徒,终归会在某一天收到法院的传票。对于准备编写一款开源软件的开发人员,也非常建议先了解一下当前最热门的开源许可协议,选择一个合适的开源许可协议来最大限度保护自己的软件权益。
GNU GPL(GNU General Public License,GNU通用公共许可证):只要软件中包含了遵循GPL协议的产品或代码,该软件就必须也遵循GPL许可协议且开源、免费,因此这个协议并不适合商用软件。遵循该协议的开源软件数量极其庞大,包括Linux系统在内的大多数的开源软件都是基于这个协议的。GPL开源许可协议最大的4个特点:**复制自由:**允许把软件复制到任何人的电脑中,并且不限制复制的数量;**传播自由:**允许软件以各种形式进行传播;**收费传播:**允许在各种媒介上出售该软件,但必须提前让买家知道这个软件是可以免费获得的;因此,一般来讲,开源软件都是通过为用户提供有偿服务的形式来盈利的;**修改自由:**允许开发人员增加或删除软件的功能,但软件修改后必须依然基于GPL许可协议授权。 | |
BSD(Berkeley Software Distribution,伯克利软件发布版)许可协议:用户可以使用、修改和重新发布遵循该许可的软件,并且可以将软件作为商业软件发布和销售,前提是需要满足下面3个条件:1:如果再发布的软件中包含源代码,则源代码必须继续遵循BSD许可协议;2:如果再发布的软件中只有二进制程序,则需要在相关文档或版权文件中声明原始代码遵循了BSD协议;3:不允许用原始软件的名字、作者名字或机构名称进行市场推广。 | |
Apache许可证版本(Apache License Version)许可协议:在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由。该许可协议适用于商业软件,现在热门的Hadoop、Apache HTTP Server、MongoDB等项目都是基于该许可协议研发的,程序开发人员在开发遵循该协议的软件时,要严格遵守下面的4个条件:1:该软件及其衍生品必须继续使用Apache许可协议;2:如果修改了程序源代码,需要在文档中进行声明;3:若软件是基于他人的源代码编写而成的,则需要保留原始代码的协议、商标、专利声明及其他原作者声明的内容信息;4:如果再发布的软件中有声明文件,则需在此文件中标注Apache许可协议及其他许可协议。 | |
MPL(Mozilla Public License,Mozilla公共许可许可协议:相较于GPL许可协议,MPL更加注重对开发者的源代码需求和收益之间的平衡。 | |
MIT(Massachusetts Institute of Technology)许可协议:目前限制最少的开源许可协议之一,只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,因此普遍被商业软件所使用。 |
如前所述,GPL 也是合乎 Open source 所定义的授权之一,只是它更着重于保护自由软 件本身的学习与发展就是了!那如果你想要开发开源软件时, 到底使用哪种授权比较好呢? 其实跟你对这个软件的未来走向的定义有关啦!简单的来说,如果你的软件未来你允许它用于商业活动中, 可以考虑 BSD 之类的授权,如果你的软件希望少一些商业色彩,GPLv2 大 概是不二选择啰!那如果你的软件允许分支开发, 甚至可以考虑分成两种版本分别授权哩!
# 专属软件/专利软件
相对于Open Source的软件会释出源代码,Close source的程序则仅推出可执行的二进制程序 (binary program)而已。 这种软件的优点是有专人维护,你不需要去更动他;缺点则是灵 活度大打折扣,使用者无法变更该程序成为自己想要的样式! 此外,若有木马程序或者安全 漏洞,将会花上相当长的一段时间来除错!这也是所谓专利软件(copyright)常见的软件出售方式。
虽然专利软件常常代表就是需要花钱去购买,不过有些专利软件还是可以“免费”提供使用的!免费的专利软件代表的授权模式有:
Freeware: http://en.wikipedia.org/wiki/Freeware 不同于Free software,Freeware为“免费软件”而非“自由软件!”虽然它是免费的软件,但是不见得要公布其源代码, 端看发布者的意见啰!这和Open Source差别很大哦!此外,目前很多标榜免费软件的程序很多都有小问题! 例如假藉免费软件的名义,实施使用者数据窃取的目 的! 所以“来路不明的软件请勿安装!”
Shareware: http://en.wikipedia.org/wiki/Shareware 共享软件这个名词就有趣了!与免费软件有点类似的是,Shareware在使用初期,它也是免费的,但是, 到了所谓的“试用期限”之后,你就必须要选择“付费后继续使用”或者“将它移除”的宿命~ 通常,这些共享软件都会自行撰写失效程序,让你在试用期限之后就无法使用该软件。