LGPL许可证(LGPL许可证是Lesser General Public License的简写,也叫Library General Public License ,中文译为“较宽松公共许可证”或者“函数库公共许可证”)。该许可证适用于一些由自由软件基金会与其他决定使用此许可证的软件作者所特殊设计的软件包——像函数库(即Library)可以使用它。
LGPL许可证,也是自由软件联盟GNU开源软件许可证的一种,大部分的GNU软件,包括一些函数库,是受到原来的GPL许可证的保护。而LGPL许可证,适用于特殊设计的函数库,且与原来的通用公共许可证有很大的不同,给被许可人较为宽松的权利,所以叫“较宽松公共许可证”。在特定的函数库中使用它,以准许非自由的程序可以与这些函数库连结。
当一个程序与一个函数库连结,不论是静态连结或使用共享函数库,二者的结合可以合理地说是结合的作品,一个原来的函数库的衍生品。因此,原来的通用公共许可证只有在整个结合品满足其自由的标准时,才允许连结。较宽松通用公共许可则以更宽松的标准允许其他程序代码与本函数库连结。例如,在少数情况下,可能会有特殊的需要而鼓励大家尽可能广泛地使用特定的函数库,因而使它成为实际上的标准。为了达到此目标,必须允许非自由的程序使用此函数库。一个较常发生的情况是一个自由的函数库与一个被广泛使用的非自由函数库做相同的工作,在此情况下,限制只有自由软件可以使用此自由函数库不会有多少好处,故我们使用了LGPL许可证。在其他情况下,允许非自由程序使用特定的函数库,可以让更多的人们使用由软件的大部分。例如,允许非自由程序使用GNU C函数库可以让更多的人们使用整个GNU作业系统,以及它的变形,GNU/Linux作业系统。尽管LGPL许可证对使用者的自由是较少保护的,它却能确保与此函数库连结的程序的使用者拥有自由,而且具有使用修改过的函数库版本来执行该程序的必要方法。
LGPL许可证在关于复制、散布以及修改的规定中特别区别了“基于函数库的作品”以及“使用函数库的作品”之间的差异:前者包含来自函数库修改过的源代码,而后者则必须与函数库结合才能执行。
LGPL许可证适用于任何软件函数库,或其他包含了由版权所有者加入的注意事项的程序,或其他有公信力的团体宣称其程序可以在LGPL许可证的条款下发布。一个“函数库”意指一些软件函数的集合,以及或准备好的资料以方便与应用程序(使用了其中某些函数与资料)连结形成可执行的程序。以下“函数库”一词指的是任何在本条款下发布的这一类软件函数库或作品,一个“基于本函数库的作品”意指函数库或任何在版权法下的衍生作品。也就是说,包含了本函数库或其一部分的作品,可以是原封不动的,或经过修改的和(或)直接翻译成其他语言的(在LGPL许可证中,翻译是包含在“修改”的条款中)。
作品的“源代码”意指对作品进行修改最优先择取的形式。对函数库而言,完整的源代码意指所有模块的所有原始程序,加上有关的接口的定义,加上控制函数库的安装和编译的“原本”(原文为“script”)。
LGPL许可证条款不适用于复制、发布和修改以外的活动。这些活动超出这些条款的范围。使用本函数库来执行本程序的动作不受条款的限制,而程序的输出只有在其内容所构成的作品是基于本函数库时(与在什么工具中使用本函数库来输出无关),这一条款才适用,以上情况是否成立则取决于本函数库具体用来做什么。只要被许可人在每一程序副本上明显和恰当地宣告版权声明和不承担担保的声明,并保持此许可证的声明和没有担保的声明完整无损,并和程序一起给其他每位程序接受者一份许可证的副本,该被许可人就可以用任何媒体复制和发布他收到的函数库的完整源代码,也可以为转让副本的实际行动收取一定费用,也可以选择提供担保以换取一定的费用。
只要同时满足下面的所有条件,就可以按前面的要求修改函数库的一个或几个副本或它的任何部分,以此形成基于此函数库的作品,并且复制和发布这一经过修改的程序或作品:
a.被修改的作品本身必须是一个软件函数库。
b.必须在修改过的档案中附有明确的说明:被许可人修改了此一档案及任何修改的日期。
c.必须让整个作品允许第三方在此许可证条款下可以免费使用。
d.如果修改过的函数库的某个设备使用到了使用本函数库的应用程序所提供的函数或资料表格,却不是当此设备被呼叫时以参数列传入时,则必须确实做到,当应用程序不提供这样的函数库表格时,则此设备依旧能工作,且执行的任何目的仍然有意义(例如,一个函数库的函数用来计算平方根,其目的是有完整的定义且与应用程序是无关的。因此,要求任何本函数会使用的,由应用程序所提供的函数或表格必须是选择性的:如果应用程序不提供的话,则计算平方根的函数必须依旧能计算平方根)。
这些要求适用于整个修改过的作品。如果能够确定作品的一部分并非本函数库的衍生产品,且可以合理地单独考虑它与原作品分开的话,则当将它作为独立的作品发布时,它不受此许可证和其条款的约束。但是当被许可人将这部分与基于本函数库的作品一同发布时,则整个软件包将受到本许可证条款约束,它对于其他许可证持有人的使用范围扩大到整个产品,也就是软件包的每个部分,不管它是谁写的。因此,LGPL许可证条款的意图不在于索取权利,或剥夺完全由被许可人完成的作品的权利,而是履行权利来控制基于本函数库的集体作品或衍生作品的发布。此外,将与本函数库无关的作品和本函数库(或基于本函数库的作品)一起放在储存媒体或发布媒体的同一卷上,并不导致将其他作品置于此许可证的约束范围之内。
如前所述,LGPL许可证是根据GPL许可证演变的。还有一个规定就是,开放源代码时,可以选用LGPL许可证,对于选用LGPL许可证公开的源代码,可以变更为适用GPL许可证,但却不能反向变更。LGPL许可证允许以目标码或可执行形式复制或发布本函数库,只要被许可人遵守前面的要求,并同时提供完整的相关机器可读的源代码,而这些源代码在一般习惯上用来做软件交换的媒体上散布。如果所发布的目标码是由指定的地点提供索取,那么由同一地点所提供等价的源代码索取可以算作源代码的发布,即使第三方不强求与目标码一起复制源代码。
一个程序若包含不经任何部分修改的函数库,但却是设计经由编译或连结的方式与本函数库一同工作者,称为“使用函数库的作品”。这样的一个作品,严格地说,并非本函数库的衍生作品,因而不在本许可证的范围之内。然而,将“使用函数库的作品”与本函数库连结而产生可执行程序,则是本函数库的衍生品(因为它包含了本函数库的一部分),而不是“使用函数库的作品”,因此其可执行程序包含在本许可证的范围内。当“使用函数库的作品”使用了函数库部分的头文件内容时,则此作品即使其源代码不属于本函数库的衍生品,但其目标码仍然是。这一点是否为真特别在是否本作品可以在不需要本函数库即可连结,或者是否该作品本身也是一个函数库时特别明显。如果这样的目标文件只使用数字参数、数据结构层级与附属品、以及小宏和小内嵌式(小于或等于十行),则此目标文件的使用是不受限的,不论是否它是合法的衍生作品。否则的话,如果本作品是本函数库的衍生品,被许可人必须按规定散布该作品的目标码。 作为上述规定的例外情况,被许可人也可以将“使用函数库的作品”与本函数库结合或连结,以产生包含部分本函数库的作品,并在允许使用者自身使用时可以修改该作品,以及在对修改进行反组译除错的情况下,被许可人可以依照自己的选择散布该作品。
被许可人必须在每个作品的副本突显出如下的注意事项:本函数库在作品中被使用,以及本函数库以及它的使用是在本许可证的规范下。被许可人必须提供本LGPL许可证的副本。如果该作品在执行时显示版权声明,被许可人必须在其中包含本函数库的版权声明,以及指引使用者取得本许可证的副本。同时,被许可人必须做到以下其中一件事:
a.必须将完整的机器可读的函数库源代码包含在该作品中,包括任何该作品使用到的改变(这些改变必须在前述第1与第2款的要求下散布);而且,如果该作品是一个与函数库连结的“完整的、机器可读的‘使用函数库的作品’”,则要有目标码和(或)源代码,如此使用者可以修改本函数库且可以重新连结,以产生包含修改过的函数库的修改过的可执行程序。
b.在与函数库连结时使用适当的分享函数库连结机制。一个适当的机制是:(1)在执行时使用已存在于使用者的计算机中的函数库副本,而不是将函数库的函数复制到可执行程序里,以及(2)如果使用者安装了一份修改过的函数库,只要修改过的版本在接口上与该作品在编译连结时所用的版本是兼容的,则该执行程序可以与修改过的函数库运作良好。
c.在该作品内提供书面报价,有效期不少于3年,以提供同样的使用者上述条款中的内容,费用不得超过该程序发布的实际成本。
d.如果所发布的作品是由指定的地点提供索取,则由同一地点提供上述内容的等价索取。
e.确定使用者已经收到该作品的一份复制,或是被许可人已经寄给该使用者一份复制品。
对于一个可执行程序,所需的“使用函数库的作品”的形式必须包括任何要从中再产生可执行程序时所需的资料与工具程序。然而,有一个特殊例外,它所散布的内容不需要包括任何一般与“可执行本程序的操作系统”的主要部分(如编译器、核心等)一起发布的部分(不论是源代码或可执行码),除非这些组成部分和可执行作品结合在一起。有一个可能情况是,这些要求与其他通常不与操作系统在一起的私有函数库的版权限制相抵触,这样的抵触表示被许可人不能将它们与本函数库一起用于被许可人散布的可执行程序中。
LGPL许可证允许将使用本函数库的函数库设备,以及其他不在本许可证范围内的函数库,对等地放入一个单独的函数库中,并在基于本函数库的作品以及其他函数库在其他状态下同意可以个别散布,以及被许可人做到以下两点的情况下,被许可人可以散布此结合的函数库:
a.将基于本函数库的作品单独不与其他函数库设备结合的,与此结合的函数库一同散布。该作品必须在上述条款的规范下散布。
b.在此结合的函数库中明显地指出其中一部分的作品是基于本函数库,并且说明哪里可以找到同样不具结合形式的作品。
从以上分析可以看出,GNU工程为库提供了两个基本的开源软件许可证,一个是GPL许可证,另一个是LGPL许可证,对许可证的选择将带来很大的不同:使用LGPL许可证允许把库应用在私有程序中,使用GPL许可证则使库只能被自由的程序所使用。对于特定的库来说,哪个许可证更好是个战略问题,并且它与实际情况的细节有关。