
为什么像 GNU GPL 这样的限制性许可证越来越不受青睐。
“如果你用了任何开源软件, 那么你软件的其他部分也必须开源。”这是微软前 CEO 巴尔默 2001 年说的,尽管他说的不对,还是引发了人们对自由软件的 FUD (恐惧, 不确定和怀疑)。大概这才是他的意图。
对开源软件的这些 FUD 主要与开源许可有关。现在有许多不同的许可证,当中有些限制比其他的更严格(也有人称“更具保护性”)。诸如 GNU 通用公共许可证 (GPL) 这样的限制性许可证使用了 copyleft 的概念。copyleft 赋予人们自由发布软件副本和修改版的权力,只要衍生工作保留同样的权力。bash 和 GIMP 等开源项目就是使用了 GPL(v3)。还有一个 AGPL( Affero GPL) 许可证,它为网络上的软件(如 web service)提供了 copyleft 许可。
这意味着,如果你使用了这种许可的代码,然后加入了你自己的专有代码,那么在一些情况下,整个代码,包括你的代码也就遵从这种限制性开源许可证。Ballmer 说的大概就是这类的许可证。
但宽松许可证不同。比如,只要保留版权声明和许可声明且不要求开发者承担责任,MIT 许可证允许任何人任意使用开源代码,包括修改和出售。另一个比较流行的宽松开源许可证是 Apache 许可证 2.0,它还包含了贡献者向用户提供专利授权相关的条款。使用 MIT 许可证的有 JQuery、.NET Core 和 Rails ,使用 Apache 许可证 2.0 的软件包括安卓,Apache 和 Swift。
两种许可证类型最终都是为了让软件更有用。限制性许可证促进了参与和分享的开源理念,使每一个人都能从软件中得到最大化的利益。而宽松许可证通过允许人们任意使用软件来确保人们能从软件中得到最多的利益,即使这意味着他们可以使用代码,修改它,据为己有,甚至以专有软件出售,而不做任何回报。
开源许可证管理公司黑鸭子软件的数据显示,去年使用最多的开源许可证是限制性许可证 GPL 2.0,份额大约 25%。宽松许可证 MIT 和 Apache 2.0 次之,份额分别为 18% 和 16%,再后面是 GPL 3.0, 份额大约 10%。这样来看,限制性许可证占 35%,宽松许可证占 34%,几乎是平手。
但这份当下的数据没有揭示发展趋势。黑鸭子软件的数据显示,从 2009 年到 2015 年的六年间,MIT 许可证的份额上升了 15.7%,Apache 的份额上升了 12.4%。在这段时期,GPL v2 和 v3 的份额惊人地下降了 21.4%。换言之,在这段时期里,大量软件从限制性许可证转到宽松许可证。
这个趋势还在继续。黑鸭子软件的最新数据显示,MIT 现在的份额为 26%,GPL v2 为 21%,Apache 2 为 16%,GPL v3 为 9%。即 30% 的限制性许可证和 42% 的宽松许可证 — 与前一年的 35% 的限制许可证和 34% 的宽松许可证相比,发生了重大的转变。对 GitHub 上使用许可证的调查研究证实了这种转变。它显示 MIT 以压倒性的 45% 占有率成为最流行的许可证,与之相比,GPL v2 只有 13%,Apache 11%。

引领趋势
从限制性许可证到宽松许可证,这么大的转变背后是什么呢? 是公司害怕如果使用了限制性许可证的软件,他们就会像巴尔默说的那样,失去自己私有软件的控制权了吗? 事实上,可能就是如此。比如, Google 就禁用了 Affero GPL 软件。
Instructional Media + Magic 的主席 Jim Farmer,是一个教育开源技术的开发者。他认为很多公司为避免法律问题而不使用限制性许可证。“问题就在于复杂性。许可证的复杂性越高,被他人因为某行为而告上法庭的可能性越高。高复杂性更可能带来诉讼”, 他说。
他补充说,这种对限制性许可证的恐惧正被律师们驱动着,许多律师建议自己的客户使用 MIT 或 Apache 2.0 许可证的软件,并明确反对使用 Affero 许可证的软件。
他说,这会对软件开发者产生影响,因为如果公司都避开限制性许可证软件的使用,开发者想要自己的软件被使用,就更会把新的软件使用宽松许可证。
但 SalesAgility(开源 SuiteCRM 背后的公司)的 CEO Greg Soper 认为这种到宽松许可证的转变也是由一些开发者驱动的。“看看像 Rocket.Chat 这样的应用。 开发者本可以选择 GPL 2.0 或 Affero 许可证,但他们选择了宽松许可证”,他说。“这样可以给这个应用最大的机会,因为专有软件厂商可以使用它,不会伤害到他们的产品,且不需要把他们的产品也使用开源许可证。这样如果开发者想要让第三方应用使用他的应用的话,他有理由选择宽松许可证。”
Soper 指出,限制性许可证致力于帮助开源项目获得成功,方式是阻止开发者拿了别人的代码、做了修改,但不把结果回报给社区。“Affero 许可证对我们的产品健康发展很重要, 因为如果有人利用了我们的代码开发,做得比我们好, 却又不把代码回报回来, 就会扼杀掉我们的产品,” 他说。“ 对 Rocket.Chat 则不同, 因为如果它使用 Affero, 那么它会污染公司的知识产权, 所以公司不会使用它。不同的许可证有不同的使用案例。”
曾在 Gnome、OpenOffice 工作过,现在是 LibreOffice 的开源开发者的 Michael Meeks 同意 Jim Farmer 的观点,认为许多公司确实出于对法律的担心,而选择使用宽松许可证的软件。“copyleft 许可证有风险, 但同样也有巨大的益处。 遗憾的是人们都听从律师的,而律师只是讲风险,却从不告诉你有些事是安全的。”
巴尔默发表他的错误言论已经过去 15 年了, 但它产生的 FUD 还是有影响 — 即使从限制性许可证到宽松许可证的转变并不是他的目的。
来自:Linux.Cn
作者:Paul Rubens 译者:willcoderwang 校对:jasminepeng
引用来自“首席李兰春黛”的评论
GPL的存在就是为了防止开源软件被某商业公司 据为己有,然后另起炉灶去害人。引用来自“struct”的评论
GPL 并不能防止软件被商业公司据为己有,也不能防止另起炉灶。Java 是基于 GPL 协议开源的,但这并不能阻止 Oracle 将 Java 据为己有。
Linux 是基于 GPL 协议开源的,但这并不能阻止各种公司、组织另起炉灶,各种 Linux 发行版大行其道。
一个合适的开源协议加一个统一的非营利性组织才是关键。
Linux 内核没有分裂很大程度上得益于 Linux 基金会,大家都加入 Linux 基金会,争取自己的发言权,从而避免另起炉灶。
引用来自“eechen”的评论
恰恰相反,你举的Java和Linux这两个都是GPL防止其他厂商另起炉灶的例子。首先,Java是SUN开源的产品,Oracle收购SUN后Java属于Oracle维护的开源产品。
好了,除了Oracle的JDK/OpenJDK,还有其他厂商(IBM?)另起炉灶的发布的JDK比原始JDK更通用的么?
然后再说Linux,不管哪个发行版,采用的都是标准统一的Linux内核,甚至包括Android,这就是为什么Nginx/PHP/MySQL这些Linux软件可以很轻松的交叉编译到Android平台上。比如我编译的ARM架构Linux版PHP7 ( #PHPDroid# ),同一个二进制文件,既能在Raspbian上跑,也能在Android上跑。
简而言之,就是你能找到一个新的JDK分支或者Linux内核分支么?
有人这么干过,那就是Google。
Google曾经试图把Android使用的Linux内核从Linux官方主干中分离出来,结果迫于压力,回归了。
再者,Google在Android上开发不兼容标准JVM的虚拟机破坏Java生态,它也做到了。
哈哈。
引用来自“struct”的评论
你看,你和我表达的是一个意思吧。Java 是基于 GPL 协议开源的,但还是被谷歌分裂了。
谷歌试图在 Android 上分裂 Linux 内核,结果迫于 Linux 基金会的压力,最终放弃了。
Android只不过是分裂了Java这门语言的生态,开发Android应用的就知道:
import java.io.File; //这个还得依赖Oracle JDK/OpenJDK
import android.webkit.WebView; //这个才是Android上的虚拟机提供的功能
了解了没,Android开发依旧依赖标准Java虚拟机,但其基于Java语言搞得新的API分裂了Java开发生态(导致代码不通用).
还有,软粉得了,不要微软一加入Linux基金会,就三句话不离,搞得好像Linux基金会因为微软而荣耀似的.
引用来自“首席李兰春黛”的评论
GPL的存在就是为了防止开源软件被某商业公司 据为己有,然后另起炉灶去害人。引用来自“struct”的评论
GPL 并不能防止软件被商业公司据为己有,也不能防止另起炉灶。Java 是基于 GPL 协议开源的,但这并不能阻止 Oracle 将 Java 据为己有。
Linux 是基于 GPL 协议开源的,但这并不能阻止各种公司、组织另起炉灶,各种 Linux 发行版大行其道。
一个合适的开源协议加一个统一的非营利性组织才是关键。
Linux 内核没有分裂很大程度上得益于 Linux 基金会,大家都加入 Linux 基金会,争取自己的发言权,从而避免另起炉灶。
引用来自“eechen”的评论
恰恰相反,你举的Java和Linux这两个都是GPL防止其他厂商另起炉灶的例子。首先,Java是SUN开源的产品,Oracle收购SUN后Java属于Oracle维护的开源产品。
好了,除了Oracle的JDK/OpenJDK,还有其他厂商(IBM?)另起炉灶的发布的JDK比原始JDK更通用的么?
然后再说Linux,不管哪个发行版,采用的都是标准统一的Linux内核,甚至包括Android,这就是为什么Nginx/PHP/MySQL这些Linux软件可以很轻松的交叉编译到Android平台上。比如我编译的ARM架构Linux版PHP7 ( #PHPDroid# ),同一个二进制文件,既能在Raspbian上跑,也能在Android上跑。
简而言之,就是你能找到一个新的JDK分支或者Linux内核分支么?
有人这么干过,那就是Google。
Google曾经试图把Android使用的Linux内核从Linux官方主干中分离出来,结果迫于压力,回归了。
再者,Google在Android上开发不兼容标准JVM的虚拟机破坏Java生态,它也做到了。
哈哈。
Java 是基于 GPL 协议开源的,但还是被谷歌分裂了。
谷歌试图在 Android 上分裂 Linux 内核,结果迫于 Linux 基金会的压力,最终放弃了。
引用来自“首席李兰春黛”的评论
GPL的存在就是为了防止开源软件被某商业公司 据为己有,然后另起炉灶去害人。引用来自“struct”的评论
GPL 并不能防止软件被商业公司据为己有,也不能防止另起炉灶。Java 是基于 GPL 协议开源的,但这并不能阻止 Oracle 将 Java 据为己有。
Linux 是基于 GPL 协议开源的,但这并不能阻止各种公司、组织另起炉灶,各种 Linux 发行版大行其道。
一个合适的开源协议加一个统一的非营利性组织才是关键。
Linux 内核没有分裂很大程度上得益于 Linux 基金会,大家都加入 Linux 基金会,争取自己的发言权,从而避免另起炉灶。
首先,Java是SUN开源的产品,Oracle收购SUN后Java属于Oracle维护的开源产品。
好了,除了Oracle的JDK/OpenJDK,还有其他厂商(IBM?)另起炉灶的发布的JDK比原始JDK更通用的么?
然后再说Linux,不管哪个发行版,采用的都是标准统一的Linux内核,甚至包括Android,这就是为什么Nginx/PHP/MySQL这些Linux软件可以很轻松的交叉编译到Android平台上。比如我编译的ARM架构Linux版PHP7 ( #PHPDroid# ),同一个二进制文件,既能在Raspbian上跑,也能在Android上跑。
简而言之,就是你能找到一个新的JDK分支或者Linux内核分支么?
有人这么干过,那就是Google。
Google曾经试图把Android使用的Linux内核从Linux官方主干中分离出来,结果迫于压力,回归了。
再者,Google在Android上开发不兼容标准JVM的虚拟机破坏Java生态,它也做到了。
哈哈。
就拿存储服务来说,典型的如采用GPL授权的MySQL和采用AGPL授权的MongoDB。
Google这些厂商为什么不喜欢AGPL,就是因为这些邪恶的厂商一开始就想不劳而获获得一个开源软件比如MongoDB,然后对这个开源基础设施修改完善后加入自己的云服务形成自己的技术壁垒,而有了AGPL限制,就算你把软件加入到自己的云服务而不对外发布,也需要开源你修改的代码。
GPL还能帮助商业开源公司盈利,Qt和MySQL就是典型的商业开源公司,提供GPL和商业双重授权。
GPL是一个非常棒的协议,如果使用者是真正认同开源的正人君子,那会觉得非常舒服,人人为我我为人人的分享。但如果使用者心怀鬼胎,那就会觉得GPL是一种束缚甚至是一种癌症,这里面包括微软和谷歌。
如果你要开源一套Web系统,我建议像MongoDB那样采用AGPL授权。
GPL:你可以不劳而获,但你不能据为己有。
引用来自“shijunti”的评论
有案件起诉过吗软件自由保护组织的执行总监Karen Sandler在Linux基金会的协作峰会上透露, 她领导的“Linux合规”项目从2012年开始以来一直低调行事,但是这次终于要“开火”了。 2015年3月5日,该机构宣布,支持其成员、Linux内核关键开发者Christoph Hellwig 将著名云计算虚拟化厂商VMware告上德国汉堡的地区法庭,以敦促其遵守Linux内核采用的许可证GPLv2。 VMware被指在他们的ESXi产品中使用了Linux内核相关的代码而没有遵守GPLv2。 虽然VMware大量使用开源软件,但ESXi不是一个纯粹的开源产品,它也包含了一个“私有”组件叫做vmkernel。 系统会先启动一个Linux,由Linux加载一个叫“vmklinux”的模块, 再由这个模块加载vmkernel代码,而VMware就是在vmkernel中实现其hypervisor功能的。 根据这样的关系,vmkernel被认定为是一个“加载到内核空间并运行”的模块。 根据GPLv2,vmkernel必须也要通过GPLv2授权。 但这还不算完,开放的vmklinux的代码中有很多从Linux移植过来的代码, 其中包括Hellwig拥有版权的SCSI子系统和基数树(Radix Tree)算法的实现。 Hellwig认为vmkernel为了支持这些从Linux移植过来的模块,自身也合入了很多Linux代码, 所以vmkernel应该是一个Linux的衍生产品,从这一点来说,它也必须遵守GPLv2。
应该对采用的协议软件进行分类, 从而让更加准确发现问题的根源.