前两天看到 iOS 上的网络调试工具 Potatso 的开发者发的这条微博。暂时抛开 Pin 这件事不说,相信很多人都知道 Potatso 这款 iOS 上的网络调试工具,也知道开发者在一代时就开放了 Potatso 的源代码。其实不止是微博中这位「开发者」抄袭了 Potatso 两次,因为完全开源,还有许多所谓的「开发者」完全抄袭了 Potatso 的源代码,并且将抄袭的 App 发布在 App Store 中销售。 可能有人会问,既然是开源,我用 Potatso 的源代码打包成 App 发布在 App Store 有什么问题呢?
什么是开源
要弄明白上面这个问题,我们先要了解,「开源」是什么。 「开源」的英文原称是 Open Source,它指的是一种软件发布模式,而相对应的,以开源形式发布的软件则被叫做开源软件,即 Open Source Software。 简单地说,只要软件采用了开源形式进行分发,我们就可以任意获取开源软件的开源代码,而开源软件的版权持有者在开放源代码的同时,可以在其指定开源协议的规定下保留对于软件源代码的部分权利;而在能够自由获取软件开源代码的同时,用户也能够利用软件的开源代码进行学习、修改甚至是再次分发。 我们平常经常会听到的 GitHub、GitLab 就是两个非常知名的全球开源社区以及开源工具,上文提到的 Potatso 就在 GitHub 上开放了源代码,只不过因为大量开发者不遵守 Potatso 当时的 GPL 开源协议的规定、滥用源代码的行为,开发者在第二代 Potatso 上架后改为了闭源的模式,并删除了之前的开源代码。
什么是开源协议?为什么许多 App 都选择 GPL 开源协议?
开源协议
如上文所说,虽然用户可以自由获取你以开源形式发布的软件源代码,但是你仍然可以在相关开源协议规定的保护下保留一部分的权利,更重要的是,有了开源协议,它还可以阻止其他人将你的开源产品「据为己有」。
目前,开源界的开源许可证,大概有上百种,几乎很难全部搞清楚它们各自的分别。即使是现在六大主流的开源许可协议,也非常复杂,它们分别是:
- MIT
- BSD
- GNU GPL
- GNU LGPL
- Apache
- Mozilla
这里再简单介绍一种知识共享 (Creative Commons) 的授权方式,严格意义上说,它并不属于上面说的开源许可证的任何一种。相信不少读者一定知道著名的图片共享社区 Unsplash,任何用户都可以使用 Unsplash 上的照片进行个人或者商业上的使用而不需要支付任何费用。它采用的就是 Creatice Commons 授权方式中的 CC0 授权方式,采用这种方式,授权方不保留任何权利,你可以尽情使用采用这种授权方式提供的内容。 值得一提的是,相比于 Unsplash,另一款图像素材工具 Zoommy 整合了超过 40 个采用 CC0 授权的图像源,其中当然也包括 Unsplash,它支持 Windows 和 macOS 双平台,你可以用 Zoommy 在一个地方非常方便地找到你想要的图像,而不需要依次打开各个网站寻找,「数码荔枝」也上架了这款好用的图像素材工具,售价 39 元起,你可以在「数码荔枝」商城购买它。
为什么选择 GPL 协议
为什么包括 Potatso 在内的许多 App 都选择采用 GPL 开源协议呢?这就要说到 GPL 协议本身的规定和特点了。
GNU GPL 开源协议全称为 GNU General Public Licence,它在为开源代码的使用者提供了足够的复制、修改以及分发权利的同时,也保障了开发者本身对于开源代码的权益。使用 GPL 开源协议,有以下特点:
- 你可以自由复制开源代码至你的电脑、你客户的电脑或者其它任何设备上,并且没有复制份数的限制;
- 你可以自由分发你复制下来的开源代码;
- 你可以自由修改开源代码;
- 如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议进行开源。
- 你可以在你自己的网站上提供开源代码的下载,或者通过外部存储设备存储开源代码赠送给他人;
- 你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
需要注意的是,在分发复制下来的开源代码的时候,你需要明确提供源代码和对应的二进制文件,另外,使用 GPL 协议,你必须在源代码中包含必要的信息,以及 GPL 协议本身。
也就是说,如果任何人复制了你的开源代码进行二次分发的过程中,他必须同样将自己修改或者分发的代码以 GPL 协议的形式进行开源。这样,任何下载了经过二次分发的源代码的用户都能够知道并找到这份源代码最原始的出处,自然能够保障开发者本身的权益。
关于 GPL 开源协议,目前它的版本已经升级 3.0 版本,也就是我们常常看到的 GPL v3,关于 GPL 开源协议更多详细的说明和细节,你可以在它的官网继续查看了解。
防君子不防小人
虽然 GPL 开源协议能够切实保护开发者自身的权益,并让开源代码的使用者享受到使用开源代码的各种便利,但其实这一方法的作用也只是做到了「防君子不防小人」。 两年多前,国内手机生产制造商小米公司就曾因屡次违反开源协议条例遭受开源社区的指责。小米公司旗下基于原生 Android 操作系统开发的 ROM MIUI 在修改了 Linux 内核源代码的基础上,却没有公开其源代码,而后者采用的 GPL 开源协议要求使用者修改过的代码也必须要以 GPL 协议进行开源。对此,小米给出的理由是害怕产品信息泄漏,所以没有公开相关源代码。 姑且不论这会不会导致小米的产品信息遭到泄漏,这一做法本身就已经违反了 GPL 开源协议的种种规定。但是,因为开源协议更像是一份公约,它不是任何形式的商业合同,很难对违反协议的源代码使用者进行合理的法律追责。而之前 Potatso 遭到许多开发者直接抄袭源代码并且在 App Store 上闭源进行销售,开发者之后删除所有开源代码的行为多少也是一种无奈之举。
我的项目适合哪种开源协议?
开发者将自己的代码开源,不仅方便了其他用户获取源代码以便学习、修改甚至是开发出自己需要的工具,另一方面,开源项目也能在许多人的共同维护下变得越来越好,开发者自己也能够从中学习与进步。但是在开源之前,确定好自己的项目该使用哪种开源协议,以保证自己对开源代码能够获得充分的权利与权益也是非常重要的一项措施。 为了让各位开发者能够更方便地使用开源协议开源自己的项目代码,GitHub 也推出了专门的工具,能够让你根据自己的需求,准确找到适合自己的开源协议。你可以在这里使用这款非常方便的工具。 总之,如果你是个人开发者,想要将自己的项目代码进行开源,GPL 应该会是你大部分情况下最好的选择。 参考链接