文章作者曲凌刚,计算机专业背景,专注于软件著作权、源代码技术秘密、软件开发合同、开源软件合规,超过15年法律服务经验。
注:以下问题及解答整理自GNU官方网站
答:为了把两个程序(或者其主要部分)合成一个较大的程序,你需要某种许可才能做得到。如果这两个程序的许可证允许这么做,那么它们就是兼容的。如果无论如何都不能同时满足两个许可证,那么它们就是不兼容的。
对有些许可证来说,程序合成的方式也会影响许可证是否兼容—例如,它们可能允许把两个模块连接在一起,但是不允许把两个代码合成一个模块。
如果你只是想把两个程序安装到同一个系统中,那么它们的许可证没有必要是兼容的,因为安装并不是把它们合成一个大的程序。
答:只是在软件库里放一份带有GNU GPL许可证拷贝的文件并不算明确声明在该软件库里的所有代码都可以按照GNU GPL来使用。而缺少明确的声明,意味着并不能完全清楚地界定GPL许可证是否真的适用于各个具体的源代码文件。一份明确的声明会使这一切清清楚楚。
一个只包含许可证的文件,其中没有明确说明具体其他文件遵循该许可证,就像是一个带有一个子程序的文件,而该子程序从来不被其他程序调用。这个比喻也不完美:律师和法庭可能会根据常识判定因为你想让代码使用该许可证才把GNU GPL的拷贝放在代码库里。他们也有可能不这样判断。但是,你为什么留下这样的问题呢?
你应该在每个源文件里包含这样的声明。在程序的README文件里明确说明也是充分有效的,只要该声明和源代码是在一起发布的,但是它们很容易被分别处置。为什么要冒让你的代码的许可证不能确定的风险呢?
这个问题并不是专门针对GNU GPL许可证的。任何自由许可证都有这个问题。
答:我们不这么做是有原因的。这会导致将来某一天用户以前有的一些许可被自动收回了。
假设某个程序在2000年按照 “最新的 GPL 版本” 发布。当时,用户可以在 GPLv2 下使用该程序。我们在2007年发布了 GPLv3,所有人突然就必须在 GPLv3 下使用了。
有些用户可能根本就不知道 GPL 版本 3——但是他们还是被要求按照版本 3 来使用软件。这些用户可能无意中已经违反了许可证条款,只是因为他们不知道有新的许可证版本。这对他们不公正。
除非是因为有违反许可证的情况,我们认为收回已经授予的许可是错误的。如果自由可以撤销,那么它就不是真正的自由。因此,如果你在某个许可证版本下得到了软件,那么你就应该 一直拥有在该许可证版本下被授予的权利。按照 “GPL 版本 N 或者任何以后的版本” 发布维持了这个原则。
答:你需要保证用户在你的界面上可以访问到 GPLv3 所要求的适当法律声明。例如,如果你写的是有声界面,那么你可以设计一个朗读声明的命令。
答:如果该版本已经发布了,那么窃贼或许有权制作拷贝并按照 GPL 再发布,但是如果窃贼因为盗窃 CD 入狱了,那么可能只好等他出来再发布了。
如果被盗的版本没有公开,并且有公司认为它是商业机密,那么发布该版本可能在此情况下就是违反了商业机密法。GPL 并不改变这一点。如果该公司要发布该版本并且仍然把它看作是商业机密,那么该公司就违反了 GPL;但是如果该公司没有发布该版本,那么它就没有违反 GPL。