LGPL - GNU Lesser General Public License (GNU 宽通用公共许可)
LGPL - GNU Lesser General Public License (GNU 宽通用公共许可)LGPL 是 GNU Lesser General Public License (GNU 宽通用公共许可) 的缩写形式,旧称 GNU Library General Public License (GNU 库通用公共许可),后改称 Lesser GPL,即更宽松 GPL,在宽松程度上与 BSD、Apache、XFree86 许可相似。
大多数软件许可决意剥夺您共享和修改软件的自由。相反,GNU 通用公共许可力图保证您共享和修改自由软体的自由 —— 保证自由软体对所有使用者都是自由的。
GPL (General Public License) 和 LGPL 是 GNU 的 2 种 License。越来越多的自由软件 (Free Software) 使用 GPL 作为其授权声明,如果对 GPL 一点都不了解,有可能在使用自由软件时违反 GPL 的授权,恐怕会有被起诉的风险。所以任何公司在使用自由软件之前应该保证在 LGPL 或其它 GPL 变种的授权下。
Log4cpp 最初版本使用 GPL 作为授权声明,在 0.2.1 版后改用更宽松 LGPL。当一个自由软件使用 GPL 声明时,该软件的使用者有权重新发布、修改该软件,并得到该软件的源代码;但只要使用者在其程序中使用了该自由软件,或者是使用修改后的软件,那么使用者的程序也必须公布其源代码,同时允许别人发布、修改。也就是说,使用 GPL 声明的自由软件开发出来的新软件也一定是自由软件。
10 倍以上效率提升 智能GUI文档翻译 Python Qt/C++ HTML5 网站站群 "数字 IDE 专业版" 开发工具http://idepro.digitser.cn/http://forum.digitser.cn/thread-2342-1-1.html
百度网盘https://pan.baidu.com/s/1jIzOgzs
软件仓库
https://github.com/digitser
https://digitser.sourceforge.io/https://pan.baidu.com/s/1TV70__Be1ta0ney1-tudFQ
LGPL 是 GPL 的变种,也是 GNU 为得到更多甚至是商用软件开发商的支持而提出的。与 GPL 的最大不同是,可以私有使用 LGPL 授权的自由软件,开发出来的新软件可以是私有的,而不需要是自由软件。所以,任何公司在使用自由软件之前,应保证在 LGPL 或其它 GPL 变种的授权下。
为什么要使用 LGPLGNU 计划在使用库时有 2 个首要许可:一个是 GNU LGPL(库 GPL);另一个是普通的 GNU GPL。选择不同的许可有很大的不同:选择 LGPL 允许在私有程序中使用该库;选择普通的 GPL 则只允许在自由软件中使用该库。
01、哪一种许可对指定库最好,实际上是一种策略问题,取决于实际情况当前,大多数 GNU 库采用 LGPL,这意味着我们只使用着其中的一个策略,而忽略了另一个。所以更多库以普通 GPL 许可证形式发布。
私有软件开发者有金钱上的优势;自由软件开发者需要相互之间利用各自的优势。对一个库采用普通的 GPL 对自由软件开发者的优势要大于对私有软件开发者: 他们可以使用的库对于私有软件开发者是不可利用的。
http://forum.digitser.cn/data/attachment/forum/201809/30/232058fb002uk0eslljdc2.jpgGPL LPGL Mozilla BSD MIT Apache Licence 许可协议
02、使用普通 GPL 并不是对所有库都有好处。在某些情况下,更有理由使用 LGPL最常见的情况就是,当一个自由库的特性可很容易被私有软件以其他可替代库实现时。在这种情况下,库不能给与自由软件任何特别的优势,因而,最好还是用 LGPL 发布。
这也就是为什么我们为 GNU C 库选择 LGPL。总之,有很多其他 C 库,使用 GPL 发布,将迫使私有软件开发者不得不使用其它库 ── 对他们来说,这不成问题,而我们则有了麻烦。
当一个库提供的功能非常独特时,如 GNU Readline,情况就大不一样了。Readline 库可实现输入编辑和记录交互式程序操作,这在别处通常是不可获得的。在 GPL 下发布并限制只能在自由程序中使用,这对开源社区是一重要促进。至少今天某个应用程序之所以是自由软件,只是因为它必需要用到 Readline。
03、如收集一些强大、私有软件中没有相类似功能、采用 GPL 的库,它们将提供一系列有用的模块用于新自由软件的构造这对将来自由软件开发将是一个显著优势,一些项目将为了使用这些库而考虑使软件自由化。大学项目是易于被影响的;而且今天,随着某些公司开始考虑使软件自由化,甚至一些商业项目也会由此受到影响。
私有软件开发者试图否认自由竞争的重要性,他们会拼命说服作者不要将库以 GPL 发布。譬如:他们会呼吁利己主义,信誓旦旦地说,若我们让他们在私有软件产品中使用代码,将有 “更多的用户” 用到该库。流行是一种诱惑,它使一个库开发者倾向于相信这种观点:社会首先需要的是促进一种库的流行。
我们不应听从这种诱惑,因为若我们联合起来,我们可以做得更好。我们这些自由软件开发者应该相互支持。通过发布只能为自由软件使用的库,我们可互相帮助,使彼此的自由软件包优于其它私有替代品。整个自由软件运动将会有更多机会,因为自由软件作为一个整体会在竞争中表现更佳。
04、由于 "LGPL (Library GPL)" 的称呼传达了关于这一问题的错误观点,我们计划将称呼改为 "次级 GPL (Lesser GPL)"事实上更换名称要花一定时间,但您不必再等 ── 您也可使用 GPL 许可发布库。
导言01、大多数软件许可决意剥夺您共享和修改软件的自由相反,GNU 通用公共许可力图保证您共享和修改自由软体的自由 —— 保证自由软体对所有使用者都是自由的。
LGPL (GNU 宽通用公共许可) 适用于一些由自由软体基金会与其他决定使用此许可的软件作者,所特殊设计的软件套件 —— 象是函数库。您也可以使用它,但我们建议您事先应仔细考虑。基于以下说明,是否采用此许可或原通用公共许可证在任何特殊情况下,均为较好的方案。
02、当我们谈到自由软件时,我们所指的是自由,而不是价格我们的 GNU 通用公共许可是设计用以确保使您有发布自由软体备份的自由(若您愿意,可以对此项服务收取一定的费用);确保您能收到程式原始码或在您需要时能得到它;确保您能修改软体或将它的一部分用于新自由软体;且还确保您知道可做上述这些事情。
03、为保护您的权利,我们需作出限制禁止任何人否认您的上述权利,或要求您放弃这些权利。若您发布软件副本,或对之加以修改,这些规定就转化为您的责任。
譬如:若您发布此函数库副本,不管是免费的还是收取了费用,您必须将您享有的一切权利给予接受者;您必须确保他们也能收到或得到原始程式码;若您将此函数库与其他程式码连结,您必须提供完整目的对象文件和程序 (object file) 给接受者,当他们修改此函数库并重新编译后,可以重新与目的档连结。并且,您要将这些条款给他们看,使他们知道他们有这样的权利。
04、我们采取 2 项措施保护您的权利:1)用版权来保护函数库。
2)我们提供您这份许可,赋予您复制、发布和(或)修改这些函数库的法律许可。
05、为保护每个发布者,我们需要非常清楚地让每个人明白,自由函数库是没有担保责任的如果由于某人修改了函数库,并继续加以传播,我们需要它的接受者明白:他们所得到的并不是原始版本。故由其他人引入的任何问题,对原作者的声誉将不会有任何影响。
最后,由于软体专利不断威胁自由软体的存在,我们希望商业公司无法藉由自专利持有者取得一个受限的许可,而有效限制自由软体的使用者。因此,我们坚持一个函数库所能取得的任何专利,必须与本许可证所声明的 “完全自由使用” 一致。
06、大部分 GNU 软件,包括一些函数库,是受到原 GNU 通用公共许可的保护LGPL (GNU 宽通用公共许可) 适用于特殊设计的函数库,且与原来的通用公共许可有很大的不同。我们在特定的函数库中使用它,以准许非自由的程式可以与这些函数库连结。 当一个程式与一个函数库连结,不论是静态连结或使用共享函数库,2 者的结合可以说是合理结合作品 ── 一个原函数库的衍生品。因此,原 GNU 通用公共许可只有在整个作品满足自由的标准时,才予许连结。LGPL (GNU 宽通用公共许可) 则以更宽松的标准允许其他程式码与本函数库连结。
07、我们称 LGPL 许可为 "较宽松" 通用公共许可,是因为它比起原 GNU 通用公共许可对使用者的自由做到较少的保护在与非自由软体竞争时,它还提供了其他自由软件的写作者较少的优势。这些不利之处正是我们使用原 GNU 通用公共许可于许多函数库的理由。
然而,LGPL 较宽松许可可在某些特殊场合下带来好处。 譬如,在少数情况下,可能会有特殊的需要而鼓励大家尽可能广泛地使用特定函数库,因而使它成为实际上的标准。为了达到此目标,必须允许非自由程式使用此函数库。一个较常发生的情况是一个自由函数库与一个被广泛使用的非自由函数库做相同工作时,在此情况下,限制仅自由软件可使用此自由函数库不会有多少好处,故我们用了 LGPL 较宽松通用公共许可。
在其他情况下,允许非自由程式使用特定函数库,可以让更多人使用自由软体的大部分。譬如,允许非自由程式使用 GNU C 函数库可让更多人使用整个 GNU 作业系统,以及它的变形,GNU/Linux 作业系统。
尽管 LGPL 较宽松通用公共许可对使用者的自由是较少保护的,它却能确保与此函数库连结的程式的使用者拥有自由,而且具有使用修改过的函数库版本来执行该程式的必要方法。
以下是复制、发布、以及修改的精确条款与条件。请注意 "基于函数库的作品" 以及"使用函数库的作品" 之间的差异:前者包含来自函数库修改过的原始码;而后者则必须与函数库结合才能执行。
LGPL (GNU 宽通用公共许可) 适用于任何软件函数库,或其他包含了由版权所有者加入的注意事项的程式,或其他有公信力的团体宣称其程式可以在 LGPL 较宽松通用公共许可 (也称之为 "本许可证") 的条款下发布。每一位许可接受者以 "您" 来称呼。
"函数库" 指一些软件函数的集合,以及或准备好的资料以方便与应用程式 (其使用了其中某些函数与资料) 连结形成可执行的程式。
以下 "函数库" 一词指的是任何在本条款下发布的这一类软件函数库或作品。"基于本函数库的作品" 指函数库或任何在版权法下的衍生作品:也就是说,一个包含了本函数库或其一部分的作品,可以是原封不动的,或经过修改的,和/或 直接翻译成其他语言的。(在下文中,翻译是不受限地包含在 "修改" 的条款中。)
作品 "原始码" 意指对作品进行修改最优先择取的形式。对函数库而言,完整原始码意指所有模组所有原始程式,加上有关介绍定义,加上控制函数库的安装和编译的 script。
LGPL (GNU 宽通用公共许可) 条款不适用于复制、发布和修改以外的活动。这些活动超出这些条款范围。使用本函数库来执行本程式的动作不受条款限制,而程式的输出只有在其内容所构成的作品是基于本函数库时 (与在什么样的工具中使用本函数库来输出无关) ,这些条款才适用。以上是否为真,则取决于本函数库具体用来做什么。
01、只要您在每一程式副本上明显和恰当地宣告版权声明和不承担担保的声明,并保持此许可证的声明和没有担保的声明完整无损,并和程式一起给其他每位程式接受者一份许可副本,您就可以用任何媒体复制和发布您收到的函数库的完整原始码。
您可以为转让副本的实际行动收取一定费用。您也可以选择提供担保以换取一定的费用。
02、只要同时满足下面的所有条件,您就可以按前面第 01 款的要求修改函数库的一个或几个副本或它的任何部分,以此形成基于此函数库的作品,并且复制和发布这一经过修改的程式或作品:
1) 被修改的作品本身必须是一个软件函数库;
2) 必须在修改过的档案中附有明确说明:您修改了此档案及修改日期;
3) 您必须让整个作品允许第 3 方在此许可证条款下可免费使用。
若某个设备使用了修改过的函数库「使用本函数库的应用程式」所提供的函数或资料表格,却不是当此设备被呼叫时以参数列传入时,您必须确实做到,当应用程式不提供这样的函数或表格时,则此设备依旧能工作,且其执行的任何目的仍然有意义。
(譬如:一个函数库的函数用来计算平方根,其目的是有完整的定义且与应用程式是无关的。因此, 要求任何本函数会使用的,由应用程式所提供的函数或表格必须是选择性的:如果应用程式不提供的话,则计算平方根的函数必须依旧能计算平方根)
这些要求适用于整个修改过的作品。如果能够确定作品的一部分并非本函数库的衍生产品,且可合理地单独考虑并将它与原作品分开的话,则当您将它作为独立作品发布时,它不受此许可及其条款约束。但是当您将这部分与基于本函数库的作品一同发布时,则整个套件将受到本许可条款约束,其对于其他许可持有人的使用范围扩大到整个产品,也就是套件的每个部分,不管它是谁写的。
因此,本条款的意图不在于索取权利,或剥夺完全由您完成的作品的权利,而是履行权利来控制基于本函数库的集体作品或衍生作品的发布。 此外,将与本函数库无关的作品和本函数库 (或基于本函数库的作品) 一起放在贮存媒体或发布媒体的同一卷上,并不导致将其他作品置于此许可的约束范围之内。
03、对于一个函数库副本,您可选择性地使用原 GNU 通用公共许可条款取代本许可条款。若要这么做,您必须将所有修改参考到本许可注意事项,使它们指向原 GNU 通用公共许可第 2 版,以取代本许可 (若有比第 2 版的原 GNU 通用公共许可更新版本出现的话,如果您愿意的话,可特别指明使用新版)。请不要对这些注意事项做其他改变。
一旦在一个副本上做了这样的改变,则该副本就无法撤回这样的改变,故原来的 GNU 通用公共许可将适用于所有后续的副本以及由此副本衍生出来的作品。
此一选择性适用于当您想要将一部分函数库原始码复制到一非函数库的程式使用时。
04、您可以以目标码或可执行形式复制或发布本函数库 (或符合第 02 款,基于本函数库的作品),只要您遵守前面的第 01、02 款,并同时提供完整的相关机器可读原始码,而这些原始码必须在前面的第 01 与第 02 款条件下,在一般习惯上用来做软件交换的媒体上发布。
若所发布的目标码是由指定的地点提供拷贝索取,那么由同一地点所提供等价的原始码拷贝索取可以算作原始码的发布,即使第 3 方不强求与目标码一起复制原始码。
05、一个程式若包含未经任何部分修改的函数库,但却是设计经由编译或连结的方式与本函数库一同工作者,称之为 "使用函数库的作品"。这样的一个作品,严格地说,并非本函数库的衍生作品,因而不在本许可证的范围之内。
然而,将 "使用函数库的作品" 与本函数库连结而产生可执行程式,则是本函数库的衍生品 (因为它包函了本函数库的一部分),而不是 "使用函数库的作品",因此其可执行程式包含在本许可证的范围内。第 06 款说明了发布此可执行程式的条款。
当 "使用函数库的作品" 使用了函数库部分的标头档内容时,则此作品即使其原始码不属于本函数库的衍生品,但其目标码仍然是。这一点是否为真,特别在是否本作品可以在不需要本函数库即可连结,或者是否该作品本身也是一个函数库时特别明显。
如果这样的目标档只使用数字参数、资料结构层级与附属品、以及小巨集和小内式 (小于或等于十行) ,则此目标档的使用是不受限的,不论它是否是合法的衍生作品。 (但可执行程式若包函此目标档以及一部分的函数库,仍然将在第 06 款的规定下)
否则,若本作品是本函数库的衍生品,您必须在第 06 款的规定下发布该作品的目标码。任何包含该作品的可执行程式也在第 06 款范围内,不论它们是否直接与本函数库连结。
06、做为上述条款的例外情况,您也可以将 "使用函数库的作品" 与本函数库结合或连结,以产生包含部分本函数库的作品,并在允许使用者自身使用时可以修改该作品,以及在对修改进行反编译除错的情况下,可依照您的选择发布该作品。
您必须在每个作品的副本突显出如下的注意事项:本函数库在作品中被使用,以及本函数库以及它的使用是在本许可的规定下。您必须提供本许可的副本。如果该作品在执行时显示版权声明,您必须在其中包含本函数库的版权声明,以及指引使用者取得本许可的副本。同时,您必须做到以下其中一件事:
必须将完整机器可读函数库原始码包含在该作品中,包括任何该作品使用到的改变 (这些改变必须在前述第 01 与第 02 款的要求下发布);而且,若该作品是一个与函数库连结的「完整的、机器可读的 "使用函数库的作品"」,则要有目标码 和/或 原始码,如此使用者可修改本函数库且可重新连结,以产生包含修改过的函数库或修改过的可执行程式。 (理所当然,若使用者修改了函数库档案定义内容时,则该作品不必重新编译,以使用修改过的定义。)
在该作品内提供书面报价,有效期不少于 3 年,以提供同样的使用者上述第 06 款中的内容,费用不得超过该程式发布的实际成本。 如果所发布的作品是由指定的地点提供拷贝索取,则由同一地点提供上述内容的等价拷贝索取。
确定使用者已经收到该作品的一份复制,或是您已经寄给该使用者一份复制品。
对于一个可执行程式,其所需的 "使用函数库的作品" 的形式必须包括任何要从中再产生可执行程式时所需的资料与工具程式。然而,有一个特殊例外,其所发布的内容不需要包括任何一般与「可执行本程式的作业系统」的主要部分 (如编译器、核心等) 一起发布的部分 (不论是原始码或可执行码),除非这些组成部分和可执行作品结合在一起。
有一个可能情况是,这些要求与其他通常不与作业系统在一起的私有函数库的版权限制相抵触,这样的抵触表示您不能将它们与本函数库一起用于您发布的可执行程式中。
07、 您可将使用本函数库的函数库设备,以及其他不在本许可范围内的函数库,对等地放入一个单独函数库中,并在基于本函数库的作品以及其他函数库在其他状态下同意可单独发布,以及您做到以下 2 点的情况下,您可以发布此结合的函数库:
1)将基于本函数库的作品单独不与其他函数库设备结合的,与此结合的函数库一同发布。该作品必须在上述条款的规定下发布。
2)在此结合的函数库中明显地指出其中一部分的作品是基于本函数库,并且说明那里可以找到同样不具结合形式的作品。
08、除非您明确按许可提出的要求去做,否则您不能复制、修改、转发许可、与本函数库连结、和发布本函数库。任何试图用其他方式复制、修改、转发许可、与本函数库连结、和发布本函数库,都是无效的,且将自动结束许可赋予您的权利。然而,对那些从您那里按许可条款得到副本和权利的人们,只要他们继续全面履行条款,许可赋予他们的权利仍然有效。
09、您没有在许可上签字,因而您没必要一定接受此一许可。然而,没有任何其他东西赋予您修改和发布本函数库及其衍生作品的权利。如果您不接受许可,这些行为是法律禁止的。因此,如果您修改或发布函数库 (或任何基于函数库的作品) ,就表明您接受这一许可以及它的所有有关复制、发布和修改本函数库或基于它的作品的条款和条件。
10、每当您重新发布函数库 (或任何基于函数库的作品) 时,接受者自动从原始许可颁发者那里接受到这些条款和条件支配的复制、发布、连结或修改本函数库的许可。您不可以强迫接受者履行除这里赋予他们的权利之外的其他限制。您也没有强求第 3 方履行许可条款的义务。
11、如果由于法院判决或违反专利的指控或任何其他原因 (不限于专利问题) 的结果,使得强加于您的条件 (不管是法院判决,协议书或其他) 和许可条件有冲突时,他们也不能令您背离许可条款。在您不能同时满足本许可规定的义务及其他相关义务来发布函数库时,结果,您只能根本不发布函数库。譬如,若某一专利许可不允许所有直接或间接从您那里接受副本的人们,在不付专利费的情况下重新发布函数库,唯一能同时满足 2 方面要求的办法是停止发布函数库。
如果本条款的任何部分在特定环境下无效或无法实施,就使用条款的其余部分,并将这部分条款作为整体用于其他环境。 本条款的目的不在于引诱您侵犯专利或其他财产权的要求,或争论这种要求的有效性。本条款的主要目的在于保护自由软体发布系统的完整性。它是通过公共许可的应用来实现的。许多人已依赖同是出自此系统的应用程式,经由此系统发布大量自由软体而做出慷慨的供献。作者/捐献者 有权决定 他/她 是否通过任何其他系统发布软件,许可证持有人不能强加这种选择。
目的在于明确说明,许可其余部分可能产生的结果。
12、如果由于专利或由于版权问题使函数库在某些国家的发布和使用受到限制,则在许可约束下的原始版权拥有者可以增加发布地区的限制条款,将这些国家明确排除在外,并在这些国家以外的地区发布函数库。在这种情况下,许可证套件包含的限制条款和许可正文一样有效。
13、自由软体基金会可能随时出版较宽松通用公共许可的修改版或新版。新版和当前版本在原则上保持一致,但在提到新问题时或有关事项时,在细节上可能出现差别。
每一版本有不同版本号。如果函数库指定可适用的许可版本号以及 "任何更新的版本" ,您有权选择遵循指定的版本或自由软体基金会以后出版的新版本。如果函数库未指定许可证版本,您可选择自由软体基金会已经出版的任何版本。
14、如果您愿意将函数库的一部分结合到其他自由程式中,而它们的发布条件不同,请写信给作者,要求准予使用。如果是自由软体基金会加以版权保护的软体,写信给自由软体基金会,我们有时会作为例外情况处理。我们的决定受 2 个主要目标的指导,这两个主要目标是:我们的自由软体的衍生作品继续保持自由状态,以及从整体上促进软件的共享和重复利用。
15、由于函数库准予免费使用,在适用法准许的范围内,对函数库没有担保。除非另有书面说明,版权所有者 和/或 其他提供函数库的人们 "一样" 不提供任何类型的担保,不论是明确的,还是隐含的,包括但不限于可销售和适合特定用途的隐含保证。全部的风险,如函数库的质量和性能问题都由您来承担。如果函数库出现缺陷,您应当承担所有必要的服务、修复和改正的费用。
16、除非适用法或书面协议要求,在任何情况下,任何版权所有者或任何按许可条款修改和发布函数库的人们都不对您的损失负有任何责任。包括由于使用或不能使用函数库引起的任何一般的、特殊的、偶然发生的或重大的损失 (包括但不限于数据的损失,或者数据变得不精确,或者您或第三方的持续的损失,或者函数库不能和其他软体协调运行等) 。即使版权所有者和其他人提到这种损失的可能性也不例外。
Source Code 和 Object Code
Source Code 指的是,以各种编程语言写成的源代码,通过 Source Code 结合文档,可了解整个软件的体系结构及具体到某个功能函数的实现方法等。
Object Code 指的是 Source Code 经编译后,生成的类似于 "类库",提供各种接口供他人使用的目标码,也就是常见的 *.dll *.so *.pyd 等格式文件。
区分这两个概念的目的,在于:有些开源只发布 Object Code,当然,大多数发布的是 Source Code。很多开源协议也对 "发布哪种 Code 时应怎样" 有明确约束。
Contributors 和 Recipients
Contributors 指的是,对某个开源软件或项目提供了代码 (包括最初的,或修改过的) 的人或实体 (团队、公司、组织、等)。
Contributors 按参与开源软件的时间先后顺序,可分为 an initial Contributor 和 subsequent Contributors。
Recipients 指的是,开源软件或项目的获取者,显然,subsequent Contributors 也属 Recipients 之列。
Derivative Module 和 Separate Module
Derivative Module 指的是,依托或包含 "最初的" 或 "从别人处获取的" 开源代码而产生的代码,是原 "源代码" 的增强 (不等于增加)、改善和延续的模块,译为 "衍生模块"。
Separate Module 指的是,参考或借助原 "源代码",开发出的独立的、不包含、不依赖于原 "源代码模块",译为 "独立的模块"。
理解这两个概念的目的,在于:很多协议对涉及商业发布时,会有哪些是衍生的,哪些是独立的,有着明确的商业发布规定。
http://forum.digitser.cn/data/attachment/forum/201605/19/132155fevczeyds5e5y1wy.jpg"长按二维码" 或 "扫一扫" 关注 "德云社区" 微信公众号
版权声明:
本文为独家编译稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
页:
[1]