Leojane's World

我的世界

逝者如斯
网志分类
· 所有网志 (46)
· 胡言乱语 (12)
· 执迷计算机 (1)
· Linux最高 (1)
· Debian王道 (1)
· sto UNIX orz (0)
· 网事如烟 (0)
· 爱上层楼 (11)
· :) (6)
· 未分类 (14)
最新评论
搜索本站
友情链接
· 我的歪酷 非非共享界

订阅 RSS

0009369

歪酷博客


Leojane(阿猪) @ 2006-07-13 18:47

开源软件及其许可证

Leojane Zhu
(leojane@gmail.com)

摘要

本文介绍了自由软件、开源软件、以及 GNU 和 FSF 相关 。研究了自由软件、开源软件的历史和意义。分析并对比了自由软件、开源软件以及其他软件。介绍了各种常见的开源软件许可证。分析比较了常见的开源软件许可证。


关键字:自由软件,开源软件,GNU ,FSF ,许可证,GPL,LGPL,BSD,NPL,MPL

Abstract

This paper introduces Free Software , Open Source , and something on GNU and FSF . It studies the history and meanings of Free Software and Open Source . It analyzes and compares Free Software , Open Source and some other software . It describes kinds of usual Open Source Licenses , and compares them .


Keyword:Free Software, Open Source , License , GPL ,LGPL , BSD , NPL , MPL

目录

1  引言
2  自由软件
    2.1  历史——自由软件的诞生
    2.2  GNU 及 FSF
    2.3  Copyleft
3  开源软件
    3.1  开源软件的提出
    3.2  开源软件与自由软件
    3.3  开源软件与其它的对比
4  常见的开源软件许可证
    4.1  GPL
    4.2  LGPL
    4.3  BSD 许可证
    4.4  NPL 和 MPL
5  选择许可证
6  展望
7  致谢

1  引言

21世纪是计算机软件业蓬勃发展的世纪。“正版”、“版权保护”、“Copyright”、“专利”等等名词充斥着人们的生活,它们对于人们来说已经不再是晦涩而陌生。人们关于知识产权的意识日益强化加深。
然而,这些词汇却往往是与私有商业软件密切联系紧紧绑定的。共享此类软件或根据需要对这些软件进行修改,都是不被允许的。因为这违反了它们的版权。
于是,为了反抗这种软件业的“私有制”,本着“自由”的精神,“自由软件”诞生了。我们经常可以听到“自由软件”或“开源软件”的说法,不过它们还是有些差别的。这将在本文中进行阐述。
对于开源软件,人们有着许多的误解与疑惑。有人认为“开源软件”就是“免费、不要钱的”;有人弄不明白“开源软件”的运作模式;有人认为,“开源软件”其实就是软件界的乌托邦,不可能长久……
虽然有很多来自各方面(主要是私有商业软件界)的误解、质疑和攻击,但事实却是——开源软件一直走在计算机软件业的最前沿,并且一直在蓬勃茁壮地发展着。
为了澄清关于开源软件的事实,分析开源软件得以成功得以蓬勃发展的原因,我们决定研究开源软件及其许可证。为此,我们学习研究了一些著名的开源软件项目,诸如 Linux [1], Apache [2], Mozilla [3] 等 ;阅读了一些关于开源文化的文献,譬如著名的 《The Cathedral and Bazaar》 [4],《Rebel Code》 [5],《Open Sources》[5] 等;学习了几种著名的开源软件的许可证并对它们进行了分析和比较。
本文的组织安排如下:第一部分,引言;第二部分,讨论自由软件,介绍它的历史、含义和 Copyleft 的概念;第三部分,介绍开源软件,介绍开源软件的提出,开源软件的含义,开源软件与自由软件及其他软件的区别;第四部分,介绍常见的开源软件许可证;第五 部分,介绍开源软件许可证的选择。

2  自由软件

2.1  历史——自由软件的诞生

让我们先从一个有趣的故事开始。20世纪70年代,激光打印机大得像吉普车一样,所以 Xerox(施乐)送了一台图像激光打印机给 MIT 人工智能实验室时,人们发现惟有人工智能实验室的九楼机房里,才找得到位置放置它。在大楼里的所有人,只要在各自的电脑上打些指令,便能叫打印机为你服 务。打印机的速度令人满意,只是,有时纸打印完了或者夹纸了,一大堆人的打印工作队列就全部停了下来。有时有些人要打印一大堆的东西,而有些人只需要打印 一两张的时候,便不得不爬上九楼,把打印机的控制改一下,让它先印一两张。于是,一天就这样爬上爬下,没人能受得了。幸好打印机送来时,Xerox 把驱动程序的源代码也随机附上,实验室的人就把控制打印机驱动程序的功能作了些修改,大家都省了不少麻烦。Richard Stallman,就是后来被人们称为“自由软件之父”的那个人,回忆当时的情形时说:“你的打印工作做完后,它还会通知你;如果夹了纸或你想问些什么打 印上的事情,它也会让你知道。”然而,到了1978年,一切都改变了。Xerox送了一台名为 Dover 的新打印机给人工智能实验室,但不愿再附上源代码。Richard Stallman 说:“因此我们无法修改驱动程序,于是整个大楼的打印效率又回到了从前,卡了纸或纸用光了,你在下面也无法知道。”他和人工智能实验室为给打印机添加功能 以便机器能更好地工作,希望获得打印机控制程序的源代码,结果被严正拒绝。“因此,我再也无法说服自己不公开协议是纯洁清白的。当他们拒绝与我们共享时, 我十分气愤。我更不能更弦改辙,对别人做同样的事。”Richard Stallman 如是说。[7]
此时,两种选择摆在了 Richard Stallman 的面前:第一种,非常简单,即是加入专有软件世界,签署不公开协议,并许诺不帮助同行的黑客同事们。这样做的结果很可能是,他也开发软件,而且软件也以不 公开的协议的形式发布,从而对其他不愿意背叛同伴的人进一步施加压力。他可能由此而发财,且也能从编写代码中获得乐趣。但正如他自己所说:“(如果我这样 做的话,)当我的职业生涯结束时,我回过头来看到的景象将是这些年来筑起高墙林立,并将人们分隔开来,我会觉得自己的一生努力的结果会把这个世界搞得更 糟。”[8] 第二种选择,很直接也很令人不快,那便是离开计算机领域。这样一个天才的技能便不会被滥用,但这个天才的才华便从此埋没。他自己不会成为分隔、限制计算机用户的帮凶,但这个世界上的分隔和限制依旧发生。
因此,Richard Stallman 希望寻求一种解决方案,使他自己能作为一名程序员能够做些好事,他问自己:“我能否写一个或一些程序,能使我珍视的群体重焕生机?”
答案是清楚的——最急需的首先是一个操作系统。这是使用计算机的关键,有了操作系统,可以做许多事情;没有操作系统,连计算机都使用不了。而一个自由的操 作系统,便可以再度组织拥有一个相互合作的黑客群体,并且进一步邀请其他前任何人参与进来。每个人都可以安心地使用计算机而无须变成剥夺自己朋友权益的同 谋。
作为一名操作系统开发人员,Richard Stallman 无疑是最胜任的。他决定将系统设计成与 UNIX 兼容以便移植,同时也便于 UNIX 用户移民到这一新的操作系统上来。按照黑客的传统,Richard Stamllman 选择了 GNU 这个名字, GNU 是“Gnu's Not Unix”的递归缩略词。
一个操作系统,不仅仅意味着一个只能运行其他程序的内核,还得包括命令解释器、汇编器、编译器、解释器、调试器、文本编辑器和电子软件包等。
思想比代码更闪光,但没有代码,思想便没有了躯体。随着 GNU 工程的启动,Richard Stallman 开始了自由软件的征途。

2.2  GNU 及 FSF

1984年1月,Richard Stallman 辞去了 MIT 的工作,他担心 MIT 会要求产品的所有权,会给产品强加入自己的销售条件,最终又成为私有软件。
1984年9月,Richard Stallman 开始 GNU Emacs 的开发。1985年初, GNU Emacs 便可以开始使用了。很快,大受欢迎。
随着人们对 Emacs 的兴趣日益增加,其他人也开始参与 GNU 工程。1985年,一个新的基金会——自由软件基金会(Free Software Foundation, FSF)成立了。这是一个完全致力于自由软件开发的免税的福利机构(捐助 FSF 的厂商也可享有减税待遇)。FSF 接受捐赠,但它的绝大多数收入来源于销售自由软件拷贝以及其他服务。

2.3  Copyleft

我 们已经谈论了很多自由软件相关的事情,但还没有给出自由软件的明确定义。Free Software 这种术语,由于英语 free 一词有二义,因此常常被误解——事实上它和价格毫无关系,这里 free 的含义是自由。这是由自由软件的定义所决定的。对于特定的用户来说,如果某个程序被称为自由软件,那么:
  • 你拥有运行该程序的自由,而且可以用于任何目的。
  • 你拥有修改程序以适应你个人需要的自由。(为了在实践中使这一自由成为可能,你必须能够获得源代码,因为没有源代码而试图修改程序是极端困难的。)
  • 你拥有再发行拷贝的自由,可以是无偿的,也可以是收费的。
  • 你拥有发行该程序修改后版本的自由,从而使社区可以从你所做的改进中获益。
GNU 的目的是给用户以自由,而不仅仅是为了争取大量的用户.因此,必须使用某种发行条件,以避免将 GNU 软件变为专有软件。Richard Stallman 使用的方法称为“Copyleft”(非盈利版权)1
Copyleft 利用了版权法,但反其道而行之,以达到与通常相反的目的:将一种将软件私有化的手段转变成了保持软件自由的手段。
Copyleft 的中心思想是,给予任何人运行、拷贝、修改以及发行改变后程序的许可,但不准附加他们自己的限制。从而保证了每个人都有获得“自由软件”的软件拷贝的自由,它们成为了不可异化的权力。
一个相关问题涉及到将自由的程序与不自由的代码相组合。这样的组合将不可避免地失去自由性。因 此,Copyleft 的一个关键要求是封堵这一漏洞:任何添加或者组合到自由软件上的部分都不允许附加其他限制,从而保证其结果的整体是自由的,版权所无的 (Copylefted)。
GPL(GNU General Public License,GNU 通用公共许可证)是 Copyleft 的一种典型的实现形式。(关于 GPL ,本文第四部分将详细介绍论述。)

3  开源软件

3.1  开源软件的提出

开源软件首次作为政策性文件出现在 Debian GNU/Linux 发行版2上。 由于 Debian 在定义什么是自由上存在一些问题,后来其他的软件许可证再也没有将自由软件的政策定义得很明确。1997年7月,Bruce Pernes 作为 Debian 的项目主管,通过起草 《Debian Social Contract》和《Debian Free Software Guidelines》来解决存在的问题。Debian Social Contract 规定了 Debian 系统完全建立在自由软件的基础上; Debian Free Software Guidelines 则通过将指南与软件许可证进行比较,很容易地划分自由软件和非自由软件。[9]
1998年,受 Eric Raymond《The Catgedral and Bazaar》[4] 的影响,Netscape 打算开放源代码。Netscape 向他请教,在不对外公开的前提下,他们设计了一个自由软件许可证。Raymond 力争让 Netscape 的许可证按照 Debian 的指南来做,使软件成为一个严格的自由软件。
Raymond 认为,Debian Free Software Guidelines 是一个正确定义“开源软件”的文件,但它需要一个更通俗的名字,再除去些 Debian 的专业术语。
之后,Pernes 与 Raymond 组建了 Open Source Initiative(OSI),它是一个专门管理开源软件运动及其认证标志的组织。开源软件定义(Open Source Definition ,OSD)正是由他们管理着并发扬促进着。OSD 是作为判定一个软件是否可以被称做开源软件的指南。OSD 规定了开源软件的九条标准:
  1. 自由再发行。许可证不能限制任何团体销售和赠送软件,软件可以是几个不同来源的程序集成后的软件 发行版中的其中一个原件。许可证不能要求对这样的销售收取许可证费或其他费用。
  2. 程序源代码。程序必须包含源代码。必须允许发行版在包含编译形式的同时也包含程序源代码。当产品 以某种形式发行时没有包含源代码,必须非常醒目的告知用户,如何通过 Internet 免费的下载源代码。源代码必须是以当程序员修改程序时优先选用的形式提供。故意地扰乱源代码是不允许的。以预处理程序或翻译器这样的中间形式作为源代码也是不允许的。
  3. 派生程序。许可证必须允许更改或派生程序。必须允许这些程序按与初始软件相同的许可证发行。
  4. 作者源代码的完整性。只有当许可证允许在程序开发阶段,为了调整程序的目的将“修补文件”的发行版与源代码一起发行时,许可证才能限制源代码以更改后的形式发行。许可证必须明确地允许按更改后的源代码所建立的程序发行。许可证可以要求派生的程序使用与初始软件不同的名称 或版本号。
  5. 无个人或团体的歧视。许可证不能都有针对任何个人或团体的歧视。
  6. 无领域歧视。许可证不能限制在专门奋斗领域内的任何人使用该程序。例如不能限制程序应用于商业领 域,或者应用于遗传研究。
  7. 许可证发行。伴随程序所具有权力必须适用于所有的程序分销商,而不需要这些团体之间再附加许可证 签字盖章。
  8. 许可证不能特指某个产品。如果程序是某个特殊的软件发行版中的一部分,伴随该程序所具有的权力不能只以来于这一发行版。如果程序是从那一发行版中摘录出来的,使用或发行时用的都是那个程序的许可证,分销程序的所有团体都应拥有与初始软件版所允许的所有权力。
  9. 许可证不能排斥其他软件。许可证不能限制随该许可证软件一起发行的其他软件。例如,许可证不能要求所有与之一起发行的其他软件都是开源软件。

3.2  开源软件与自由软件

通过前面对自由软件和开源软件的介绍,我们已经可以看出它们间的区别来了。开源软件与自由软 件,可以说是同一社区的不同阵营。它们在商业性、许可证等原则性问题上不一致——自由软件对商业化极度不友好,对许可证的要求非常严厉,而开源软件则显得 宽容得多。例如,开源软件可以使用私有库,而这在自由软件里是不被允许的。开源项目 KDE 使用 Qt 的库直到2000年9月都是属于私有库。但在大多数实践过程中,二者却是高度一致的——例如:源代码可用、源代码可修改等。
以 Richard Stallman 为代表的一些人认为,开源软件的提法,忽视了 GNU 工程的原则精神,而是将词义着重于创造强大的、高质量软件的潜力,回避了自由、社会和原则这些概念。因此,GNU 工程将继续使用“自由软件”这一名词,以表示自由、而不仅仅是技术,才是重要的。
但另一方面,一些人认为——我们看到且不得不承认——开源软件的做法,更能吸引公司经理和商业用户们的眼球,使之更具有竞争力,在市场中也更具有发展潜力。
更多的时候,人们倾向于接受这种说法:开源是一种将自由软件变得更具魅力的市场策略,因为它通过它的许可证(参看第四部分和第五部分)许诺了更多自由[10]。这意味着只要源代码是可用的并且可以是被自由修改的,那么开源许可证就不阻止人们或公司从软件中获利。

3.3  开源软件与其它的对比

前面已经叙述了开源软件与自由软件的区别。不过为了能更好地看清开源软件与其它软件的关系,我 们还要拿其他软件来与之做一些对比(主要是在许可证和发行形式上)。简单地说,有两种主要类型的软件需要与之对比,一种是自由软件(自由软件与开源软件有 交叉,这是说的是属于开源软件的那部分),一种是私有软件。
对于自由软件,又有两种分法。一种是 non-copylefted ,一种是 copylefted 。这种 non-copylefted 自由软件来自于那些允许修改并重发布软件并且在法律上没有声明要保留版权的软件作者们。在这样的情况下,修改过的版本可以被附加更多的限制,这样一些拷贝 (修改过的版本)就也许根本不是自由的了。Public Domain(公共领域)就是 non-copylefted 的一个例子。公共领域的东西可以说成了你的私有财产,当你需要时就可以随意使用,而且你可以做任何你想做的事情。甚至可以不厚道地对它进行再发行,去掉它 原来的公共领域版本,或者删掉作者的名字,把它看作是你自己的作品。通过宣布版权,然后使用你自己的许可证,或只是简单地宣布“保留版权”就可以很容易地 将一个公共领域软件占为己有。自由软件的另一方面,copylefted free software ,却不允许有额外的限制附加到修改过或再发行的软件上。这样,所有的 copylefted 软件,即使是被修改过了,也必须是自由软件。典型的例子就是 GPL 。
私有软件是“关闭(closed)”的软件,因为源 代码对于公众来说是不可用的。私有软件对软件的使用有严格的限制,重发布或是修改等是被禁止的。不过在这类软件中有两种特殊的情况:共享软件 (shareware)和免费软件(freeware)。它们都允许人们去免费下载、使用以及重发布,但修改是几乎不可能的。因为它们通常只是发布了可执 行的(二进制)文件。共享软件与免费软件的一个差别是使用期限。如果想继续使用一个共享软件,必须付许可证费。有一点必须明确,不可将免费软件和开源软件 混淆。修改一个免费软件是不可能的,因为源代码不可用。
根据这些对比介绍,便可以得出如图3-1这样一幅关于软件分类的图,开源软件与其它的关系便一目了然。
Figure
图 3-1: 软件分类

4  常见的开源软件许可证

GNU GPL,LGPL,BSD,NPL 和 MPL 等,都是符合开源软件定义的常见许可证。接下来的篇幅里我们将介绍分析它们。

4.1  GPL

GNU General Public License,简称 GPL 。GPL 既是一个软件许可证,又是一份政治宣言。由于 GPL 在一些法律教授的协助下完成,因而要比其他的同类许可证写得好得多。
GPL 的文本不是 GPL 之下的程序自身。它的许可证很简单:准许任何人复制和发行未经任何改动的许可证文本的拷贝。但对它进行改动是不允许的。开源软件许可证的文本通常不是开源 软件本身,这点很重要。显然,如果任何人都可以修改许可证,那么许可证也就不能提供任何保护了。
GPL 的条款符合开源软件的定义。 GPL 并不需要开源软件定义中的第四点“作者源代码的完整性”中的任何条款。
GPL 不允许私自对程序进行更改。更改后的程序必须在 GPL 之下发行。当然,一个 GPL 化的程序的作者愿意接受别人的改进,包括商业公司为满足自己的需要而进行的更改。
GPL 不允许将 GPL 化的程序合并尽到一个所有权程序中。 GPL 对所有权程序的定义是:许可证中所赋予的权力不如 GPL 多的任何一个程序。
GPL 也存在一些漏洞。它允许适用于不完全都是开源软件的程序中。软件库通常是与编译器或你正在使用的操作系统一起发行的。它可能与一个已经 GPL 化的软件相联系,结果成为一个部分自由的程序。版权所有者通常就是程序的作者,他将 GPL 用于程序上而有权违反他自己的许可证。这就是在 Troll Tech 使 Qt 使用开源软件许可证前,KDE 的作者发行含有 Qt 的程序时所用的手法。但是,这一权力不再扩展到发信程序的第三者,他们必须遵守许可证中的所有条款,包括版权所有者违反的那一条款。这样在分销包含 Qt 的 GPL 化的程序时就出现了问题。

4.2  LGPL

GNU Library General Public License,简称 LGPL ,是 GPL 的派生物。它是为软件库而设计的。与 GPL 不同,LGPL 化的程序可以合并到专有版权程序中。与 Linux 系统一起提供的 C 语言库就是 LGPL 的一个实例。它可被用于建立一个专有版权程序,否则的话 Linux 就只对自由软件作者有用。
LGPL 化的程序可以在任何时候转换成 GPL 化的程序。一旦作出这种转换,就不能再转换回 LGPL ,或由它派生的 LGPL 化的程序了。

4.3  BSD 许可证

BSD 许可证,是 X、Apache、BSD(Berkeley System Distribution)的操作系统项目(FreeBSD、OpenBSD、NetBSD)所采用的。它可以总结为“这里是代码,你想对它怎么做就怎么 做,我们并不在乎,只是你试图这门做并且销售它们时请给我们信用”。通常对信用的要求会在不同形式中出现——广告,或 README 文件,或印刷品文档,等等。它提供了一个从 GPL 中得不到的最重要的许诺——私自对许可证软件进行更改。
从商业角度,这是加入现有项目的最好的一类许可证,因为不用担心将来使用或重新发行时的许可证或限制问题。你可以用自己的专有代码混合并配合该软件,并且仅仅发布你认为有助于项目的那些部分,从而有助于提高你的回报。[11]

4.4  NPL 和 MPL

Netscape Public License,简称 NPL ,是当 Netscape 准备生产他们的 Netscape 浏览器开源软件时开发的。确切地说, Mozilla 才是它的开源版本。 Netscape 为他们自己的产品保留了“Navigator”商标。 NPL 的一个重要的特征是它给予 Netscape 专门的特权,而不包括其他的任何人。当你对他们的软件进行更改后,Netscape 有对这些更改重新发放许可证的特权。他们可将这些更改据为己有,然后再进行改进,却拒绝给你最终的结果。这一条款在当时是必要的,因为当 Netscape 准备加入开源软件时,它与别的公司已经有合同,承诺在非开源软件许可证下向他们提供 Navigator 。
Netscape 又开发了 Mozilla Public License,即 MPL 。MPL 与 NPL 很相似,但不包含循序 Netscape 对别人做的修改再发放许可证的内容。
NPL 和 MPL 都允许私自对软件进行修改。
NPL 是 Netscape 面临特殊的商业环境的时候设计的,对别的软件并不一定非常适合。一些公司采用了 MPL 的变体,这样做便是比较不幸的。然而,NPL 和 MPL 需要保留。因为 MPL 的意义在于,陈述了 GPL 或 BSD 没有提到的某些关键问题。MPL 授权对于“发行”的更改仍以同样 MPL 版权下进行发布,这样使得它可用于返还该项目。“发行”被定义为以源代码发布的文件。这很重要,因为它允许公司增加一个与专有代码库的接口,而不需授权其 他的代码库具有 MPL 版权——只授权该接口具有 MPL 。这样,这个软件可以或多或少地组合到商业软件环境中。

5  选择许可证

当你决定进行一个开源项目的时候,必须面临着选择许可证的问题。选择哪种许可证呢?下面列出的问题需要好好思考。
  1. 你希望别人能够私自对软件进行更改么?如果你要求别人将更改后的程序源代码反馈给你,你就选择像 GPL 或 LGPL 这样满足你要求的许可证。如果你不介意别人私自更改程序,就选择 BSD 这类的允许私自修改的许可证。
  2. 你是否允许一些人将你的软件合并到他们自己的所有权软件中?如果允许就选择 LGPL ,它明确表示允许这样做,但不允许对你的源代码私自进行更改。也可以选择 BSD ,这样就允许了私自修改源代码。
  3. 你希望别人能买到你的有商业许可证的、不是开源软件的版本么?如果希望这样,为你的程序发放两个许可证。建议选择 GPL 作为开源软件许可证。然后选择一种合适的商业许可证。
  4. 你希望所有使用你软件的人都为这一特权付费么?如果希望这样,就不要选择开源软件。如果你满足于有一部分人向你付费就行了,你就可以使你的软件成为开源软件。多数的开源软件作者注重于他们程序贡献给社会后的反映是否良好,而不在乎是否得到了回报。
表5-1结合了许可证实例进行了分析比较。
表 5-1: 许可证实例分析比较
许可证 可以与非自由 可以私自进行   任何人可以再  在别人对软件
  软件合并 更改,而且结 发放许可证 更改后最初的
    果不需反馈给   版权所有人有
    作者   专有的特权
GPL        
LGPL      
BSD    
NPL  
MPL    
公共领域  

6  展望

对于致力于开源软件项目开发的程序员们来说,开源软件是一种信仰,开源软件运动的领袖们为这些程序员描绘了一幅美好的前景;
对于将开源软件集成到企业运作中的那些公司来说,开源软件揭示了开放式开发如何能构建出更好的软件,并揭示了企业如何利用这些开源软件来取得商业竞争上的优势;
对于企业的管理层和投资方来说,开源软件的革命先驱们带来了一种全新的经济模式。
但对开源软件未来最可信的预测正是它的过去:我们已经经历了从开始一无所有,到如今成为软件业一个强壮的巨人,能解决各种不同的问题,达到百万计用户的过程。我们现在没有理由放慢前进的步伐。

7  致谢

在本文的写作过程中,得到了浙江大学飘渺水云间3论坛 OpenSource 版的各位网友的关注和支持,在此对你们表示感谢!特别要感谢 emfox 同学,在文献组织以及论文排版上进行了指导,thank you !

参考文献

[1]
"The Linux Home Page at Linux Online" , http://www.linux.org/ .
[2]
"The Apache Software Foundation" , http://www.apache.org/ .
[3]
"mozilla.org" , http://www.mozilla.org/.
[4]
Eric S. Raymond,《The Catgedral and Bazaar》,O'Reilly&Associates,1999
[5]
G.Moody,《Rebel Code:Linux and the Open Source Revolution》,The Penguin Press,2001
[6]
C.Dibona, M. Stone, S. Ockman,《Open Sources:Voices from the Open Source Revolution》,O'Reilly&Associates,1999
[7]
方兴东,《软件业自由之神——Richard Stallman》,《计算机世界》,1999
[8]
Richard M. Stallman,《The GNU Operating System and the Free Software Movement》,1999
[9]
Bruce Perens,《The Open Sourcde Definition》,O'Reilly&Associates,1999
[10]
Cristina Gacek,Tony Lawrie,and Budi Arief,《The many meanings of Open Source》,2004
[11]
Brian Behlendorf,《Open Source as a Business Strategy》,O'Reilly&Associates,1999

Footnotes:

1在1984 和1985年,Don Hopkins 给 Richard Stallman 寄了封信,信封上有写着“版权所无——所有权力都被逆转(Copyleft-all rights reversed)”。于是 Richard Stallman 就决定用 Copyleft 来命名当时正考虑的软件发行的概念。
2Debian 是 Linux 系统的早期版本,是 Linux 发行版中最为流行的版本之一。他完全建立在自由软件的基础上。
3飘渺水云间:freecity.cn


File translated from TEX by TTH, version 3.67.
On 28 Jun 2006, 18:00.



 
Leojane(阿猪) @ 2006-06-01 01:55

让我们来交换 GNUPG Key 吧~!
发信人: Leojane (阿猪), 板面: LinuxApp
标 题: 让我们来交换 GNUPG Key 吧~!
发信站: 飘渺水云间 (Sat May 27 16:21:05 2006), 转信

你肯定在小说或电视剧里看到过类似以下的情节 :
女主角托人送信给男主角,而男主角呢,却是个傲气多疑的孤居世外的隐者;
于是女主角会附上一块玉佩,然后告之送信者,让他看这块玉佩,他便会相信你了。果
然,男主角见玉佩如见女主角其人,于是,那尘封记忆、昔日柔情,便栩栩如生历历在目
,不禁黯然神伤……(省略若干情节)末了,男主角也会回信一封,并附上木瓜一枚,希望
女主角也能见其物如见人……( 其实男女主角,反之亦然啊亦然 )

厄,搞这个噱头扯这个故事呢无非是想引出这么一个词——“信物”。“信物”有何用?
可以让人确定随“信物”一同到来的事物的来源是可靠的——确实出自“信物”的主人。
GNUPG Key 其实就是这样一种“信物”。

如今我们使用计算机与网络,很重要的应用之一就是与人通信,如 : 收发电子邮件。
有没有想过若有人冒用你的 Email 发送邮件,那对你的个人信誉来说,将是多大的威胁
呢?或者,你收到的 Email 并不是你所认识的那个发信人所发的,这样,如果你与那发
信人之间正在商谈机密或进行某种交易的话,那将是多么可怕 ? 因此,一种“信物”
便呼之欲出了——它就是 GNUPG 。

GNUPG 的主要功能是数字签名与加密。数字签名可以解决上述的问题 ,加密则是对邮件
内容进行加密。要知道,当你点下发送按钮发送出你的邮件的时候,你发送的其实是张
“明信片”,每个人都可能来 tk 一下;而且,传送出去的文件也是可以被截取或复制的
。 因此,在一些情况下我们需要加密。下面就正式介绍 GNUPG 。

GNUPG (The GNU Privacy Guard , 简称GPG )是用来加密数据与制作证书的一套工具,
是OpenPGP标准的一种完全的自由的实现。稍微提一下 PGP,简而言之,它是一种比较成熟
的加密方法,而且相当之安全,以至于成为了美国政府严格禁止传入中国的计算机产品。
感谢 GNU 和自由软件运动,让我们可以使用 GNUPG,它的安全性与 PGP 一样强, 可以充
分地保护每个用户的隐私。GNUPG 使用非对称加密算法,安全程度比较高。所谓非对称加
密算法,就是每一个用户都拥有一对密钥: 公钥和私钥;如果用公钥对数据进行加密只能
用相应的私钥解密;如果用私钥进行加密,只能用相应的公钥解开。由于加密和解密是用
不同的两个密钥,所以是“非对称”的。私钥由用户保存,公钥则由用户尽可能地散发给
其他人。数据加密的实现是这样的 : 其他人用你的公钥加密他们要发给你的内容,你用你
的私钥解密 ;身份认证的实现是这样的 : 你用你的私钥加密能表明你身份的数据,接收
者用你的公钥解密,并进行核对来确认你的身份。以下以 Debian GNU/Linux 的环境为例
,说明如何使用。(有GPG4WIN的,2006-04-26 Gpg4win 1.0.1 released )

倘若木有安装 GNUPG,那么
apt-get install gnupg gnupg-doc

生成key , 命令是
gpg --gen-key


然后会让做一些选择:
选择你想要的密钥类型(一般使用缺省)
选择密钥的大小(推荐2048,据说1024不够用了)
选择密钥的有效期(永久无妨)

接着便是输入姓名, Email 以及确认了。然后会有个输入密码的过程为了是保护私钥。
最后是密钥的产生。这个过程要求你对键盘、鼠标什么的有些动作,这样可以产生出一
个好的 GNUPG Key 。

产生出一个新的 GNUPG Key之后,最好立即生成一个GNUPG撤销凭证(Revoke Certificate)

当你发布了你的 GNUPG Key后,别人就会用你的 Key 确认你发出的文件或加密只想让你看
的内容,因此你的私钥很重要。如果你不幸忘了 Key 的密码串(passphrase) 或者遗失了
Key ,你就不阅读加密了的文件。更甚者,如果你的Key被人盗去了,别人就可以冒认你发
出有问题的文件或档案,令你可能负上法律上的责任。妥善保护你的 Key 固然最重要,但
你也要为万一不幸的事作预备。一般的做法是你要事前先产生一个撤销凭证 (Revoke
Certificate) ,当你的 Key 不幸被盗去或遗失了后,你就可以用这撤销凭证去宣告原先
的 GNUPG Key 无效。

用这个命令
gpg --output revoke_filename --gen-revoke name


确认要产生一份撤销凭证
选择撤销的原因
描述撤销的原因
再次确认
输入密码串

于是你的撤销凭证己存放在档案 revoke_filename 中,请将之存放在安全的地方。

接着便是要公布你的 Key 了。不过先别急着 upload ,看看是否先 download 别
人的 Key 。

~/.gnupg/gpg.conf 里加上
keyserver-options honor-http-proxy
那么便可以直接用命令行的代理了。

譬如我现在要下载 emfox 的 Key :
export http_proxy="http://*.*.*.*:****"
gpg --keyserver hkp://subkeys.pgp.net --recv-keys 0xF7142EC2

如果 download 木有问题,那么就可以 upload 了。譬如我现在要上传我的 Key :
gpg --keyserver hkp://subkeys.pgp.net --send-keys 0x4D301DBA

于是,差不多了,可以准备交换了。

有个名词叫做 GNUPG Key Signing Party ,这便是让一群 GNUPG 使用者面对面地聚集
在一起(注意哦,一定要面对面的哦!) ,互相确认对方并交换 Key ,扩充 GNUPG WOT
。啥是 WOT ? 那便是 Web Of Trust (信任网络)。
The thawte Web of Trust (WOT) is a Certification system that allows your
identity to be validated for use in your Personal Certificate.
GNUPG 规定了信任模型 ,GNUPG 根据现有的签名和“主人的信任度”来决定 Key 的真实
性。主人信任度是 Key 的主人用来决定对别的某 Key 的信任程度的一个值。这个值可以

* 1 = 我不知道
* 2 = 我不信任
* 3 = 我勉强信任
* 4 = 我完全信任

如果用户不信任一个签名,可以就这么说,因而将弃这个签名不用。这些信任信息不是存
在储存 Key 的文件里,而是存在另一个文件里。
一般见过面的即为完全信任,网上了解较深的勉强信任 。一份 key 要被公众信任,必须
满足信任模型要求的个数的条件。WOT 是信任传递的 。因此必须遵照“亲自参加,面对面
”的规则,才不会破坏信任链。

那么,交换 Key 需要准备些什么呢?
* 你自己本人。你必须到场并证明你是 GNUPG Key 的拥有者。
* 证明你个人身份的证明文件,例如身份证、驾驶执照或护照等。
* 多张印有你 GNUPG Key 识别号(key id)、十六进制钥匙指纹(hex fingerprint)、
类型(key type)和大小(key size)等资料的小纸条。( Debian使用者可以使用包
signing-party 里的指令 gpg-key2ps 协助产生这些纸条 )
* 笔

然后呢,就是进行身份证明,证明自己就是自己。接着便可以分发印有自己 Key 的小纸
条了。

值得一提的是,参加这个 GPG Key Signing Party 呢是不允许笔记本电脑一类的出现的
。因为电脑是一种很“危险”的东西。例如,它可以伪造程序,生成“假”的 Key ;或者
伪造 Key Server ,诸如此类。

在得到了别人给的 Key 之后就需要确认签署。首先从 Key Server 下载需要签署的 Key
;然后核对资料,看小纸条上的与你得到的信息是否一致 ; 确认无误后便可以签署了。
以下是一个签署过程的例子 :

leojane@debian:~$ gpg --recv-keys 0xf7142ec2
gpg: 下载密钥‘F7142EC2’,从 hkp 服务器 subkeys.pgp.net
gpg: 密钥 F7142EC2:“Emfox Zhou (WeiZhou) <emfoxzhou@gmail.com>”未改变
gpg: 合计被处理的数量:1
gpg: 未改变:1
leojane@debian:~$ gpg --edit-key f7142ec2
gpg (GnuPG) 1.4.3; Copyright (C) 2006 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.


pub 1024D/F7142EC2 创建于:2005-09-16 有效至:永不过期 可用于:SC
信任度:未知 有效性:未知
sub 2048g/13F38C55 创建于:2005-09-16 有效至:永不过期 可用于:E
[ 未知 ] (1). Emfox Zhou (WeiZhou) <emfoxzhou@gmail.com>

命令> check
uid Emfox Zhou (WeiZhou) <emfoxzhou@gmail.com>
sig!3 F7142EC2 2005-09-16 [自身签字]
有 2 份签字因为遗失密钥而未被检查

命令> fpr
pub 1024D/F7142EC2 2005-09-16 Emfox Zhou (WeiZhou) <emfoxzhou@gmail.com>
主钥指纹: 7E74 053E 142D B9CC 3131 11B8 F8C4 1B2C F714 2EC2

命令> sign

pub 1024D/F7142EC2 创建于:2005-09-16 有效至:永不过期 可用于:SC
信任度:未知 有效性:未知
主钥指纹: 7E74 053E 142D B9CC 3131 11B8 F8C4 1B2C F714 2EC2

Emfox Zhou (WeiZhou) <emfoxzhou@gmail.com>

您真的确定要签字这把密钥,使用您的密钥
“Leojane Zhu (Lijuan Zhu) <leojane@gmail.com>”(4D301DBA)

真的要签字吗?(y/N)y

您需要输入密码,才能解开这个用户的私钥:“Leojane Zhu (Lijuan Zhu)
<leojane@gmail.com>”
1024 位的 DSA 密钥,钥匙号 4D301DBA,建立于 2006-05-17

命令> save

这样便签署 OK 了。被签署过的 Key 要重新上传,因为被签署过后会有附加信息。
一般做法是导出这个 Key 至文本,然后 mail 给 Key 的持有者。例如:
leojane@debian:~$ gpg --armor --export 0xF7142EC2 > emfox.pub.asc
然后我把这个.asc文件发送给 emfox ,由他自己重新上传 Key 。同样,我的 Key 被人
签署了以后也要上传回服务器。使用 --import filename 来导入

这样我们就可以开始进行数字签名,文件加密解密了。
介绍一下 gpg 最常用的几个用法

*签署 : gpg --clearsign filename , 会生成 filename.asc ,这个是附在明文后
面的签署 ;如果是要用额外的签署文件 , 那么用gpg --sign --armor filename

*加密 : gpg --armor --encrypt filename ,其中 --armor 是将输出经 ASCII
封装 。执行完这个命令后会让输入用户标识,那么依次输入你希望能看到这份东西的人
的 Email ,以空白行结束 。

*解密 : gpg --decrypt filename.asc

更多用法请参考 man gpg ,可通过 gpg --help 获取快速帮助

本文差不多可以结束了。感谢 emfox 的指导 :)

最后提醒一下,虽然 GNUPG 是一个不错的解决方案,但也要提防一下非计算机方面的
安全问题,嗯 :)

相关链接 :
http://wiki.debian.org.hk/w/How_to_join_GNUPG_key_signing_Party
http://www.cryptnet.net/fdp/crypto/gpg-party.html
http://www.gnupg.org/

--
GnuPG Public Key: 0x4D301DBA

※ 来源:·飘渺水云间 freecity.cn·[FROM: Leojane]



 
Leojane(阿猪) @ 2006-04-12 20:50

好吧,我承认,这个世界很疯狂。而我呢,那也是相~~当~~疯狂!

昨天听闻了一个mm的遭遇,虽然事情草草解决了,但还是很担心她。

做了一回节能灯泡。

今天可恶的大雨把我困在了临湖。而今天所上的每一门课都是要签到或者点名的。特别是第一节项目管理,收到签到短信的时候我正在被窝里,而那时离下课只有五分钟了……

把CompLang加到了定制。因为那天无意去转的时候发现hijack放弃了Javascript版开版的申请,转而去那里设立自己的阵地了。今天去的时候已经有n多精彩讨论了。hijack,adoal,StarOcean,RicePig,binaryxie,binghe,BEZY等等,看到了n多熟悉的id。观点的激碰,知识的讨论,很不错的说。决定多去潜水。不过有时候也觉得很寒,对于某些非技术问题的争论很是点点点。

作为一个cser,我不可以只是比别人好一点,应该好一些才对。

从对某些事情的观点上有人说我“占有欲”很强。不知道是好事还是坏事。但感觉最近消耗的时间太多了,应该弄点时间学习了。大把大把的青春啊……一些事情,我暂时学会放下吧……

今天从雨中归来寝室,立刻倒在床上睡了。我很累。迷蒙之中做了个梦,说是室友在打扫寝室的时候找到了我遗失的那枚爱菲尔的戒指。不知为何会梦见这个。也许和昨天看到了那枚相同的东西有关。依稀记得在梦里我似乎也是把它给丢弃了。这次睡得很死啊。刚入睡的时候,可以听到外面播放着o2里的n多曲目。可是后来,虽然知道外面放的是o2的曲子,可脑海里却响起了其他的音乐……似乎以为不会再醒来了。可是突然有个人的声音把我唤醒了。于是,我便醒了……

或许,是我太累了想太多了……



 
Leojane(阿猪) @ 2006-04-10 11:37

简单写个纲要:

周六,上午在图书馆看了web相关的内容,主要是过了Javascript和xml;下午xuchuan的NP问题讲座; 晚饭sishen bg我,狐狸和蔡博 ;晚上MSTC课堂。时而有雨。但课堂结束后还是打车去了yq和狐狸,sishen去刷西湖了。当然之前是先在lib等sishen,后来有个不认识的但应该是刷版的人和我们一起去刷湖了。第三次 刷湖,第一次雨中刷湖。还撑伞,真拉风~冲苏堤最后一个坡莫名其妙摔了pp,郁闷……晚上11:30准时回寝室。时间掐得真好~!嗯,发现自己爱上刷湖了。可惜基础还是不扎实,木有bm的话还是不能自己去玩的。

周日,上午达标,下午跑团,晚上STL讲座。(其实有些后悔为啥不去参加fb而是去听自己听不懂的STL...)十点半回寝室,两天以来总算可以上88了。考古累死我了……rpwt还是木有好,不过也好……

现在越来越orz自己了。因为我已经无法预测自己的行为了。我现在的所作所为,n多都是我自己都不敢想象不敢相信的。譬如上上周,周三刷n圈zjg,周四申亚,周五MSTC春游,周六跑团,周日毅行; 又譬如这次毅行,不但以“牲口”的速度走完全程,还搞了个extended ; 再如上个周末……也许是我的行为在“进化”我的思维还没有跟上脚步吧。呵呵,现在我的命运是不是也有些“乱七八糟”了呢?无论如何,快乐幸福便是了,不会后悔的^_^

据说我有些“选择强迫症”,不过后来我想了一下,大部分我需要“选择”的那些事情,如果和某人无关的话我会很轻松地做出决定的,寒……

幸福,忙碌并虚脱着……



 
Leojane(阿猪) @ 2006-04-04 18:26

我不后悔!