大家都知道:你调用了 LGPL的库,你还是可以开发一个闭源程序。
这就说明,LGPL比GPL要宽松。
但并不像想象的那么简单。
一、为什么会有LGPL
作为GPL的发明人Stallman,是自由软件的死忠坚定维护者,为什么还允许让别人用了自己的东西还能闭源?
是的,他也并不喜欢LGPL,但这是争取用户的办法,他自己说过,自由软件库要和其他库竞争,如果其他库允许别人闭源,而他的不允许,那他显然占下风啊。
Stallman在GNU网站上说:“这就是为什么我们对GNU C库使用LGPL的原因。毕竟,世界上有那么多的C函数库;让我们的C库使用GPL许可证会迫使专有软件的开发者去使用其他的C库—对他们不是问题,对我们则是。然而,当一个函数库提供了一个重要并独一无二的功能的时候,像GNU Readline,这又是另一回事了。”
这就是LGPL推出的心理动机。
注意:本文只是解读LGPLv3,而不是LGPL的其他版本。
本文以下所说的LGPL,指的就是LGPLv3;说的GPL,指的就是GPLv3。
二、LGPLv3简单吗
按道理,LGPL作为一个比GPL宽松的协议,应该不会很难,但这个许可证却写得很难读。
对于开源或知识产权相关工作者,不读还不行,因为可能一不小心掉坑里。
我翻译过一些许可证,没见过像LGPL这么不说人话的。一般人直接看,肯定是看不懂的。这个许可证只说结论,毫不解释,别说不太懂许可证的人看不懂,就是懂许可证的人看,也会很头疼。
于是我决定将LGPLv3翻译为人话版,让大家可以少走一点弯路,少伤一点脑筋。
有人说,GNU官网上不是挂了一个LGPL中文版1吗?
首先,那个版本并不是GNU官方认可的翻译版,GNU官方明确声明他们从来不会认可任何一个翻译版。其次,那个版本我读了,可读性很低,错误百出。建议不要阅读它。
三、LGPLv3主要想说啥
GPL是比较严格的,LGPL是在GPL基础上做了一些退让和放松(放在额外的条款中)。具体而言,就是某些场景下不感染别人了。
简要总结一下,LGPLv3主要想说的是:
1、如果你动态链接了我,我不感染你,你说明你用了我就行。
2、如果你静态链接了我,我不太感染你,但你得提供你应用程序的目标码,有时甚至需要提供源码,以便于我修改本库后,还能和你链接在一起。
3、如果你只用了我的头文件(而不调用我的库),那我不感染你。用的少的话,你无需做什么;如果用的比较多,你要说明你用了我。
4、和我组合在一起的库,我也不感染,但里面基于我的那部分要单独拿出来附上。
5、如果你改进了我,按LGPL或者GPL发布我。
我:本库,即使用LGPL许可证的库;或本库的分发人。
你:使用本库的应用程序;或本库的用户。
这里再额外说明一点,使用LGPL许可证的软件一般都是库,以API形式向用户提供某些功能(facility),可以是静态库,也可以是动态库,而且都提供源码。
在协议文本中,LGPL说“你可以使用你选择的条款”,那就是说“我不感染你”,就是给你自由。
四、LGPLv3全文翻译
注:原文来自:
https://www.gnu.org/licenses/lgpl-3.0.txt
注:本文按章节顺次进展,排列顺序为:英文原文,人话翻译,人话解读。
在本文最后,附上我给出的正经翻译。
现在开始:
原文开头
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright © 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.
人话翻译:
LGPLv3在此!
第3版 2007年6月29日
许可证本身的版权归FSF所有。
关于本许可证的许可:你可以复制和发布本文件,但不能修改一字!
LGPLv3包含GPLv3所有条款和条件,并补充了一些额外的许可条款。
下面就是那些补充的内容。
人话解读:
1、 LGPLv3是包含GPLv3的,现在看到的这个文本并不是完整的LGPL,只是其中一小部分。
可以在脑海中建立这样的概念:
LGPLv3 = GPLv3 + 补充条款
。(本文的0~6条都是补充条款)。 简单地说,LGPL隐含了GPL。2、 如果GPL中的条款和补充条款有不一致的地方,以补充部分的为准。
3、 这种方式体现了程序员的思维,也即:复用、引用,而不是重复再说一遍。
4、 GPLv3的人话解读见《人话解读GPLv3》
原文第0条
0. Additional Definitions.
As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License.
“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.
An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.
A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”.
The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.
The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.
人话翻译:
第〇条 补充定义
“本许可证”指的就是LGPLv3。
“GPL”指的就是GPLv3。
“本库”指的就是本许可证所保护的作品。
“应用程序”是指任何调用本库所提供接口但不基于本库的作品。在本库定义的类之下,定义一个子类,视作调用本库提供的接口。
“组合作品”是指“本库”和“应用程序”组合或链接在一起而产生的作品。组合作品中本库的版本被称为“被链接版本”。
“最小对应源码”是指在组合作品中,剔除单纯是基于应用程序的源码。
“对应应用程序代码”是指在组合作品中,应用程序的目标码和/或源码。包括在生成组合作品时所必要的数据和实用程序,但不包括系统库。
人话解读:
1、注意这里仅仅是额外的定义,其他的定义放在隐含的GPL里面,比如convey(分发)、covered work(受保护作品)等的定义,这里就不再重复定义了。
2、
在这里,“this License”被重新定义为LGPL
,所以包含的GPL文本中的“this License”也都一律替换为LGPL了。用编程思想讲,相当于将“this License”这个变量从GPL重载为LGPL了。比如GPL第4条中规定“Conveying Verbatim Copies”(分发原封不动本软件副本)情况,里面的this License就应理解为LGPL而非GPL。
3、
有一点要注意,说source code,那肯定是源码;说code,那可能是源码,也可能是目标码(object code)。
4、Application,指的是应用程序(或称应用软件),而且是不包含本库的那部分,它调用了本库。应用程序和本库合起来叫“组合作品”。
5、“最小对应源码”那部分内容,不包含基于应用程序的部分,但包含基于本库的部分。说白了,就是本库、对本库的修改,对本库的封装,这几部分的源码都属于最小对应源码。
6、
有些许可证喜欢用and/or,这种用法很不好
(很多人意识不到这点,包括Stallman),很容易让人困惑,理解为or就好
。7、关于“对应应用程序代码”,LGPL专门强调,除了应用程序本身,那些在生成软件时所需的其他数据和工具都算在此内。系统库不算在内,因为这个通常是操作系统提供的。做这个定义,目的是为了让每个被分发人在修改本库后,配合分发者提供的“对应应用程序代码”,能重新生成组合作品,这体现了给用户的一种自由。
下面这个图有助于厘清概念,但注意,此图仅用于示意,并非严格对应。
LGPL相关概念示意图
原文第1条
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.
人话翻译:
第一条 GPL第3条的例外
你如果是按照本许可证的第3条和第4条发布受保护的作品,那可以不受GPL第3条的限制。
人话解读:
这第一条就很难读,直接可以劝退80%的读者。
读这条人们会犯懵:为什么这许可证,一上来就说这个?说这个的目的是啥?
1、GPL的第3条是说你要允许别人破解你的软件。在LGPL里有了这个例外,就相当保护专有作品,又不让人破解了。
2、LGPL第3条描述的作品,仅仅是使用了部分头文件的covered work;LGPL第4条所描述的作品,是组合作品,
这些都是covered work,也都是LGPL予以感染豁免的情况。
于是特许其版权人可以拥有保护其作品不被破解的权利。不然的话,很多商业用户就不敢用了。3、这里只说按LGPL第3条、第4条发布的受保护作品,可以不受GPL第3条限制;那么按LGPL第2条、第5条发布的,还是受GPL第3条限制的。这也会让人困惑,为啥还区别对待?后面我们再说。
4、注意,这条适用分发covered work的情况,也即基于本库的作品(包括本库)。LGPL这个附加文本里面并没有再定义covered work,因为在隐含的GPL里面已经定义了。所谓covered work就是基于本库的作品,包括本库、修改后的本库、组合作品,但不包括应用程序。
组合作品属于covered work,这在GPL里面已经说的很清楚了。
原文第2条
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:
a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.
人话翻译:
第二条 分发本库修改后的版本
如果你修改了本库(也即基于本库产生了一个修改后版本),并且在你的修改中,库提供的一个功能(facility)使用到了“应用程序”提供的方法(function)或数据(注意这里的数据,并不是指调用此功能时传送的参数),那么,你可以按照如下两种许可证中的一种,分发修改后的版本。
a) 按照本许可证分发。前提是您真诚地努力以确保,在“应用程序”不提供方法或数据的情况下,该功能仍能运行,并且其任意部分的执行结果都是有意义的(而不至于输出一堆乱码)。
b) 按照GPL分发。这样,本许可证补充的任何附加条款都不再适用,就按GPL来!
人话解读:
第二条也很难,可以再劝退10%的读者。尤其是那个refers to,很容易迷惑英语不好的人。
1、有人将其中的facility翻译为设施(这大概率是机翻),其实就是库提供的一个功能,
最简单的理解,facility就是库里的一个API、一个函数。
2、本条是说,如果你可以真诚地确保可用性,那就仍然可以用LGPL发布本库的衍生品,如果不能,那就按GPL发布。因为如果你不能确保,那这就不是一个可用的库了,就别当LGPL库发布了。
举个例子,你在本库LibA的基础上做出了一个衍生库LibB,提供了一个API:funb,这个funb用到了应用程序APP1提供的fun1和data1,如果你能确保人们在没有fun1、data1的时候,仍然能用funb,你就可以按照LGPL分发LibB;如果你做不到这点,就按照GPL分发LibB。
3、此条中,“a facility refers to...”,在有的翻译版本中被翻译为“一个设施是指……”,但这样就完全不通顺了,refer这里就是它的本意,就是引用、调用,所以应翻译为“一个引用……的库功能”。
4、注意: 应用程序以及应用程序提供的方法和数据,都不是基于本库的,都不属于covered work,LGPL约束不到它们。但本库衍生品属于covered work,是管得到的,这个当然还要保持自由,要允许人破解,所以不受LGPL补充条款第1条豁免。
5、本条说的是如果你修改了本库该怎么办,但如果你原封不动地分发本库,这里没有说怎么办。但隐含的GPL说到了,在GPL第4条。
6、
在隐含的GPL里面,如果条款中出现“本许可证”,那指的是GPL还是LGPL?按照前面讲的,就是LGPL。
7、这条没有说要不要提供修改后本库的源码,其实是要提供的。虽然这里没说,但隐含的GPL说了(在GPL第5条)。
原文第3条
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license document.
人话翻译:
第三条 如果您的目标码中含有本库头文件中的代码
应用程序的目标代码中可能含有本库中某头文件里的代码,在分发此目标代码时,你可以使用你选择的条款。但是,如果你合并的代码不止于数字参数、数据结构布局和存取器,或小的宏定义、内联函数和模板(长度为 10行或更少代码),你还要做到如下两点:
a) 给目标代码添加显著的声明,说明其中使用了本库,并且说明本库及其使用受本许可证保护。
b) 伴随目标代码,附上一份GPL许可证以及本许可证。
人话解读:
这条仍然很难,读者可能会疑惑作者为啥要在这里强调头文件?是何用意?那个not limited to又想表达什么意思?
1、作者其实想说的是:
如果你只用了我的一点点头文件(没有调用我的库),我大方一点,不感染你。
注意,虽然代码的主体内容通常是在编程语言的主文件中(如.c、.cpp)等,但头文件.h是被include在主体文件里的,一样也是代码。头文件中通常有函数声明、变量声明、类的声明和定义、结构体、联合体和枚举类型的定义、常量和内联函数等内容,有些内容本身也是有实用价值的,也可以被他人利用的。2、所谓“你可以使用你选择的条款”,其实就是我不管你了,我不感染你。
3、如果你用的不是“一点点”头文件,而是超出了我说的那些情况(也就是用的比较多了),你要说明你用了我,并附上本库用的LGPL许可证(即GPL+补充条款)。注意:附上仅仅是附上,并不代表你使用它。
4、里面那个“not limited to”比较难理解,其实他想说的是,如果你用头文件的程度超出了那几种情况,虽然也不感染你,但你要说明你用了我,不要埋没我的英名。
原文第4条
4. Combined Works.
You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:
a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license document.
c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.
1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.
e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.)
人话翻译:
第四条 组合作品
在满足以下条件时,你可以按你选择的条款发布组合作品。
你选择的条款,不能限制人们对组合作品中本库部分进行修改,也不能限制用于调试这种修改的逆向工程,你还需要做到以下每一条:
a) 给组合作品添加显著的声明,说明其中使用了本库,并且本库及其使用受本许可证保护。
b) 伴随组合作品,附上一份GPL以及本许可文本。
c) 如果组合作品在执行时会显示版权声明,那么要一并显示本库的版权声明,并附上GPL和本许可文本的引用链接。
d) 你要做到如下之一:
0) 根据本许可的条款分发最小对应源码,并以适当的形式分发对应应用程序代码(目标码或源码),使得用户在修改本库之后,还能把你的应用程序和修改后的库组合起来形成修改后的组合作品。注意,所有要分发的源码(包括最小对应源码及可能的对应应用程序源码),要按照GPL第6条指定的方式分发。
1) 和本库链接时,采用合适的共享库机制。所谓合适机制,是指应用程序(a)在运行时调用用户计算机系统上已经存在的本库,并且(b)能够和修改后的本库正常交互,如果修改版本和被链接版本在接口上是兼容的。
e) 提供安装所需的信息。注意,仅在GPL第六条要求你提供的时候,而且仅在这些信息是安装和执行组合作品的修改版本时,你才有提供的义务。这里所谓组合作品的修改版本,是指将应用程序和修改后的被链接版本进行重新组合或重新链接产生的组合作品。(如果您使用选项4d0,安装信息必须随最小对应源码和对应应用程序代码一同提供。如果您使用选项4d1,则必须按照GPL第6条指定的提供源码的方式提供安装信息)
人话解读:
1、通常,专有软件都不让逆向工程,LGPL也没有强制要求组合作品允许逆向工程(这在LGPL补充条款第1条里面就说了),只是说在用于调试修改本库时,不能限制逆向工程。
2、
有些人说LGPL只允许动态链接,其实并非如此,LGPL当然允许静态链接,只是对于动态链接这种方式,用户承担的义务更少而已。
在静态链接情况下,用户需要提供应用程序的目标码(或者源码),所以很多人(企业)就犯嘀咕了,不敢静态链接了,虽然在绝大多数情况下,也不用提供源码,提供目标码就行,但他们连目标码也不想提供。3、
对于C、C++这类语言,比较明确,所谓4d0,就是静态链接的情况,所谓4d1,就是动态链接的情况。
对于其他语言,要具体情况具体分析,我觉得JavaScript的库调用更像是4d0情况,Python则更接近4d1;对于Java语言,也更接近4d1,但Java库一般喜欢用“GPL+Classpath例外”许可证2、3而非LGPL。4、在4d0里面出现的术语“对应源码”(corresponding source),是指“最小对应源码”加上可能的“对应应用程序源码”(这部分不一定需要提供)。
5、一旦需要提供源码,就按照GPL第6条的要求提供。GPL第6条就是详细说明如何提供源码的。
原文第5条
5. Combined Libraries.
You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
人话翻译:
第五条 组合库
您可以将本库衍生品(即基于本库的修改版)中的内容,以及其他库(非应用程序、非LGPL库)的内容,共同放在一个库里。这个组合库的分发可以按照你的条款来,只要你同时做到如下两点。
a) 伴随此组合库的分发,附上组合前的本库衍生品,此衍生品按照本许可证发布。
b) 伴随组合库要有明显的声明,声明其中的一部分是基于本库的,并说明在哪里可以找到组合前的本库衍生品。
人话解读:
1、为了方便理解,举个例子:比如本库是LibA,你修改后为LibA',你把LibA'和另一个库LibB组合起来做成组合库LibC。那么发布LibC的时候,你用什么许可证,我不管,但要做到两点:一是同时发布LibA',用LGPL发布;二是告诉别人LibC里的一部分是基于LibA的,并告诉别人LibA'在哪找。
2、这里没有说是否提供LibA'的源码,但隐含的GPL要求提供。
3、这个组合库是一个“聚合体”,里面有covered work,也有非covered work。LGPL补充条款第1条并没有描述此种情况,是因为
组合库中基于本库的部分仍然保持GPL要求(允许破解)
,不基于本库的部分本来就不是covered work,所以影响不到。
原文第6条
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.
人话翻译:
第六条 关于LGPL的修订版本
自由软件基金会(FSF)可能会时不时发布LGPL的修订版或更新版。新版本在精神上将保持不变,但可能在细节上有所不同,目的是解决新问题或新情况。
每个版本都会给一个版本号。如果你接收到的库声称它适用LGPL某具体版本“或任何更高版本”发布,那你可以选择遵循该版本或FSF已经发布的任何后续版本的LGPL许可证。如果此库没有制定具体的版本号,你可以选择FSF发布的任意版本的LGPL。
如果此库说由某个代理(Proxy)来决定LGPL的后续版本是否适用,那么如果该代理对某版本LGPL认可发出了公开声明,就表明你获得了按照该版本LGPL使用该库的永久许可。
人话解读:
1、前面都很正常,最后一句关于代理有点意思。说的是,如果有一个库的作者,对后续版本的LGPL并没有信心,而是需要观望一下再决定是否使用,就可以这样。不过我没见过这么用的。
2、注意“永久许可”这四个字。举个例子,比如某天,FSF发布了LGPL的5.0版,某库的代理说可以用该版本LGPL,那就表明是永久的授权,代理如果哪天又反悔,说5.0不适用了,那也不行。
3、这段表述其实在GPL里面也有,基本上差不多。Stallman也许可以想想办法,这条也复用GPL里面的得了,不用重复说。
以上就是LGPLv3的原文、人话翻译、人话解读。
附1:LGPLv3全文正经翻译
LGPLv3正经翻译
翻译:卫剑钒 翻译日期:2022年12月30日
本版本翻译按照CC-BY-NC-ND-4.0发布
GNU 宽松通用公共许可证
第3版, 2007年6月29日
版权所有(C)2007 自由软件基金会公司(http://fsf.org/)
允许每人复制和发布本文件的完整副本,但不得修改。
本版本的GNU宽松通用公共许可证包含GNU通用公共许可证第三版里的条款和条件,并辅以额外的许可如下。
0.补充定义
“本许可证”指GNU宽松通用公共许可证第三版,“GNU GPL”指GNU通用公共许可证第三版。
“本库”指本许可证所保护的作品,有别于下列定义的“应用程序”或“组合作品”。
“应用程序”指任何使用“本库”提供接口的作品,且不基于“本库”。定义一个“本库”定义的类的子类,被视为使用“本库”提供接口的一种模式。
“组合作品”是“本库”和“应用程序”组合或链接而产生的软件。产生“组合作品”的“本库”的特定版本被称为“被链接版本”。
对于组合作品而言,“最小对应源代码”是指在“组合作品”的源码中,排除单纯是基于“应用程序”而非“被链接版本”的那部分源码。
对于组合作品而言,“对应应用程序代码”是指“应用程序”的目标码和/或源码,包括从“应用程序”生成“组合作品”时所需的数据和实用程序,但不包括“组合作品”中使用的系统库。
1.GNU GPL第3条的例外
你可以按照本许可证第3和第4条的要求分发(convey)受保护作品(covered work),不受GNU GPL第3条的限制。
2.分发本库的修订版本
如果你修改了“本库”,并且在你的修改版本中,如果应用程序使用的功能引用了应用程序提供的方法或数据(有别调用功能时的传参),那么你可以如下方式之一分发修改后的版本:
a)按照本许可分发,前提是你尽力确保当应用程序不能提供相关方法和数据时,该功能仍能运行,且任意部分的执行结果均有意义。或
b)按GNU GPL分发,而不再适用本许可证提供的任何额外许可。
3.目标码中含有本库头文件代码
一个应用程序的目标码可能含有本库部分头文件中的代码。在分发这样的目标码时,你可以使用你选择的条款。前提是,如果你包含的材料不止于数字参数、数据结构布局和存取器,或小的宏定义、内联函数和模板(长度为10行及以内),你还要做到如下两点:
a) 给目标代码以显著的声明,说明其中使用了本库,并且说明本库及其使用受本许可证保护。
b) 伴随目标代码,附上一份GNU GPL以及本许可证文本。
4.组合作品
你可以按照你选择的条款分发一个组合作品,前提是你的条款组合起来,不能限制对组合作品中本库的修改,也不能限制对调试这种修改所需的逆向工程,同时,你还要做到以下条款:
a) 每个组合作品的副本要附有显著的声明,声明组合作品使用了本库,并声明本库及其使用受本许可证保护。
b) 伴随组合作品,附上GNU GPL和本许可文档。
c) 如果组合作品在执行时显示版权声明,那么在这些声明中应包含本库的版权声明,同时要向用户提供GNU GPL和本许可文档的查阅位置。
d) 做到如下之一:
0)在本许可条款下分发最小对应源代码,并以合适形式分发对应应用程序代码,相关条款应允许用户重新组合或重新链接应用程序与被链接版本的改动版以生成一个改动后的组合作品,所有要分发的源码要按照GNU GPL第6条指定的方式分发。
1)链接本库时使用适当的共享库机制,适当机制是指 (a)在运行时使用已经存在于用户电脑系统中本库的副本。(b)只要和被链接版本在接口上是兼容的,就能够和本库的修改版正常交互。
e) 在根据GNU GPL第六条需要提供安装信息时,你应提供安装信息。安装信息仅限于安装和执行修改后组合作品所必需的信息,此处修改后组合作品仅限于将应用程序和修改后被链接版本进行重新组合或重新链接生成的组合作品。(如果你使用4d0选项,安装信息必须伴随最小对应源码和对应应用程序代码一同分发;如果使用4d1选项,你必须以GNU GPL第6条规定的分发对应源码的方式提供安装信息。)
5.组合的库
您可以将基于本库的库功能与非应用程序且非本许可证保护的库功能并列放在一个库里。你可以按照自己选择的条款分发这个组合库,但要同时做到如下两点。
a) 伴随此组合库的分发,附上组合前的基于本库的作品,此作品按照本许可证发布。
b) 伴随组合库要有显著的声明,声明该组合库的一部分是基于本库的,并说明在哪里可以找到所附的这部分。
6.GNU 宽松通用公共许可证的修订版
自由软件基金会可能会时不时发布GNU宽松通用公共许可证的修订版和/或新版本。它们会和现行版本在精神上保持一致,但可能在细节上会略有不同,以处理新的问题和情况。
每个版本都有一个不同的版本号。如果你收到的库指定了一个特定的GNU宽松通用公共许可证版本号“以及后续版本”,你可以选择遵循该版本或自由软件基金会发布的后续版本的条款和条件。如果你接收的库没有指定特定的GNU宽松通用公共许可证版本号,那么您可以任意选择自由软件基金会已经发布的版本。
如果你收到的库声称某个代理可以决定GNU宽松通用公共许可证的某个未来版本是否适用,那么该代理一旦发出对接受某版本的公开声明,你即获得使用该版本于该库的永久授权。
附2: 使用LGPL许可证的几个自由软件示例:
glibc(GNU计划所实现的C标准库4)
FFmepg(一个音视频处理库5)
Qt(一个跨平台C++ GUI应用程序开发框架6)
Cygwin(提供了一套Win32系统下实现POSIX系统调用的API库7)
7-Zip(一个压缩算法库8)
Seahorse(一个用于表单处理的JavaScript库9)
不过它们可能只有部分模块使用LGPL,所用版本也不尽相同,有的是LGPL2.1,有的是LGPL3,有的是LGPL 2.1 or Later,要注意区分。
致谢:
本文得到了王荷舒、李欣博、孙振华、姜宁、Tison的专业审核和宝贵意见,在此表示感谢!
文|卫剑钒
GNU官网上的中文译本外链(http://www.thebigfly.com/gnu/lgpl/lgpl-v3.php)
OpenJDK(https://openjdk.org/legal/gplv2+ce.html)
GNU Classpath(https://www.gnu.org/software/classpath/license.html)
glibc介绍(https://en.wikipedia.org/wiki/Glibc)
FFmpeg介绍(https://en.wikipedia.org/wiki/FFmpeg)
Qt介绍(https://en.wikipedia.org/wiki/Qt_(software))
Cygwin库切换到LGPL v3许可证(https://blog.csdn.net/u014389734/article/details/127482690)
7_Zip介绍(https://en.wikipedia.org/wiki/7-Zip)
Seahorse介绍(https://seahorsejs.sourceforge.net/index.php)