您的位置:首页 > 产品设计 > 产品经理

基于.NET 2.0的GIS开源项目SharpMap分析手记(八):怎样对SharpMap进行扩展开发——从许可角度来谈

2007-06-09 21:37 961 查看
基于.NET 2.0的GIS开源项目SharpMap分析手记(八):怎样对SharpMap进行扩展开发——从许可角度来谈
粟卫民 http://www.gisdev.cn/ http://blog.csdn.net/suen/ 日期:2007-6-9
保留所有版权。如需转载,请联系作者,并在醒目位置注明出处
开源软件项目成员是由几个精通某一软件领域的编程爱好者组成,因此存在的一个比较大的问题就是它的项目功能、进度和时间都无法控制。而我们要使用一个开源项目的成果,很多时候面临的就是必须在原有基础上加上自己的开发。这就不得不碰到一个许可问题。
一般我们所说的开源许可都是指经过“开放源代码首创行动组织”(Open Source Initiative Association,简称OSIA)认定的开放源代码软件许可证。迄今为止,经OSIA认证的开放源代码软件的软件许可证有如下21种:
1、The GNU General Public License (GPL)
2、The GNU Library or "Lesser" Public License (LGPL)
3、The BSD license
4、The MIT license
5、The Artistic license
6、The Mozilla Public License v. 1.0 (MPL)
7、The Qt Public License (QPL)
8、The IBM Public License
9、The MITRE Collaborative Virtual Workspace License (CVW License)
10、The Ricoh Source Code Public License
11、The Python license
12、The zlib/libpng license
13、The Apache Software License
14、The Vovida Software License v. 1.0
15、The Sun Internet Standards Source License (SISSL)
16、The Intel Open Source License
17、The Mozilla Public License 1.1 (MPL 1.1)
18、The Jabber Open Source License
19、The Nokia Open Source License
20、The Sleepycat License
21、The Nethack General Public License
其中开放源代码软件业最著名的GPL、LGPL、MPL、MPL1.1软件许可证,都经过了OSIA的认证。
下面我们来讨论下SharpMap使用的LGPL许可。LGPL许可本身是一个冗长复杂的法律文档,如果你有时间的话,可以看一下附录的LGPL许可介绍和LGPL英文原文和中文翻译。我现在结合我的理解说一下如果修改并发布基于LGPL许可的函数库,必须注意一下几点:
(1)您必须在修改过的档案中附有明确的说明:您修改了此一档案及任何修改的日期。
(2) 我们也要使用LGPL许可(或GPL许可)
(3) 保持它原有的函数库接口,就是尽量不删它的东西
当然,我的理解可能与实际情况有出入,所以最终以英文的LGPL许可为准,同时如果有什么不对的地方,请懂法律的朋友给我指点一二,不胜感激。

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