02 人为规定的软件属性:关于许可协议的常识
软件的固有特性
看到这里,你是否感到有点惊讶,或者是有点无聊?明明是和我讲开源世界的入口,怎么需要涉及一大堆软件的法律许可声明?请君莫急,正如我们所介绍的,普通人看到的是软件的实际作用,即结果。对于代码来说,它可以人为地被掩藏或者保持开放。但是代码变成软件之后,任何人都无法分辨出代码是否是向世人开放的、可见的。也就是说,软件的具体运行和代码是分离的、割裂的。二者之间可以一一对应,但是这需要提供方非常诚实地提供。
软件使用的法律条款:作为商品合法地存在
软件想要融入人类社会,想要符合人类社会既有的规则,想要在市场上流通,既需要法律的保护,也需要法律的许可。当然,它的价格也要符合市场的规律,不可以漫天要价。
幸亏这个世界不是只有开发者,还有律师。犹如加工食品的外包装上写着的食物成分和添加剂一样,用户在使用软件时,尤其是在安装软件时,会看到一个许可声明。也就是说,如果此软件是开放源代码的,遵循哪款开源许可协议会做出声明,也就是读者您在上一节看到的内容。换句话说,作为软件的用户,在没有进一步掌握技能时,其分辨软件是否为开放源代码的方式就是阅读其许可声明。
开源软件的许可声明
现在请读者打开本书的扉页,您会看到类似图1.7所示的图书版权页。
图1.7 图书版权页
也就是说,作为读者,您之所以能够阅读本书,是您和出版机构达成了某种协商,您可能是花费了一定的金钱购买了本书,然后获得了阅读本书的许可,但是出版社禁止您复制本书并继续分发。
同理,软件也有许可声明,专有软件有,开放源代码软件也有。
注意
用户在安装一款软件时[无论是通过系统的软件市场(例如Apple App Store、Google Play)还是自己手动安装],要了解一下该软件的授权信息。尽管有时候这会花点时间,但是对维护自己的权益来说绝对是百利而无一害。
开源许可协议:令人眼花缭乱的声明
软件的作者,即撰写源代码的专业开发者,和作家、音乐家或者相应的公司一样,有权决定自己的作品以何种方式让人们使用,开源软件的作者同样拥有这样的权利。但是计算机代码和具有法律效力的文件说明还是有一些差异的,大多数开发者对于撰写法律条款是无能为力的,需要律师的帮忙,这样就可以制定出专业的许可协议。即使这样,也不能剥夺开发者声明自己所写的软件的权利,所以我们会看到各式各样的开源许可协议。主流的开源许可协议大体上有以下几种:
● GPL;
● BSD;
● MIT;
● MPL;
● Apache v2.0;
● LGPL。
更多关于开源许可协议的内容,请查阅开放源代码促进会(Open Source Initiative,OSI)认证的协议。
开源许可协议的主要内容是阐述该软件项目的复制、修改、再分发等权益,也对诸如商标、专利、著作权等内容进行进一步的描述。二进制的开源软件,在安装的时候会向用户提示使用的许可,但不会像大部分商业软件、专有软件一样让用户选择是否接受许可。为了郑重提示开发者,绝大多数项目也会将许可声明放在每一个源代码的开头,以注释的形式给出,如以下Kubernetes(简称K8S)项目的源代码许可声明:
# Copyright 2014 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
开源是建立在人类的知识产权之上的,这一点和人类的所有知识一样。我们可以毫不夸张地说,没有知识产权,开源是无法存在的。只有建立在法律的许可之下,开源才能有其独特的概念和定义。
开放源代码软件的定义
不是所有的软件都提供源代码,这是我们现在所处世界的一个现状。尽管开放源代码无处不在,但运行在计算机中的软件只能采用二进制,所以提供源代码逐渐成了一个附加动作。恰恰是因为这样,向导只能“授之以渔”,因为我不可能做一个完整的列表出来供读者直接使用。聪明的读者,如果您已经掌握了上述方法,那么只需再学习一个定义,就可以自行识别软件是否为开放源代码软件。这样的话,在未来独自闯荡令人眼花缭乱的江湖时,就会毫无压力。
导游在这里再次特别提醒读者,软件生来开源,但是出于某些原因,人们将软件的源代码封闭起来,并进行了法律上的定义,而对于开放源代码,人们也不得不出于为世人所识别的目的,使用文本的方式对其进行了定义。我们这里摘录了OSI对开源软件的十大特征的描述:
(1)可自由地再发布;
(2)源代码公开;
(3)允许派生作品;
(4)作者源代码的完整性;
(5)不能歧视任何个人和团体;
(6)不能歧视任何领域;
(7)许可协议的发布;
(8)许可协议不能针对某个产品;
(9)许可协议不能约束其他软件;
(10)许可协议必须独立于技术。
通过开源软件的十大特征,我们可以清楚地看到OSI所坚持的原则:
● 坚持开放,鼓励最大化地参与和协作;
● 尊重作者权利,同时保证程序的完整性;
● 尊重独立和中立,避免任何可能影响这种独立和中立性的事物。
请将上述10条特征牢记在心,它们是贯穿本次发现开源之旅的核心要素。每当一款软件诞生时,你就可以使用这10条特征来进行比对。