1. 什么是Copyleft?
Copyleft通常被翻译成“著佐权”,是一种让程序或其它作品保持自由的通用方法。
Copyleft是指任何人都可以重新分发软件,不管有没有进行修改,但必须同时保留软件所具有的自由特性。
Copyleft化用了法律上著作权(Copyright)的概念。一个程序遵循Copyleft,我们首先声明它是有版权的;然后,我们给它加上发布的规则,这个规则就是一个法律声明,它赋予所有人有使用、修改和重新发布程序的代码及其衍生作品的权利,但要求在这个过程中发布规则是不可以改变的。
Copyleft 是一个通用的概念,在不同的许可证中都有具体的条款去细化和定义它。
2. 代码库中包含了许可证拷贝是不是就意味着应用了对应的许可证?
只是在软件库里放一份带有许可证拷贝的文件并不算明确声明在该软件库里的所有代码都可以按照该许可来使用。而缺少明确的声明,意味着并不能完全清楚地界定许可证是否真的适用于各个具体的源代码文件。
一个只包含许可证的文件,其中没有明确说明具体其他文件遵循该许可证,就像是一个带有一个子程序的文件,而该子程序从来不被其他程序调用。
正确的许可证使用方法是在每个源文件里包含许可证使用的声明。在程序的README文件里明确说明也是充分有效的。
3. 怎么理解两个许可证是“兼容的”?
为了把两个不同许可的程序(或者其主要部分)合成一个较大的程序,你需要某种许可才能做得到。如果这两个程序的许可证允许这么做,那么它们就是兼容的。如果无论如何都不能同时满足两个许可证,那么它们就是不兼容的。
对有些许可证来说,程序合成的方式也会影响许可证是否兼容—例如,它们可能允许把两个模块连接在一起,但是不允许把两个代码合成一个模块。
4. 使用了GPL代码的程序必须要开源吗?
GPL许可证限制用户开源其代码仅仅在代码发布阶段。因此,将GPL代码用于自用或内部使用并不在GPL限制范围。关于分发的定义,GPL条款中有明确说明。
此外,判断GPL代码与其他代码是否构成组合程序也是判断GPL是否传染的重要标准。
5. 什么时候一个程序和它的插件会被认为是一个单一的结合在一起的程序?
这依赖于主程序如何调用插件。如果主程序使用fork和exec调用插件,它们之间通过共享或交换复杂数据结构而建立了密切的通信,这样它们就是一个单一的结合在一起的程序。如果主程序使用的是简单的fork和exec调用插件,并没有建立密切的通信,那么插件就是一个单独的程序。
如果主程序动态连接了插件,而且它们之间互相调用函数并共享数据结构,那么我们认为它们构成了一个单一的组合程序。如果主程序动态连接了插件,但是它们之间的通信限于调用插件的main函数及其参数并等待其返回,那么这就是个可以算单一组合程序也可以算两个独立程序的临界情况,需要进一步考察两部分的实质结合情况做出进一步判断。
6. 许可证中的版权与许可证发布机构有什么关系?
开源代码的版权所有者在发布开源软件时可以选择任意的版权所有,可以是开源软件的作者及其贡献者。也可以是许可证的发布机构。通常GPL许可证会建议版权所有者将代码贡献给自由软件基金会(FSF)或做出免责声明,使得其程序的版权状态较为简单,从而在可能出现的法律抗辩中处于有利位置。
7. 翻译成其他语言的源代码也需要遵守原有的许可协议吗?
按照版权法,作品的翻译也是一种修改。因此,原许可证对修改版的规定也适用于翻译版。翻译版处在原版的版权范围之内。
8. 使用GPL必须公开修改版的源代码吗?
GPL不要求你发布你的修改版或者任何一部分修改版。你可以自由修改GPL源码并自用,而不必发布。这个规则也适用于机构(包括公司);机构可以做出修改版并在内部使用而不向其他外部组织发布。
但是如果你以某种方式把修改版向公众发布,GPL就要求你向用户提供修改版的源代码。
9. 许可证可以不用于软件源代码吗?
通常来说,开源许可证可以用于任何作品形式,只要解释清楚什么是该作品的“源代码”即可。比如,GPL许可将源代码定义为修改作品的首选形式。