对开源的认知
没有开源软件,现在的互联网根本无法存在,开源的历史可以追溯到ARPANET建立。开源在今天已经不再是一个时髦的词了,对于互联网的开发者来说,它现在就像空气和水一样,就在我们的生活中。
来自https://octoverse.github.com
如今的主流开源参与者,不再只是个人爱好者,更多的是著名IT企业的员工,商业公司也纷纷支持。IT企业投入了大量人力在各个开源社区和项目上,包括开发测试,项目协调,运营推广等。
什么是开源
从软件的版权属性和发布方式上看,软件的分类如下:
开源软件被定义为描述其源码可以被公众使用的软件,并且此软件的使用,修改和分发也不受许可证的限制。开放源码软件通常是有copyright的,它的许可证可能包含这样一些限制:蓄意的保护它的开放源码状态,著者身份的公告,或者开发的控制。
简单的说,开源就是源代码开放和开源许可协议的选择。开源意味着用户可以免费运行,自由学习,免费二次分发以及自由修改改进。
开源许可协议及选择
开源许可协议大概有上百种,例如:
Apache License 2.0 (Apache-2.0)
3-clause BSD license (BSD-3-Clause)
GNU General Public License (GPL)
GNU Lesser General Public License (LGPL)
MIT license (MIT)
Mozilla Public License 2.0 (MPL-2.0)
Eclipse Public License (EPL-1.0)
...
但是,常见的开源许可大约10种,主要有类似GPL,类似BSDL和类似MPL等。
GPL
GPL给软件以版权保护,使用GPL,可以获得复制、发布和修改这些软件的法律许可。
GPL的特殊性是 copyleft 与自由的病毒式传播。在所有开源许可证中,GPL 的最大特色在于它的“copyleft”规则。 它严格地控制基于自由软件的集合作品或者衍生作品,GPL 第 1 条将其称为“基于程序的作品”,发布规则很简单,只要使用了 GPL 下的自由软件,那么衍生作品以及集合作品的发布都要基于GPL 之下。
类似的开源许可证AGPL、LGPL…等等,是一种相对理想的是实用主义。
BSDL
BSDL主要适用于 Apache 服务器和基于 BSD 的操作系统项目(FreeBSD、 OpenBSD、 NetBSD),不排斥对开源软件的商业利用,有实用主义的观点。
BSDL 的特殊性是被许可人的绝对自由,对被许可人做了最少的限制,只要尊重原作者, 合理恰当地标明了源代码的出处,被许可人将不受限制于将这些源代码用在自己的程序中而按自己的要求进行程序的发布和软件的许可、产生衍生作品后仅以目标码的形式发布,等等。这意味着可以从 BSDL 的开源软件中衍生出私有软件。
类似的开源许可证有Apache 、MIT等等。
MPL
MPL是1998年初Netscape的 Mozilla 项目组为其开放源代码软件项目设计的开源许可证。
MPL的特殊性是在开源软件许可证谱系中接近于 BSDL,但它带有强烈的商业化特征,为公司保留了相当的权利,相当于集开源之力,都为我所用。
类似的开源许可证 Apple 公共代码许可证(1.2)、Sun 公司的SISSL和 Sun 公共许可证 (1.0)、Nokia 开放源代码许可证(1.0a)、 IBM公共许可证(1.0)等等。
如果选择一个开源协议呢?乌克兰程序员Paul Bagwell给出了一张分析图,如下:
国内的阮一峰在博客上给出了简化的版本:
除了Linux操作系统外,一个可能是最成功的复杂开源系统体系可能对理解开源许可协议有帮助。
Android 的开源许可体系
Android有关linux内核部分采用GPLv2协议开源,有关userspace采用ASLv2(Apache协议版本2 )协议开源。
GPL和非GPL的分界线在于一个 Bionic Libc 的库。 头文件由Linux内核的同名头文件自动生成,用来获取完成用户空间系统调用的必要信息。它只包含原头文件中的常数、结构和宏定义,因此,不包含版权信息。让 GPL 止步于内核空间被 Linux 内核的作者 Linus Torvalds以及其他的内核开发人员多次澄清,普通系统调用为非 GPL 的作用范围。
Android 在用户空间与内核空间之间存在着硬件抽象层 HAL,HAL 类库本质上一种用户空间的驱动,其中的主要用途之一就是规避GPL。硬件厂家把需要保护的商业机密以及知识产权相关的逻辑放在 HAL 层,以二进制包的方式发布,不需要公开源代码。
PAX专利联盟是Google 加强它对 Android 控制力 的另一种手段。手机厂商想要采用这些免费的专利,就不得不 预装 Play 商店及一系列Google 应用。
开源与专利
将开源代码修改后,自己申请软件专利是可能的,这取决于具体的开源许可证。MPL禁止将开放源代码以许可证形式许可后再去申请与这些源代码有关的专利的行为。BSD,Apache等对于专利申请没有限制。
就Ricoh,SISSL,NOKOS,AFL,Artistic,APSL等开源许可而言,贡献者将自己享有实质专利权的技术加入开源软件的,视为源代码的专利权人将该专有权利向公众许可。
使用代码扫描工具如Black DUCK或Openlogic等,能够对代码进行合规性检查,通过扫描源代码,发现并确认其中存在的开源代码,及其版本、许可证(License)信 息等,形成“材料清单”,让用户了解其代码。
开源中的法律问题
开源软件,虽然理念上违反传统的知识产权法,但是行动上却寻求包括著作权法、商标法、专利法在内的综合保护,进而形成了一个类似于商业软件知识产权综合保护的体系。开源后,侵权证据极易获得。
关于开源软件的著作权,主要有两个维度的风险:
1)复制、分发或修改他人软件时,要求按照协议规定附上版权说明,若不履行该义务,将可能面临著作权侵权(例如Apache-2.0\BSD-3-Clause\GPL-3.0\MIT等)
2)对修改而言,有的协议明确要求对修改的部分进行明示,标明修改人信息(例如Apache-2.0\GPL-3.0\LGPL等)
开源软件的专利权也存在风险,协议中授权被许可人专利申请的权利,以及专利再许可的授权。若在协议中未明确专利的再授权,将会存在一定的专利侵权风险,如BSD-3-Clause\MIT,未有明确的专利授权,专利侵权风险较大; GPL-3.0\LGPL-3.0,要求专利以免费的、非独占的许可方式分发给使用者,这就将一些授权风险排除,从协议来看风险反而会小一些。
开源软件的商标权风险,未依据协议要求正确使用商标 在部分协议中,针对商标权的使用,予以明确授权 GPL-3.0\LGPL-3.0,未明确规定不能使用商标; Apache-2.0\BSD-3-Clause明确不允许使用其商标,若使用将会存在商标侵权风险。在商业行为中,在开源程序中删除原有商标,更换为自己的商标后发布,构成商标法意义上的反向假冒,侵犯商标权。
那些个开源的大公司
在2016年,微软是Linux基金会的白金会员和董事,微软云Azure支持Redhat,Ubuntu, Suse等Linux版本。SQL Server也推出了Linux版本,开源了.Net, Visual Studio等核心产品,在github上贡献排名一度超过了facebook和google,内部人士宣称除了Window和Office,其他产品都已经开源或者在开源的路上。Azure 是微软最重要的未来,事实上有 1/3 虚拟机是 Linux系统,不支持Linux,微软云没法跟AWS和google竞争。
Google的核心业务场景是抓取网页数据,建索引,最后响应用户需求。Google做了全产业链的布局,而且全部以开源开放的方式,例如
浏览器 – chrome & blink
Webapp - PWA
网页加速- AMP
前端框架 - AngularJS
......
还有前面提到的Android。以Google开源的图片格式Webp为例,相对于PNG和JPG,在文件长度上有28%到45%的减少,可以减少大量的存储空间,带宽以及页面的平均加载时间。
在国内,华为的开源影响力很高,是Linux基金会,OpenStack基金会,CNTF(k8s)的白金会员,且到目前为止都是国内唯一,贡献排名均居前列。作为Apache基金会的金牌会员,捐献的 CarbonData成为了Apache的顶级项目。 华为的主张是“源于开源,强于开源,回馈开源”,通过参与开源,积极投入到云计算的相关开源技术领域,引领并主导技术标准的演进,促进华为在云计算基础设施上的技术能够领先。
百度有自己的对外开源规范,echarts早在2013年就在github上开源了。2016年9月,PaddlePaddle在百度世界大会上宣布开源,这是是一个易用、高效、灵活、可扩展的深度学习框架,兼容多种异构硬件,具有优异的训练&预测性能,官方支持多种领先模型,提供全流程的深度学习模块和组件,适合不同层次开发需求。百度在github上有数十个开源项目,2017年4月,百度宣布阿波罗计划,无人车系统开源。
阿里知名项目 weex,fastjson,dubbo,rocketmq,druid,jstorm等等等。阿里通过用户的意见反馈,bug报告,patch提交,促进了开源软件本身的质量提高,技术能力和开放精神获得了业内的认可,阿里技术工程师又了强烈的认同感,同时吸引了更多有能力的工程师加入。通过开源软件和自主开发相结合,实现了更好可控性和更高可扩展性,阿里的技术品牌通过得到了加强。
开源的商业模式
开源的商业模式有很多,有点跟产品强关联,例如微软和Azure;有的利用开源构建生态,从生态里面挣钱,例如Google Android。在维基百科上列出林林总总18种方式,主要包括:
通过服务来收费,例如 RedHat,IBM等
通过双License来收费,例如MongoDB,Neo4J等
通过商业版本提供高级功能,例如Cloudera(Hortonworks已经并入Cloudera抱团取暖)等
通过云来收费,例如AWS,Azure等等
通过生态来收益,例如Google等等
一个好的开源项目需要有价值,这是前提。同时需要降低用户贡献的门槛,还需要提供合理的用户激励。
参考资料:
https://en.wikipedia.org/wiki/Business_models_for_open-source_software
http://opensource.org/osd
https://linuxfoundation.cn/resources/open-source-guides/starting-open-source-project/
https://about.gitlab.com/20-years-open-source
http://github.com/baidu/paddle
https://www.oschina.net/news/74999/how-to-choose-a-license
http://www.gnu.org/licenses/license-list.html