第七章 去中心化自治组织(DAO)

6.1 基础概念

区块链里有很多项目都是开源的,比如数字货币遵循的发布协议最常见的就是开源协议,比特币、狗狗币、达世币等等,都是开源的。重量级区块链项目如以太坊(ethereum.org)、Openchain(openchain.org)、Multichain(multichain.com)、Hyperledger(hyperledger.org)等,也都是开源的。

何谓开放源代码、开源软件、自由软件和免费软件?

我们可以很方便地在维基百科里查阅到这几个概念。比较可惜的是由于世人皆知的原因,在这些领域真正有实践经验的国人太少太少了!

开放源代码(Open Source)

开放源代码描述了一种在产品的出品和开发中提供最终源材料的做法。在这个词广泛使用前,开发者和生产者使用过很多词去描述这个概念,开放源代码在互联网上已经获得广泛使用。开放源代码意味着一个产品授权其用户得到其源代码、设计文档(技术文档)以及内容。开放源代码使得生产模块、通信管道、社区交流获得很大改善。随后,一个新著作权、新词“开源软件”和“开源模型”(也常被称为“开源模式”)诞生。

开源模型概念包括同时间不同时程和方法来生产,相对而言,更加集中式的软体设计模型,例如典型的商业软体公司。一个开源软件开发的主要原则和惯例是易货贸易和合作的同侪生产,经由免费公开的最终产品、原始信息、蓝图和文件。这逐渐应用在其它领域,例如生物技术。

开放源代码由Debian的创始人之一Bruce Perens 定义如下:

  • 自由再散布(Free Distribution):允许获得源代码的人可自由再将此源代码散布。

  • 源代码(Source Code):程序的可执行文件在散布时,必须以随附完整源代码或是可让人方便的事后获取源代码。

  • 派生著作(Derived Works):让人可依此源代码修改后,在依照同一许可协议的情形下再散布。

  • 原创作者程序源代码的完整性(Integrity of The Author’s Source Code):意即修改后的版本,需以不同的版本号码以与原始的代码做分别,保障原始的代码完整性。

  • 不得对任何人或团体有差别待遇(No Discrimination Against Persons or Groups):开放源代码软件不得因性别、团体、国家、族群等设置限制,除非法律有特别规定(如:美国政府限制高加密软件的出口)。

  • 对程序在任何领域内的利用不得有差别待遇(No Discrimination Against Fields of Endeavor):意即不得限制商业使用。

  • 散布许可协议(Distribution of License):若软件再散布,必须以同一条款散布之。

  • 许可协议不得专属于特定产品(License Must Not Be Specific to a Product):若多个程序组合成一套软件,则当某一开放源代码的程序单独散布时,也必须要匹配开放源代码的条件。

  • 许可协议不得限制其他软件(License Must Not Restrict Other Software):当某一开放源代码软件与其他非开放源代码软件一起散布时(例如放在同一光盘),不得限制其他软件的授权也只能遵照开放源代码的授权。

  • 许可协议必须技术中立(License Must Be Technology-Neutral):亦即许可协议不得限制为电子格式才有效,若是纸本的许可协议也应视为有效。

开放源代码促进会(Open Source Initiative,OSI),又译作开放原始码组织,是全球最重要的旨在推动开源软件发展的非盈利组织。在业界有很强的权威性。

开放源代码产品已经涵括:

  • 开源软件(Open-source software)

  • 开源硬件(Open-source hardware):又常被称为“开放硬件”。

  • 开源视频游戏(Open source video games)

  • 开源唱片厂牌(Open source record label)

  • 开源电影(Open source film)

  • 开源可乐(Open source cola)

  • 开源内容(Open source content或Open content【2】)

开放源代码应用实例

1. 应用软件

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

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

  • Eclipse——集成开发环境。

  • GIMP——GNU图像处理软件。

  • Scribus——桌面出版软件。

  • Inkscape——矢量图形编辑器。

  • Ardour——数字音乐工作站(DAW)。

  • Audacity——数字声波编辑软件。

  • Emacs——纯文本编辑器。

  • Vim——纯文本编辑器。

  • Chromium——网页浏览器。

  • Mozilla Firefox——网页浏览器。

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

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

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

  • DocFetcher——桌面搜索软件。

2. 操作系统

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

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

  • FreeBSD——类Unix的操作系统。源自加州大学伯克利分校开发的伯克利软件套件(Berkeley Software Distribution,BSD)产品。

  • Linux——类Unix操作系统家族。三大开源社区版本:CentOS、Ubuntu、Debian。

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

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

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

3. 编程语言

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

  • Golang——Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

  • Solidity——一种智能合约高级语言,运行在Ethereum虚拟机(EVM)之上。

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

Figure 7文档. Solidity 0.4.25

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

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

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

4. 服务器软件

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

  • Drupal——内容管理系统。

  • Joomla!——内容管理系统。

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

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

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

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

  1. 饮料

  • Open-source cola——一种配方开源的可乐。

  1. 内容

  • 维基百科(Wikipedia)——全世界最大的百科全书(wikipedia.org)。

国内常将“开放源代码”简称为“开源”。

名单里一定有你正在使用的开源软件,比如网页浏览器Chromium、Mozilla Firefox(火狐)、手机操作系统Android(安卓)——红极一时的iPhone的操作系统iOS不在名单之列,也就是说iOS并非开放源代码软件。

名单里可有中国人创建的开放源代码实例?一个没有。因为糟糕的英语教育和世人皆知的原因,我们连参与都很少很少。

开源软件(Open Source Software,OSS,中文也称:开放源代码软件)

是一种源代码可以任意获取的计算机软件,这种软件的版权持有人在软件协议的规定之下保留一部分权利并允许用户学习、修改、增进这款软件的质量。开源协议通常匹配开放源代码的定义的要求,并遵循业界广泛接受的开源协议。一些开源软件被发布到公共领域。开源软件常以公开和合作的形式进行开发。开源软件是开放源代码开发最常见的例子,也经常与用户生成内容做比较。 开源软件的英文“open source software”一词出自自由软件的营销活动中。

开源软件同时也是一种软件传播模式。非开源软件仅可获取已经编译过的二进制可执行文件,通常只有软件的作者或著作权所有者等拥有程序的源代码。这种模式仅仅只是传播了软件的使用权,而封闭了软件的学习、修改、嵌入等权限。

有些软件的作者只将源代码公开,却不匹配“开放源代码”的定义及条件。作者可能设置公开源代码的条件限制,诸如限制可阅读源代码的对象、限制派生产品等,此称之为公开源代码的免费软件(Freeware,例如知名的模拟器软件MAME),因此公开源代码的软件并不一定可称之为开放源代码软件。

自由软件(Free Software)

根据自由软件基金会对其的定义,是一类可以不受限制地自由使用、复制、研究、修改和分发的,尊重用户自由的软件。这些方面的不受限制正是自由软件最重要的本质。与自由软件相对的是专有软件(proprietary software)即非自由软件,或被称为私有软件、封闭软件(其定义与是否收取费用无关──自由软件不一定是免费软件)。自由软件受到所选定的“自由软件许可协议”保护而发布(或是放置在公共领域),其发布以源代码为主,二进制文件可有可无。自由软件许可证的类型主要有GPL许可证和BSD许可证两种。

自由软件基金会(Free Software Foundation,FSF,www.fsf.org)对自由软件的定义首次于1989年发表。这份定义后来被布鲁斯•裴伦斯(Bruce Perens)改写为《Debian自由软件指导方针(DFSG)》。

根据斯托曼和自由软件基金会(FSF)的定义,自由软件赋予用户四种自由:

  • 自由之零:不论目的为何,有使用该软件的自由。

  • 自由之一:有研究该软件如何运作的自由,并且可以修改该软件来匹配用户自身的需求。获取该软件之源码为达成此目的之前提。

  • 自由之二:有重新散布该软件的自由,所以每个人都可以借由散布自由软件来敦亲睦邻。

  • 自由之三:有改善再利用该软件的自由,并且可以发表修订后的版本供公众使用,如此一来,整个社区都可以受惠。如前项,获取该软件之源码为达成此目的之前提。

如果一软件的用户具有上述四种权利,则该软件得以被称之为“自由软件”。也就是说,用户必须能够自由地、以不收费或是收取合理的散布费用的方式、在任何时间再散布该软件的原版或是改写版,在任何地方给任何人使用。如果用户不必问任何人或是支付任何的许可费用从事这些行为,就表示他拥有自由软件所赋予的自由权利。

开放源代码与自由软件的区别

许多人将开放源代码与自由软件(free Software)视为相同,但若以定义条件而言,自由软件仅是开放源代码的一种,也就是自由软件的定义较开放源代码更为严格,并非开放源代码的软件就可称为自由软件,要视该软件的授权条件是否合乎自由软件基金会对自由软件所下的定义:

自由软件是在电脑为个人或为公共利益,而非私人公司或政府等企图限制或监视我们工作时,我们在家、学校和公司使用时,我们具有其控制权。

开放源代码有时不仅仅指开放源代码软件,它同时也是一种软件开放模式的名称。使用开放源代码开放模式的软件代表就有Linux操作系统。

严格地说来,开放源代码软件与自由软件是两个不同的概念。所有自由软件都是开放源代码的,但不是所有的开源软件都能被称为“自由”。但在现实上,绝大多数开源软件也都匹配自由软件的定义。比如,遵守GPL和BSD许可的软件都是开放的并且是自由的。

“开放源代码软件运动”是一个主要由程序工程师及其他电脑用户参与的声势浩大的运动。它是自由软件运动的一个分支,但两者的差别并不明显。一般而言,自由软件运动是基于政治及哲学思想(有时被称为所谓黑客文化)的理想主义运动,而开放源代码运动则主要注重程序本身的质量提升。

免费软件(Freeware)【5】

是指不需以金钱购买使用授权的电脑软件,但使用上会有一种以上的限制,例如禁止反编译软件以研究软件写法、禁止修改软件源码、禁止再次散布出去给其他人使用等。免费软件是与商业软件 (Commercial Software) 相背的概念;商业软件通常需要收取使用授权费以营利,但有时候商业软件基于商业目的,如想让“收费版”软件 (专业版、商业版) 扩大市场占有率,而提供免费版 (免费版、个人版) 软件——但只是说那个版本的软件是免费软件,而不能说那个软件是免费软件。

根据自由软件基金会 (Free Software Foundation) 的说法,“免费软件”是种定义不够严谨的软件类别,缺乏明确接受的定义;但自由软件基金会仍表示免费软件与自由软件不同,必须区隔两者。有些自由软件(Free Software)虽然免费提供,但因自由软件授权不限制发行者再次向使用者收取费用之权利,所以不可称之为免费软件,只能称为免费提供的自由软件。知名的闭源免费软件有 Adobe Reader、Skype 等。

  • 绿色软件(Green Software)——一般不需要安装,而可以直接点选执行的软件,以避免如果不想使用而要删除后,在系统某些位置留下无法去除的档案。有许多免费的软件被制作成绿色软件,可置于随身碟中携带,所以也称为Portable software。

  • 广告软件(Ad-ware)——附带宣传广告的软件,当中部分是恶意软件。

  • 赞助软件(Donationware或Beggarware或Nagware)——透过自愿性赞助或捐献,软件开发者从而获得补酬。

  • 被放弃的软件(Abandonware)——一些商业软件因日子久远或失去利润价值而免费使用,甚至开放源码,放弃版权。

  • 附带的软件——如一些公司的宣传光碟经常包括的阅读/多媒体软件,例:Adobe Reader、RealPlayer、Flash Player或游戏光碟附带的Direct X等。

其它还有试用软件(Trial ware)或共享软件(Shareware)等过了一段时间后不能再使用或功能有所限制的软件。有时亦有伪装成免费软件的间谍软件(Spyware)或垃圾广告软件(Spam ware)。

开源软件和自由软件的许可证(License)

这是西方工业革命的结晶:你的软件属于哪种类型,自己说了不能算,必须要看你是否采用了哪种软件社区普遍认同的协议。

以下内容来自维基百科词条“自由及开放源代码软件许可证比较”[6]

这个表格列出所有被自由软件社区所认可的许可证——无论是“自由软件”或是“开放源代码”许可证,这些组织通常也会将其分类。组织通常只会认可特定版本的软件许可证。自由软件基金会(FSF)的认可表示自由软件基金会认为该许可证为自由软件许可证,因为他们不认同专有软件,不过他们建议至少是与GPL兼容且最好是以Copyleft的方式发布。

许可证与特定版本

FSF“认可”

与GPL兼容

OSI 认证

Copyfree 促进会认证

Debian 认可

Fedora项目认可

Academic Free License

Affero通用公共许可证第三版

Apache许可证版本1.1及1.0

Apache许可证第二版

苹果公共源代码许可证版本1.x

苹果公共源代码许可证版本2.0

艺术许可协议 1.0

艺术许可协议 2.0

Berkeley Database License

原始的BSD许可证

修改后的BSD许可证

Boost许可证

CeCILL

通用开发与散布许可证

Common Public License

创作共用授权(标签:署名及相同方式共享)

限≥3.0之版本

创作共用授权(标签:非商业性使用及禁止演绎)

仅限署名-非商业性使用

Cryptix General License

WTFPL

Eclipse公共许可证

Educational Community License

Eiffel Forum License第二版

Fair License

GNU通用公共许可证

GNU宽通用公共许可证

Hacktivismo Enhanced-Source Software License Agreement

IBM公共许可证

英特尔开放源代码许可证

ISC许可证

LaTeX项目公共许可证

微软公共许可证

微软互惠许可证

MIT许可证

Mozilla公共许可证版本1.1

Mozilla公共许可证版本2.0

是,除了"Incompatible with Secondary Licenses"一节特别标示部分

网景公共许可证

Open Software License

OpenSSL许可证

PHP许可证

仅限v3.0/3.01其余未知

POV-Ray-License

Python软件基金会许可证2.0.1;2.1.1及更新

QPL

Reciprocal Public License 1.5

Sun Industry Standards Source License

Sun Public License

Sybase Open Watcom Public License

W3C Software Notice and License

XFree86 1.1 License

Zlib授权

Zope公共许可证版本1.0

Zope公共许可证版本2.0

这些协议是软件业最重要的基石,因为它们绝大多数不是来自任何政府,任何法院,而是来自于软件社区(community)——和很多区块链项目一样(其实应该反过来说,因为区块链吸纳的正是以开源协议为核心的开源运动的成果),它们是社区达成共识的结果。准确地说,它们往往是由某个杰出的人,或民间组织,或企业制订,最终由社区优胜劣汰而确定,并且非常有意思的是,这样产生的许可证在欧美国家已经反过来被纳入法律法规的范围!反观我国,虽然已经是伯尔尼公约签约国,但在实际操作层面,还没有上升到这一高度。

自由软件基金会非常强调与GPL的兼容性,可见GPL之重要。这里的GPL,全称是GNU General Public License即GNU通用公共许可协议。

比特币核心钱包Bitcoin Core,采用的即为MIT license(MIT许可证)。

GNU通用公共许可协议

GNU通用公共许可协议(英语:GNU General Public License,缩写:GNU GPL、GPL),是一个被广泛使用的自由软件许可协议条款。其核心是保证终端用户运行、学习、分享(复制)及修改软件之自由。GNU GPL最初由理查德•斯托曼(Richard Matthew Stallman)为GNU计划而撰写。此许可证最新版本为“第3版”(v3),于2007年6月29日发布。

GNU宽通用公共许可证(GNU Lesser General Public License,LGPL)改自GPL的另一个版本,其目的是为了应用于一些软件库。

GPL给予了计算机程序自由软件的定义,并且使用Copyleft来确保程序的自由被完善的保留。

自由

GPL授予程序接受人以下权利,或称“自由”,或称“copyleft”:

  • 以任何目的运行此程序的自由;

  • 再发行复制件的自由;

  • 改进此程序,并公开发布改进的自由(前提是能得到源代码)。

相反地,随版权所有软件的最终用户许可证几乎从不授予用户任何权利(除了使用的权利),甚至可能限制法律允许的行为,比如逆向工程。

GPL与其它一些自由软件许可证(比如BSD许可证)相比,主要区别就在于GPL寻求确保上述自由能在复制件及演绎作品中得到保障。它通过一种由斯托曼发明的叫Copyleft的法律机制实现,即要求GPL程序的演绎作品也要在GPL之下。相反,BSD式的许可证并不禁止演绎作品变成专有软件。

由于某些原因,GPL成为了自由软件和开源软件的最流行许可证。到2004年4月,GPL已占Freshmeat上所列的自由软件的约75%,SourceForge的约68%的份额。类似的,2001年一项关于Red Hat Linux 7.1的调查显示一般的代码都以GPL发布。著名的GPL自由软件包括EMACS,Linux核心(并非所有Linux发行版的核心都是开源的)和GCC。

鉴于GNU通用公共许可协议是应用最广泛的自由软件许可证,建议大家仔细研究下。

这是GPL v2非正式简体中文译本:http://www.thebigfly.com/gnu/gpl

GPL v3非正式简中译本:https://sites.google.com/site/bergwolf02/gplv3_zh

GNU通用公共许可协议的英文非常晦涩难懂。官方坚持只有www.gnu.org网站里发布的英文版才有法律效力,中文版和其它语言版都仅仅只是供大家理解其条文的参考资料。

GPL的核心在于:

1. 保证任何人都能自由使用、发布、修改、复制和传播遵循其许可证的软件!

2. 修改之后仍然必须遵循GPL许可证而发布或传播!

3. 任何人都可以通过任何媒介发布原程序源代码的未被修改过的完整副本(需显著而适当地标注版权),可以为其副本的分发收取任何价格的费用或者免费,也可以提供技术支持或者责任担保来收取费用,但许可证不得变化。