开源软件许可协议使用指南
1. 新程序应用条款方法
如果你开发了一个新程序,并希望它能对公众发挥最大作用,最佳方式是将其变为自由软件,让每个人都能根据相关条款重新分发和修改。要实现这一点,需在程序中添加以下声明:
one line to give the program’s name and a brief idea of what it does.
Copyright (C) yyyy name of author
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
同时,添加通过电子和纸质邮件联系你的信息。
若程序是交互式的,在其以交互模式启动时,应输出如下简短声明:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
type `show w’. This is free software, and you are welcome
to redistribute it under certain conditions; type `show c’
for details.
假设的命令
show w
和
show c
应显示通用公共许可证的相应部分。当然,你使用的命令可以是其他名称,也可以是鼠标点击或菜单项,只要适合你的程序即可。
你可能还需要让你的雇主(如果你是程序员)或学校(如果适用)为该程序签署“版权声明”。以下是一个示例,可修改其中的名称:
Yoyodyne, Inc., hereby disclaims all copyright
interest in the program `Gnomovision’
(which makes passes at compilers) written
by James Hacker.
<signature of Ty Coon, 1 April 1989
Ty Coon, President of Vice
2. GNU 通用公共许可证与 GNU 宽通用公共许可证
通用公共许可证不允许将你的程序合并到专有程序中。但如果你的程序是一个子程序库,允许专有应用程序与该库链接可能更有用。在这种情况下,可使用 GNU 宽通用公共许可证(Lesser General Public License)而非普通的通用公共许可证。
GNU 宽通用公共许可证版本 2.1 于 1999 年 2 月发布。大多数软件许可证旨在剥夺你共享和修改软件的自由,而 GNU 通用公共许可证则旨在保障你共享和修改自由软件的自由,确保软件对所有用户都是自由的。
当我们提及自由软件时,指的是使用自由,而非价格免费。通用公共许可证确保你有以下自由:
- 分发自由软件的副本(并可根据意愿为此服务收费)。
- 接收源代码,或在需要时获取它。
- 修改软件,并在新的自由程序中使用其部分内容。
- 知晓自己拥有这些权利。
为保护你的权利,我们设置了一些限制,禁止分发者剥夺你的这些权利或要求你放弃这些权利。如果你分发库的副本或对其进行修改,这些限制将转化为你的某些责任。例如:
- 若你分发库的副本,无论免费还是收费,都必须给予接收者你所拥有的所有权利,并确保他们能够接收或获取源代码。
- 若你将其他代码与库链接,必须向接收者提供完整的目标文件,以便他们在对库进行更改并重新编译后,能将其与库重新链接。同时,必须向他们展示这些条款,让他们了解自己的权利。
我们通过两步方法保护你的权利:
1. 对库进行版权保护。
2. 提供此许可证,给予你合法复制、分发和/或修改库的权限。
为保护每个分发者,需明确免费库没有任何保证。此外,如果库被他人修改并传递,接收者应知晓他们所拥有的并非原始版本,以免原作者的声誉受到他人引入问题的影响。
软件专利对任何自由程序的存在构成持续威胁。我们要确保公司不能通过从专利持有者处获得限制性许可证来有效限制自由程序的用户。因此,我们坚持为库的某个版本获得的任何专利许可证必须与本许可证规定的完全使用自由相一致。
大多数 GNU 软件,包括一些库,受普通 GNU 通用公共许可证的保护。GNU 宽通用公共许可证适用于某些指定的库,与普通通用公共许可证有很大不同。我们对某些库使用此许可证,是为了允许将这些库链接到非自由程序中。
当一个程序与一个库链接时,无论是静态链接还是使用共享库,从法律上讲,两者的组合是一个组合作品,是原始库的衍生作品。普通通用公共许可证仅在整个组合符合其自由标准时才允许这种链接。而宽通用公共许可证允许在将其他代码与库链接时采用更宽松的标准。
我们称此许可证为“宽”通用公共许可证,是因为它在保护用户自由方面不如普通通用公共许可证,并且为其他自由软件开发者提供的相对于竞争非自由程序的优势也较少。这些劣势是我们对许多库使用普通通用公共许可证的原因。然而,宽许可证在某些特殊情况下具有优势,例如:
- 极少数情况下,可能需要鼓励尽可能广泛地使用某个库,使其成为事实上的标准。为实现这一目标,必须允许非自由程序使用该库。
- 更常见的情况是,一个自由库与广泛使用的非自由库完成相同的工作。在这种情况下,仅将自由库限制在自由软件中使用收益不大,因此我们使用宽通用公共许可证。
- 在其他情况下,允许在非自由程序中使用特定库可使更多人使用大量自由软件。例如,允许在非自由程序中使用 GNU C 库可使更多人使用整个 GNU 操作系统及其变体 GNU/Linux 操作系统。
尽管宽通用公共许可证对用户自由的保护较少,但它确实确保了与库链接的程序的用户有权使用修改后的库版本运行该程序。
3. 复制、分发和修改的具体条款与条件
以下是复制、分发和修改的精确条款和条件,需密切关注“基于库的作品”和“使用库的作品”之间的区别。前者包含从库派生的代码,而后者必须与库结合才能运行。
| 条款 | 说明 |
|---|---|
| 0. 适用范围 | 本许可协议适用于任何包含版权持有者或其他授权方声明可根据本宽通用公共许可证条款分发的软件库或其他程序。每个被许可方称为“你”。“库”指为方便与应用程序链接以形成可执行文件而准备的软件功能和/或数据集合。“基于库的作品”指库本身或版权法下的任何衍生作品。“源代码”指便于对作品进行修改的首选形式。 |
| 1. 复制和分发源代码 | 你可以按收到的原样,在任何介质中复制和分发库的完整源代码副本,但需显著且适当地在每份副本上发布适当的版权声明和无保证声明,保留所有提及本许可证和无任何保证的声明,并随库一起分发本许可证的副本。你可以对复制的物理传输行为收取费用,并可选择收取费用提供保证保护。 |
| 2. 修改和分发 |
你可以修改库的副本或其任何部分,形成基于库的作品,并根据上述第 1 条的条款复制和分发此类修改或作品,但需满足以下条件:
a) 修改后的作品本身必须是一个软件库。 b) 必须使修改的文件带有显著声明,说明你修改了文件及修改日期。 c) 必须使整个作品根据本许可证的条款免费授权给所有第三方。 d) 如果修改后的库中的某个功能引用了使用该功能的应用程序要提供的函数或数据表(而非调用该功能时传递的参数),则你必须真诚努力确保在应用程序未提供此类函数或表的情况下,该功能仍能运行,并完成其有意义的部分目的。 |
| 3. 选择适用普通 GNU 通用公共许可证 | 你可以选择对库的给定副本应用普通 GNU 通用公共许可证的条款。为此,必须更改所有提及本许可证的声明,使其提及普通 GNU 通用公共许可证版本 2(如果有比版本 2 更新的版本,你也可以指定该版本),且不得对这些声明进行其他更改。一旦对给定副本进行了此更改,该副本将不可逆转地适用普通 GNU 通用公共许可证,所有后续副本和衍生作品也将适用。此选项在你希望将库的部分代码复制到非库程序中时很有用。 |
| 4. 复制和分发目标代码或可执行形式 | 你可以根据上述第 1 条和第 2 条的条款,以目标代码或可执行形式复制和分发库(或根据第 2 条的部分或衍生作品),但需随附完整的相应机器可读源代码,该源代码必须根据上述第 1 条和第 2 条的条款,在通常用于软件交换的介质上分发。如果通过提供从指定位置复制的访问权限来分发目标代码,那么提供从同一位置复制源代码的等效访问权限即满足分发源代码的要求,即使第三方不被强制随目标代码一起复制源代码。 |
| 5. “使用库的作品” | 一个不包含库任何部分衍生内容,但设计为通过编译或链接与库一起工作的程序,称为“使用库的作品”。此类作品单独存在时,不是库的衍生作品,因此不在本许可证的范围内。然而,将“使用库的作品”与库链接会创建一个可执行文件,该可执行文件是库的衍生作品(因为它包含库的部分内容),因此受本许可证的保护。第 6 条规定了此类可执行文件的分发条款。当“使用库的作品”使用库的头文件中的材料时,该作品的目标代码可能是库的衍生作品,即使源代码不是。这是否成立在法律上没有精确界定。如果此类目标文件仅使用数值参数、数据结构布局和访问器、小宏和小内联函数(长度不超过十行),则对该目标文件的使用不受限制,无论它在法律上是否为衍生作品。(包含此目标代码和库部分内容的可执行文件仍受第 6 条的约束。)否则,如果该作品是库的衍生作品,你可以根据第 6 条的条款分发该作品的目标代码。任何包含该作品的可执行文件也受第 6 条的约束,无论它们是否直接与库本身链接。 |
以下是复制、分发和修改流程的 mermaid 流程图:
graph LR
A[开始] --> B{是否复制和分发源代码}
B -- 是 --> C[按规则复制和分发]
B -- 否 --> D{是否修改库}
D -- 是 --> E[满足条件修改并分发]
D -- 否 --> F{是否选择普通GNU许可证}
F -- 是 --> G[更改声明并适用]
F -- 否 --> H{是否复制和分发目标代码}
H -- 是 --> I[随附源代码分发]
H -- 否 --> J{是否是使用库的作品}
J -- 是 --> K{是否链接库}
K -- 是 --> L[按第6条分发]
K -- 否 --> M[不在许可证范围]
J -- 否 --> N[结束]
C --> N
E --> N
G --> N
I --> N
以上是关于开源软件许可协议使用的上半部分内容,涵盖了新程序应用条款、两种许可证的特点以及复制、分发和修改的部分条款与条件。下半部分将继续介绍其他重要条款和特殊情况。
开源软件许可协议使用指南
4. 特殊情况的处理条款
除了上述基本的复制、分发和修改条款外,还有一些特殊情况的处理方式:
|条款|说明|
| ---- | ---- |
|6. 组合或链接“使用库的作品”|作为上述条款的例外,你可以将“使用库的作品”与库组合或链接,以产生包含库部分内容的作品,并根据你选择的条款分发该作品,但这些条款必须允许客户为自己的使用修改作品,并为调试此类修改进行逆向工程。你必须在每份作品副本上显著声明该作品使用了库,且库及其使用受本许可证的保护,并提供本许可证的副本。如果作品在执行时显示版权声明,你必须在其中包含库的版权声明,以及指向本许可证副本的引用。此外,你必须执行以下操作之一:
a) 随作品提供库的完整相应机器可读源代码,包括作品中使用的任何更改(必须根据上述第 1 条和第 2 条的条款分发);如果作品是与库链接的可执行文件,还需提供完整的机器可读“使用库的作品”,以目标代码和/或源代码的形式,以便用户可以修改库,然后重新链接以生成包含修改后库的可执行文件。
b) 使用合适的共享库机制与库链接。合适的机制是指在运行时使用用户计算机系统上已有的库副本,而不是将库函数复制到可执行文件中,并且只要修改后的版本与作品创建时使用的版本接口兼容,就可以与修改后的版本正常运行。
c) 随作品提供一份书面报价,有效期至少三年,以不超过执行此分发成本的费用向同一用户提供上述 a 项中指定的材料。
d) 如果通过提供从指定位置复制的访问权限来分发作品,则提供从同一位置复制上述指定材料的等效访问权限。
e) 验证用户已经收到这些材料的副本,或者你已经向该用户发送了一份副本。对于可执行文件,“使用库的作品”的所需形式必须包括从其再现可执行文件所需的任何数据和实用程序。但是,作为特殊例外,要分发的材料不必包括通常与可执行文件运行所在操作系统的主要组件(编译器、内核等)一起分发(无论是源代码还是二进制形式)的任何内容,除非该组件本身随可执行文件一起提供。|
|7. 组合不同库设施|你可以将基于库的作品的库设施与其他不受本许可证涵盖的库设施并排放在一个库中,并分发这样的组合库,但前提是基于库的作品和其他库设施的单独分发在其他方面是允许的,并且你要执行以下两件事:
a) 随组合库提供一份未与任何其他库设施组合的基于库的作品的副本,该副本必须根据上述条款分发。
b) 在组合库上显著声明其中一部分是基于库的作品,并说明在哪里可以找到该作品的未组合形式。|
|8. 禁止行为|你不得复制、修改、转许可、链接或分发库,除非本许可证明确允许。任何违反此规定的复制、修改、转许可、链接或分发库的尝试均无效,并将自动终止你在本许可证下的权利。但是,从你处根据本许可证获得副本或权利的各方,只要这些方完全遵守规定,其许可证将不会终止。|
|9. 接受许可|你无需签署本许可证,但没有其他方式授予你修改或分发库或其衍生作品的权限。如果你不接受本许可证,这些行为将被法律禁止。因此,通过修改或分发库(或任何基于库的作品),你表示接受本许可证及其所有复制、分发或修改库或基于库的作品的条款和条件。|
|10. 再分发权利|每次你重新分发库(或任何基于库的作品)时,接收者将自动从原始许可方获得根据这些条款和条件复制、分发、链接或修改库的许可证。你不得对接收者行使此处授予的权利施加任何进一步的限制。你无需负责强制第三方遵守本许可证。|
|11. 冲突处理|如果由于法院判决、专利侵权指控或任何其他原因(不限于专利问题),对你施加的条件与本许可证的条件相矛盾,这些条件不能免除你遵守本许可证的义务。如果你无法同时满足本许可证和任何其他相关义务,那么你可能根本无法分发库。例如,如果专利许可证不允许所有直接或间接通过你接收副本的人免费重新分发库,那么你同时满足该专利许可证和本许可证的唯一方法是完全停止分发库。如果本节的任何部分在任何特定情况下被认定为无效或不可执行,本节的其余部分仍应适用,并且本节整体应适用于其他情况。本节的目的不是诱导你侵犯任何专利或其他财产权主张,也不是质疑任何此类主张的有效性,而是保护通过公共许可实践实施的自由软件分发系统的完整性。许多人基于该系统的一致应用,为通过该系统分发的广泛软件做出了慷慨贡献;由作者/捐赠者决定是否愿意通过任何其他系统分发软件,被许可方不能强加该选择。|
|12. 地理限制|如果库的分发和/或使用在某些国家受到专利或版权接口的限制,将库置于本许可证下的原始版权持有者可以添加明确的地理分发限制,排除这些国家,以便仅允许在未被排除的国家内或之间进行分发。在这种情况下,本许可证将包含该限制,就像它写在本许可证正文中一样。|
|13. 版本更新|自由软件基金会可能会不时发布宽通用公共许可证的修订版和/或新版本。新版本将与当前版本在精神上相似,但可能在细节上有所不同,以解决新问题或关注点。每个版本都有一个独特的版本号。如果库指定了适用于它的本许可证的版本号以及“任何更高版本”,你可以选择遵循该版本或自由软件基金会发布的任何更高版本的条款和条件。如果库未指定许可证版本号,你可以选择自由软件基金会发布的任何版本。|
|14. 特殊整合情况|如果你希望将库的部分内容整合到其他分发条件与本许可证不兼容的自由程序中,你需要写信给作者请求许可。|
5. 总结
开源软件许可协议对于保障软件的自由使用、分发和修改至关重要。GNU 通用公共许可证和 GNU 宽通用公共许可证为开发者提供了不同的选择,以适应不同的开发需求和场景。在开发和分发软件时,开发者需要仔细遵循这些许可证的条款和条件,确保自己和用户的权益得到保护。
以下是一个总结上述条款的 mermaid 流程图:
graph LR
A[开发与分发软件] --> B{选择许可证}
B -- GNU GPL --> C[遵循严格自由标准]
B -- GNU LGPL --> D[适用库链接非自由程序]
C --> E[遵守复制、分发、修改规则]
D --> F[按LGPL条款操作]
F --> G{是否有特殊情况}
G -- 是 --> H[按对应条款处理]
G -- 否 --> I[正常分发]
E --> I
H --> I
I --> J[结束]
通过对开源软件许可协议的深入理解和正确应用,开发者可以更好地推动自由软件的发展,促进软件技术的共享和创新。希望本文能帮助你在开源软件开发和分发过程中做出正确的决策。
超级会员免费看
466

被折叠的 条评论
为什么被折叠?



