引言
最近,由于Copilot在平方根倒数速算算法上的优秀表现,引发了人们的热烈讨论。github使用我们的开源代码(作为训练集)为我们服务,是否应该遵循开源协议,我们为此服务付费,又是否合逻辑呢?自由软件基金会(FSF)在指责GitHub Copilot的行为不公正的同时,也希望为Copilot在未来可能出现的诸多问题未雨绸缪。
开源与开源协议
开源不等于免费
开源全称为开放源代码。这里不得不提到与其相反的概念,Service as a Software Substitute以及专有软件。后者就是我们日常中使用的vs code之类的软件,我们没办法拿到这类软件的源代码,我们也很难知道这个代码到底做了什么。比如windows和mac常常需要我们发送错误报告等等的行为,这其实是具有安全隐患的,无形中可能泄露了我们的用户隐私。至于Service as a Software Substitute则是通过服务来代替软件,这就需要我们将用户数据发到服务器中,甚至一切计算都是在服务器中进行的,如果把用户隐私比喻为钱,专有软件是可能偷到钱,而SaaSS是我们将钱直接送到别人的服务器中。因此开源除了体现互联网的共享精神,让用户自由的修改源代码以外,最重要的也是对我们用户隐私安全的一种保证,我们充分了解程序可能做了什么,而不是对运行的代码一无所知。
商业中的开源协议
为了规范开源的不同应用场景,因此也出现了各种类型的开源协议。这里将多个开源协议简单的根据各自的特点分个类。
这里详细说下GPL(通用公共许可协议),相对于合同,GPL更像是一个许可证,两者的区别是许可证只是允许你做一些你原本不会被允许做的事情。例如,当我想去钓鱼时,我必须从当地市政当局获得钓鱼许可证。 而合同需要互惠义务,比如说政府给我许可证,但我需要分给政府一半我钓的鱼。
当然这并不意味着获得许可证的我不需要履行任何义务,还是以钓鱼许可证为例,政府可能会规定我钓鱼的时期,种类等限制,如果我没有遵守,那恐怕就要收回我的许可证了。GPL也是一样,GPL第三版中文文档简明扼要的讲解了自己的许可的权利与对应的义务:
所谓自由软件,强调自由,而非免费。本GNU通用公共许可协议设计用于确保你享有分发自由软件的自由(你可以为此服务收费),确保你可以在需要的时候获得这些软件的源码,确保你可以修改这些软件或者在新的自由软件中复用其中某些片段,并且确保你在这方面享有知情权。
为保障你的权益,我们需要作一些限定:禁止任何人否认你的上述权利,或者要求你放弃它们。因此,当你分发或修改这些软件时,你有一定的责任——尊重他人的自由。如果你分发这种程序的副本,无论收费还是免费,你必须给予与你同等的权利。你还要确保他们也能收到源码并了解他们的权利。
听起来像是说GPL会像病毒一样传染,但其实并不是这样吓人,这也是很多人的对GPL的一个误解了,事实上正如上面所强调的一样,GPL仅仅是确保你具有分发软件的自由以及对应的义务,换句话说,你可以选择替换掉GPL对应的代码,或者停止继续分发:
十二、不得牺牲他人的自由
即便你面临与本协议条款冲突的条件(来自于法庭要求、协议或其他),那也不能成为你违背本协议的理由。倘若你不能在转发受保护作品时同时满足本协议和其他文件的要求,你就不能转发本程序。例如,当你同意了某些要求你就再转发问题向你的转发对象收取版税的条款时,唯一能同时满足它和本协议要求的做法便是不转发本程序。
利用遵守GPL协议的代码作为训练集,训练出来的算法是否收到GPL的约束呢?
似乎这种情况更加符合GPL的Object Code:
目标码形式的作品中“相应的源码”指所有修改作品及生成、安装、运行(对可执行作品而言)目标码所需的源码,包括控制上述行为的脚本。
那么该算法也理应收到GPL中对Object Code所规定的约束。当然,这种“其他形式”的声明总是有可扯皮的空间。
不过这题也可以从另一个角度来解,那便是github本身,是否具有将用户上传的代码作为数据集的权利
github对用户上传的内容,具有何种权利
在github的服务条款中,github规定了他对用户上传内容所享有的权利:
4. 向我们授予许可
我们需要合法的权利来为您服务,例如托管、发布以及分享您的内容。 您授权我们和我们的合法继承者存储、存档、解析和显示您的内容,以及制作附带副本,但限于提供服务的目的,包括逐步改进服务。 此许可包括如下权利:将您的内容复制到我们的数据库并制作备份;向您及其他用户显示;将其解析为搜索索引或在我们的服务器上分析;与其他用户分享;执行(如果您的内容是音乐或视频之类的内容)。
此许可不授予 GitHub 出售您的内容的权利。 它也不授予 GitHub 出于提供服务之外的目的分发或使用您的内容的权利,但作为存档内容的权利的一部分,GitHub 可能允许我们的合作伙伴在与 GitHub Arctic Code Vault 和 GitHub Archive Program 相关联的公共仓库中存储和存档您的内容。
条款中限定了自己在服务器上分析用户上传内容的尺度——仅仅用于Github为用户提供服务的范畴。