一天一点学习Linux之开源软件及其相关组织

来源:岁月联盟 编辑:exp 时间:2011-10-11

开源软件及其特点

 

开放源化码软件(Open Source Software, OSS)简称开源软件,是指一种公开源代码的软件。用户可以修改、使用、复制、分发软件的源代码。

 开源软件的特点:开源软件一般是免费发布的,你可以在Internet上自由下载,用户无需缴纳License费用。开源软件由一个核心组织领导,通常由一个很大的社区在Internet上协作开发完成。这种“集市”式的开发模式使其通常有着比封闭源代码软件更高的质量。用户可以得到软件的源代码,更容易根据自己的特殊要求进行定制。开源软件的生命周期不依附于某个公司,因此有更强的生命力。

 

 

 

 

 

>GNU计划的发展

 

Richard Mathew Stallman(史托曼)在1984年发起的GNU计划,对于现今的自由软件风潮, 有着不可磨灭的地位。这个计划的目的是:建立一个自由、开放的Unix操作系统(Free Unix)。但是建立一个操作系统谈何容易啊?而且在当时的GNU是仅有自己一个人单打独斗的史托曼, 这实在太麻烦,但又不想放弃这个计划,于是聪明的史托曼干脆反其道而行,既然操作系统太复杂,我就先写可以在Unix上面运行的小程序。在这个想法上,史托曼开始参考Unix上面现有的软件,并依据这些软件的作用开发出功能相同的软件,且开发期间史托曼绝不看其他软件的原始码, 以避免吃上官司。后来一堆人知道免费的GNU软件,并且实际使用后发现与原有的专利软件也差不了太多,于是便转而使用GNU软件,于是GNU计划逐渐打开知名度。但是能见度还是不够,这时史托曼又想:不论是什么软件, 都得要进行编译成为二进制文件(binary program)后才能够执行,如果能够写出一个不错的编译程序,那不就是大家都需要的软件了吗? 因此他便开始撰写C语言的编译程序,那就是现在相当有名的GNU C Compiler(gcc)!C语言编译程序版本众多,但都是专利软件, 如果他写的C编译程序够棒,效能够佳,那么将会大大的让GNU计划出现在众人眼前!

 

但开始撰写GCC时并不顺利,为此,他先转而将他原先就已经写过的Emacs编辑器写成可以在Unix上面跑的软件,并公布原始码。Emacs是一种程序编辑器,他可以在用户撰写程序的过程中就进行程序语法的检验,此一功能可以减少程序设计师除错的时间! 因为Emacs太优秀了,因此,很多人便直接向他购买。

 此时因特网尚未流行,所以,史托曼便借着Emacs以磁带(tape)出售,赚了一点钱 ,进而开始全力撰写其他软件。并且成立自由软件基金会(FSF, Free Software Foundation),请更多工程师与志工撰写软件。终于还是完成了GCC。此外,他还撰写了更多可以被呼叫的C函式库(GNU C library),以及可以被使用来操作操作系统的基本接口BASH shell! 这些都在1990年左右完成了!

 

到了1985年,为了避免GNU所开发的自由软件被其他人所利用而成为专利软件, 所以他与律师草拟了有名的通用公共许可证(General Public License, GPL), 并且称呼他为copyleft(相对于专利软件的copyright!)。

 在这里,必须要说明的是, 由于有GNU所开发的几个重要软件,如:Emacs、GNU C (GCC)、GNU C Library (glibc)、Bash shell造成后来很多的软件开发者可以藉由这些基础的工具来进行程序开发, 进一步壮大了自由软件团体。不过,对于GNU的最初构想 『建立一个自由的Unix操作系统』来说,有这些优秀的程序是仍无法满足, 因为,当下并没有自由的Unix核心存在,所以这些软件仍只能在那些有专利的Unix平台上工作,一直到Linux的出现…

 

1984年创立GNU计划与FSF基金会的Stallman先生认为,写程序最大的快乐就是让自己发展的良好的软件让大家来使用了, 而既然程序是想要分享给大家使用的,不过,每个人所使用的计算机软硬件并不相同, 既然如此的话,那么该程序的原始码(Source code)就应该要同时释出, 这样才能方便大家修改而适用于每个人的计算机中呢?这个将原始码连同软件程序释出的举动,就称为自由软件(Free Software)运动。

 

此外,史托曼同时认为,如果你将你程序的Source code分享出来时,若该程序是很优秀的,那么将会有很多人使用, 而每个人对于该程序都可以查阅source code,无形之中,就会有一群人帮助除错, 这支程序将会越来越壮大,越来越优秀。

 而为了避免自己的开发出来的Open source自由软件被拿去做成专利软件, 于是Stallman同时将GNU与FSF发展出来的软件,都挂上GPL的版权宣告。这个FSF的核心观念是:版权制度是促进社会进步的手段, 版权本身不是自然权力。

 

为什么要称为GNU呢?其实GNU是GNU’s Not Unix的缩写,意思是说,GNU并不是Unix啊!那么GNU又是什么呢? 就是GNU’s Not Unix嘛!…..如果你写过程序就会知道,这个GNU = GNU’s Not Unix可是无穷循环!

 另外,什么是Open Source呢?所谓的source是程序发展者写出的源代码,Open Source就是,软件在发布时,同时将作者的原始码一起公布的意思。

 

GPL(GNU General Public License, GPL)

 

 

 

GPL由斯托曼撰写,用于GNU计划。它以GNU Emacs、GDB、GCC的许可协议的早期版本为蓝本。这些许可协议都包含有一些GPL的版权思想,但仅只针对特定程序。斯托曼的目标就是创造出一种四海之内皆可使用的许可协议,这样就能为许多源代码共享计划带来福音。GPL版本1就这样,在1989年1月诞生。

 

到1990年时,因为一些共享库而出现了对比GPL更宽松的许可协议的需求。所以当GPL版本2在1991年6月发布时,另一许可协议——库通用许可协议(Library General Public License,简称LGPL)也随之发布,并记作“版本2”以示对GPL的补充。版本号在LGPL版本2.1发布时不再相同,而LGPL也被重命名为GNU宽通用公共许可协议(Lesser General Public License)以体现GNU哲学观。

 

为什么要将自由软件挂上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)的软件。 史托曼进一步说明了自由度的意义是: 使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件。

 

一个软件挂上了GPL版权宣告之后,他自然就成了自由软件,这个软件就具有底下的特色:

 o 取得软件与原始码:你可以根据自己的需求来执行这个自由软件;

 o 复制:你可以自由的复制该软件;

 o 修改:你可以将取得的原始码进行程序修改工作,使之适合你的工作;

 o 再发行:你可以将你修改过的程序,再度的自由发行,而不会与原先的撰写者冲突;

 o 回馈:你应该将你修改过的程序代码回馈于社群!

 但请特别留意,你所修改的任何一个自由软件都不应该也不能这样:

 o 修改授权:你不能将一个GPL授权的自由软件,在你修改后而将他取消GPL授权~

 o 单纯贩卖:你不能单纯的贩卖自由软件。

 

很多人还是有疑问,目前不是有很多Linux开发商吗?为何他们可以贩卖Linux这个GPL授权的软件? 原因很简单,因为他们大多都是贩卖售后服务。所以,他们所使用的自由软件, 都可以在他们的网站上面下载(当然,每个厂商他们自己开发的工具软件就不是GPL的授权软件了!)。 但是,你可以购买他们的Linux光盘,如果你购买了光盘,他们会提供相关的手册说明文件, 同时也会提供你数年不等的咨询、售后服务、软件升级与其他协力工作等等的附加价值。所以说,目前自由软件工作者,他们所赖以维生的,几乎都是在服务这个领域。 毕竟自由软件并不是每个人都会撰写,有人有需要你的自由软件时,他就会请求你的协助,此时,你就可以透过服务来收费。从这个角度上来说, 自由软件确实还是具有商业空间的!

 

那么GPL 对于自由软件的作者有何优点:

 o 软件安全性较佳;

 o 软件执行效能较佳;

 o 软件除错时间较短;

 o 贡献的原始码永远都存在。

 

这是因为既然是Open Source的自由软件,那么你的程序代码将会有很多人帮你查阅, 如此一来,程序的漏洞与程序的优化将会进展的很快。所以,在安全性与效能上面, 自由软件一点都不输给商业软件。此外,因为GPL授权当中,修改者并不能修改授权, 因此,你如果曾经贡献过程序代码,那么你也将名留青史!

 

自由软件基金会FSF(Free Software Foundation)

 

是一个推广自由软件的美国民间非盈利性组织,致力于消除对计算机程序在复制、分发、理解和修改方面的限制。 许多组织都在分发所有可以获得的自由软件。与之不同的是,自由软件基金会致力于开发新的自由软件,以及将这些软件构造成为一个协调一致的系统,这样的系统将彻底消除使用私有软件的必要。 它于1985年10月由理查德·斯托曼建立。其主要工作是执行GNU计划,开发更多的免费、自由以及可自由流通软件。 从其建立到1990年代中自由软件基金会的基金主要被用来雇用编程师来发展自由软件。从1990年代中开始写自由软件的公司和个人太多了,因此自由软件基金会的雇员和自愿者主要在自由软件运动的法律和结构问题上工作。

 

OSI、FSG和OSDL

 

开放源代码促进会OSI(Open Source Initiative)是发起、认证和保护开源软件的非营利性组织。开源代码的官方网站是:http://www.opensource.org/。

 自由标准组FSG(Free Standards Group)是致力于制定开源软件工业标准的非盈利的国际开源组织。其下设立了多个标准工作组,每个工作组负责特定标准的制定。最著名的是LSB(Linux Standard Base)。FSG的官方站点是http://www.freestandards.org/。

 开源发展实验室OSDL(Open Source Development Labs)是由大型IT企业支持创建的国际非盈利组织。OSDL一直致力于推广开源软件在行业中的典型应用。OSDL的官方站点是http://www.osdl.org/。

 

POSIX

 

Unix 1969 年诞生于AT&T 贝尔实验室,并在1973 年使用C 语言进行了重写,从此就具有了很好的可移植性。但是当AT&T 在1984 年由于分拆而得以进入计算机领域的市场之后,却引发了Unix 业界的一场大战。当时最为主要的两个版本是AT&T 的System V 和伯克利的BSD。二者在技术方面(例如终端)和文化方面都存在很多分歧,导致应用程序很难在不同的系统上平滑地进行移植,为了解决这个问题,IEEE(Institute of Electrical and Electronic Engineers)的1003 委员会着手开发了一系列标准,这就是后来的POSIX(Portable Operating System Interface for UNIX)标准。其目的是为那些兼容各种UNIX 变种的应用程序制定应用程序编程接口(API)规范,从而确保这些应用程序的兼容性。这些标准后来被ISO/IEC 采纳,成为ISO/IEC 9945 标准。

 

此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口)的缩写,而X则表明其对Unix API的传承。

 其目的在于提高应用程序在各种Unix操作系统环境之间的可移植性。也就是:使得任何符合POSIX标准的应用程序都可以在重新编译后运行在任何符合POSIX标准的OS上。

 

POSIX

 

 

 

IEEE(Institute of Electrical and Electronics Engineers)电气电子工程师学会

 

是一个建立于1963年1月1日的国际性电子技术与电子工程师协会,亦是世界上最大的专业技术组织之一。

 IEEE定位在“科学和教育,并直接面向电子电气工程、通讯、计算机工程、计算机科学理论和原理研究的组织,以及相关工程分支的艺术和科学”。为了实现这一目标,IEEE承担着多个科学期刊和会议组织者的角色。它也是一个广泛的工业标准开发者,主要领域包括电能、能源、生物技术和保健、信息技术、信息安全、通讯、消费电子、运输、航天技术和纳米技术。在教育领域IEEE积极发展和参与,例如在高等院校推行电子工程课程的学校授权体制。

 

IEEE制定了全世界电子和电气还有计算机科学领域30%的文献,另外它还制定了超过900个现行工业标准。每年它还发起或者合作举办超过300次国际技术会议。IEEE由37个协会组成,还组织了相关的专门技术领域,每年本地组织有规律的召开超过300次会议。IEEE出版广泛的同级评审期刊,是主要的国际标准机构(900现行标准,700研发中标准)。

 

IEEE大多数成员是电子工程师,计算机工程师和计算机科学家,不过因为组织广泛的兴趣也吸引了其它学科的工程师(例如:机械工程、土木工程、生物、物理和数学)。

 

IEEE坐落于美国纽约州,1963年由无线电工程师协会(IRE,创立于1912年)和美国电气工程师协会(AIEE,创建于1884年)合并而成,它有一个区域和技术互为补充的组织结构,以地理位置或者技术中心作为组织单位(例如IEEE 费城分会和IEEE计算机协会)。它管理着推荐规则和执行计划的分散组织(例如IEEE-USA 明确服务于美国的成员,专业人士和公众)。

 

LSB(Linux Standards Base)

 

目前Linux 的发行版非常繁多,为了促进Linux 不同发行版间的兼容性,LSB开发了一系列标准,使各种软件可以很好地在兼容LSB 标准的系统上运行,从而可以帮助软件供应商更好地在Linux 系统上开发产品,或将已有的产品移植到Linux系统上。

 LSB 是Linux 标准化领域中事实上的标准,它的图标(请参看图 )非常形象地阐述了自己的使命:对代表自由的企鹅(Linux)制定标准。给定企鹅的体形和三维标准之后,软件开发者就可以设计并裁减出各色花样的衣服(应用程序),这样不管穿在哪只企鹅身上,都会非常合身

 

LSB图标

在现有标准基础上,LSB 制定了应用程序与运行环境之间的二进制接口,这主要是基于以下标准:
Single UNIX Specification(SUS)
System V Interface Definition(SVID)
compilers for the Intel Itanium processor
C++ ABI
System V Application Binary Interface(ABI)

同时,LSB 充分吸取了 UNIX 标准化努力所取得经验和教训,回避了这些标准的一些问题。例如,POSIX 仅仅定义了编程接口的标准,但是它却无法保证二进制的兼容性。而诸如 OSF/1 之类的标准虽然试图解决二进制兼容性的问题,但是限制却太为严格。LSB 在二者之间达成了一个平衡,它包含了一个二进制兼容层,同时消除了 POSIX 与 OSF/1 之间存在分歧的地方。

LSB对各个库提供的接口以及与每个接口相关的数据结构和常量进行了定义,图2给出了 LSB 3.1 环境中所包含的组件。这些组件包括开发者所需要的共享库(包括 C++),文件系统层次结构(FHS)、对象文件格式、命令和工具、应用程序包、用户和组、系统初始化等所采用的规范:.
LSB规范包含的组件图:

LSB 规范包含的组件
LSB主要版本线路图:
LSB 主要版本的路线图

摘自:羽飞博客