Shell's Home

Sep 10, 2012 - 1 minute read - Comments

自由软件的基础讲解

授权

本文档内容基于cc-by-sa3.0下发布。

您可以自由复制、发行、展览、表演、放映、广播或通过信息网络传播本作品,创作演绎作品,对本作品进行商业性使用。惟须遵守下列条件。

  • 署名 — 您必须按照作者或者许可人指定的方式对作品进行署名。
  • 相同方式共享 — 如果您改变、转换本作品或者以本作品为基础进行创作,您只能采用与本协议相同的许可协议发布基于本作品的演绎作品。

具体信息请查看署名-相同方式共享3.0

从一个软件说起

给大家介绍一个软件,comix。comix是一个由python和GTK+写成的漫画浏览软件。

  • 支持zip, rar, tar等格式的压缩包直接浏览
  • 跨平台
  • 有自己的用户群和wiki页面

但是某天,我在Windows下使用comix的时候发现,在Windows下这货不支持压缩包直接浏览。而且手里有大量包是7z格式,木有办法使用。

  1. 检查源码,发现是/的问题。蛋疼的跨系统。
  2. 根据网络上的提示,我发现有两个解决问题的方法。

    • 使用封闭免费软件,例如honeyview,然后转跳到问题3
    • 自己修掉这个bug,反正只有一处,然后转跳到问题4
  3. 7z格式木有办法,只能苦等最新版本出来,完了。

  4. 需要7z支持,自己又做了一个7z支持的补丁,从此所有漫画都可以直接浏览

  5. 我希望向官网提供我的补丁,发现软件已经失去维护

  6. 在寻找的时候,我发现有爱好者维护了一个新的分支,mcomix。解决了很多历史bug,同时支持了7z

  7. 原来在问题2上,有一个隐藏选项,直接用mcomix,完了。

这说明,在你想出一个需求的时候,最好先问问资深用户,是不是已经被解决了。很多时候,不要重复造轮子。

修改源码?听起来好像很麻烦

如果不是职业程序员,还是别想了。调试软件和修改源码需要专业知识(当然,不需要是计算机系出身,但是需要专门的学习)。但是掌握技巧后,修改一个bug并不是很困难。然而,拥有修改源码的能力,表示这个软件和那些“你无能为力”的软件有所不同。

神码叫做自由软件

  1. 无论如何,你可以自由使用。这隐含了软件是免费的(或者满足一定条件下免费)。
  2. 源码开放。用户有研究如何使用的自由。
  3. 重新发布源码。用户可以让别人使用,或者包含在其他产品中使用。
  4. 改善软件。用户有改善软件的自由。

所以,自由软件的前提是,软件必须是开源软件。

两个软件的不同遭遇

  • Foxpro VS Sql Server

    老计算机用户都应当记得foxbase和foxpro这两个软件。当年风光一时的数据库软件,在被微软收购后,就黯淡无光了。尽管退出市场的主要原因是因为单机开发模式并不适应网络大规模开发,但是这只需要设立一个网络层就可以解决。微软在收购Sql Server后,为了保证其市场地位,收购并雪藏了foxpro。目前该软件已经停止开发,最新版本的支持也即将过期。

  • Mysql VS Oracle

    同样可怕的事情发生在mysql身上,做web开发的应该无人不知其大名。在Oracle收购后,Mysql也面临和foxpro同样的遭遇,更巧的是,他们同样是数据库类软件。然而Oracle无法雪藏Mysql。因为一旦Oracle雪藏Mysql,其他人可以继续Mysql的某个开源分支继续开发一个完全不同的东西。Mysql的创始人之一,Michael Widenius支持这个做法。

    因此,直到目前为止,Oracle都没有停止对Mysql的支持。

    当然,由于未来的风险,一些人在选择新数据库的时候转向了PostgreSQL,或者其他选择。然而已有的系统不会受到影响,已经学了Mysql的用户也不会受到影响。

如果当年Mysql是闭源,那么。

  1. 很多基于Mysql的改造是不可能的,例如mysql proxy。
  2. 今天Mysql管理员大概就得赶快再学些别的东西。

自由软件有版权么?

有,版权是一个人完成一个产品后自然具备的权力。开放源码并不剥夺这个权力。一个人完成了一本小说,并让别人观看了,难道他就失去版权了么?我们一般在谈论版权的时候,往往和其他权力混淆起来。实际上,版权这个东西,其实指的是著作权。基本权力包括两种,人格著作权和财产著作权。衍生权力就更多了。

  • 人格著作权
    • 公开发表
    • 署名
    • 扭曲
  • 财产著作权
    • 复制
    • 公开口述
    • 公开播送
    • 改编

自由软件主要放弃的,是对衍生权力的追究。即,作者授权你,在一定的条件下,可以进行合法的复制/改编,而不追究你的责任。但这不表示作者放弃版权。

授权协议

既然作者授权你如何如何,那么这就算是一份授权协议。我们下面列一下常见的授权协议:

  • 封闭协议
    • 最终用户协议(EULA)
  • 开源协议
    • LGPL:修改源码后不得闭源,新增代码可以不采用同样许可证,源码修改处不需要说明文档
    • Mozilla:修改源码后不得闭源,新增代码可以不采用同样许可证,源码修改处需要说明文档
    • GPL:修改源码后不得闭源,新增代码必须采用同样许可证
    • BSD:修改源码后可以闭源,每个修改的文件不必放置版权说明,衍生软件不得用你的名字做广告
    • MIT:修改源码后可以闭源,每个修改的文件不必放置版权说明,衍生软件可以用你的名字做广告
    • Apache:修改源码后可以闭源,每个修改的文件都必须放置版权说明
    • cc:创作共用协议,包括几种变化(by:署名,nc:非商业使用,nd:禁止演绎,sa:相同方式)

这么多授权,蛋疼不?

授权是从血泪教训中衍生出来的。我们下面讲一个开源的例子,大家非常熟悉的视频播放器

在以往,个人电脑只能使用微软开发的MPEG-4 Codec,即MS MPEG4 V1、MS MPEG4 V2、MS MPEG4 V3的系列编码核心。其中以MS MPEG4 V3的画质最好。不过其只可用在ASF文件,但这个文件格式是封闭的。故此网上有些黑客将其改写为著名的MPEG4 Codec DivX 3.11。
但问题是,DivX 3.11的基础技术是非法盗用微软的,无法进行更广泛的产品化及生产硬件播放机。因此,一些精通视频编码的工程师(包括原DivX 3.11的开发者)成立了一家名为DivX Networks Inc.的公司,简称DXN。他们主导了完全符合ISO MPEG4标准的Open DivX CODEC的开发,并吸引了许多软件高手参与。这时,主要的编程工作是由DXN来做,但很多技术上的难题却是由开放源代码社区帮忙解决。
但因为整个计划并不是根据GPL开发的,而是LGPL,因此在Open DivX即将成形时,DXN 借此漏洞将其闭源,结果使众多开放源代码社区的义工感到被出卖。也是因为这个原因,整个 0day 组织永远的拒绝了 DXN 公司的 DivX 格式。
而原Open DivX计划的义工最后决定在最后一个Open DivX版本的基础上,编写XviD(将DivX反过来写)以继续原Open DivX的目的。
大约1年后,Xvid计划的开发者重写了所有代码,并依照GPL发布(而不再是LGPL,所以谁要是想用它做成产品而不开放源代码是非法的)。但因为某些国家如美国,日本有软件专利法,使得其在该地区可能出现法律纠纷。因此,Xvid官方站点只提供源代码下载,用户只可由第三方站点下载第三方的安装档。

对于非法的侵权,自由软件可以怎么办

Libav(旧称:FFmpeg)是一个自由软件,可以运行音频和视频多种格式的录影、转档、流功能,包含了libavcodec─这是一个用于多个专案中音频和视频的解码器库,以及 libavformat——一个音频与视频格式转换库。

由于Libav/FFmpeg是在LGPL/GPL协议下发布的(如果使用了其中一些使用GPL协议发布的模块则必须使用GPL协议),任何人都可以自由使用,但必须严格遵守LGPL/GPL协议。目前有很多播放软件都使用了Libav/FFmpeg的代码,但它们并没有遵守LGPL/GPL协议,没有公开任何源代码。Libav/FFmpeg社区便将这些违反协议的公司/组织/个人的网址粘贴“耻辱大厅”(又叫“耻辱柱”)上,并与这些公司/组织/个人商讨如何解决版权争议。

耻辱柱地址

  • The KMPlayer, issue tracker entry
  • MediaCoder, issue tracker entry
  • QQPlayer, issue tracker entry, reproduced 2009-11-04

自由软件的优劣

使用自由软件,有一点很大的劣势。如果你是商业软件用户,那么软件公司需要始终保证你的售后。

用户: 您好,我的电脑开不了机器了。 客服: 请问您电源插了没有? 用户: 阿,好的,问题解决了,谢谢。

然而使用自由软件就意味着两件事:

  • 如果软件造成其他损失(例如停产,错误,硬件损坏,或者造成使用者被起诉),软件作者是不负任何责任的(插一句,这也是我不建议使用盗版的最主要原因)
  • 如果软件有问题,那么需要等到有人对这个问题有兴趣并进行修复。
    • 有些软件的修复速度很惊人。我见到最快的是10分钟,不开玩笑,软件是gitstat。 中文编码问题,修复只要一行,作者10分钟内就修复了问题,一小时内发布了新的包。
    • 有些则是慢的惊人。据说某些大型系统(不点名)里面最长的未修复bug长达10年。。。

不过好在,自由软件也有着封闭软件没有的优点。

  • 如果你对某个特性不舒服,你可以很容易的修改他。如果你不是程序员,你可以指望有个程序员一样对这个事情觉得不舒服。
  • 无论如何,你始终可以得到某个版本的软件,哪怕作者已经停止维护(例如msf-abbrev),进监狱(例如raiserfs4),或者已经挂了(PKZIP)。 自由软件唯一被废弃的理由就是不再有人使用了。

源码开放,安不安全

自由软件社区有一个理论,足够多的眼睛。

  • 足够多的眼睛能够发现软件的一切问题,就是说,软件的使用者和关注着够多的情况下,软件的bug很快就会被发现和消除。
  • 密码学说,安全性依赖于本身机制的安全性,而非黑盒子。即其他人即使知道了你的机制,也无法攻破系统。 而依赖黑盒子的系统,一旦盒子里面的把戏泄漏,要换一个盒子就要很高昂的成本。
  • 当然,这并不表示封闭软件是依赖于黑盒子保证其安全的。但是是否如此,你不知道,我也不知道。

自由软件如何盈利

  • 卖服务,例如RedHat。虽然软件不要钱,但是咨询,要钱,修Bug,要钱,维护,要钱。
  • 卖授权,例如GhostScript。由于GhostScript的源码是GPL发布,使用GS进行重发布的人只有几个选择。
    • 开放自己的源码
    • 使用Adobe的库
    • 自己写一套
    • 违反版权,并被告上法庭
    • 买AFPL的授权
  • 伸手要钱,例如Mozilla。软件的流行会给厂商带来非直接的好处。