RFC 34:许可证策略执行

作者:弗兰克·温特丹

联系方式:warmerdam@pobox.com

现状:发展

总结

本文档建议添加一种新机制,以便应用程序和最终用户可以定义许可策略,并使GDAL可以帮助避免专有和交互许可的应用程序和格式驱动程序之间的许可冲突。

定义

对等自由/开源软件许可证:一种开源软件许可证,如GPL,它要求所有其他链接到同一可执行文件中的软件组件,并在创建者之外分发,这些组件也要根据开源条款提供。

Non-Reciprocal FOSS License: A open source software license, such as MIT, BSD or LGPL, that does not place any requirements on other linked components in the same executable at distribution time.

专有许可:根据不符合开源定义要求的条款提供的软件,如Oracle(OCI)、Lizardtech(MrSID)和Erdas(ECW)的库。虽然这些组件通常以零成本提供,但它们与自由和开放源码软件互惠许可证不兼容,并可能对分销商或最终用户施加各种其他限制。

理论基础

GDAL/OGR is distributed under the Non-Reciprocal MIT open source license which facilitates it's use by proprietary and open source applications, and facilitates the inclusion of proprietary format drivers along side the open source format drivers. However, it is still a license violation to distribute reciprocally licensed applications (like QGIS and GRASS) which use GDAL with proprietary licensed drivers (such as the MrSID, ECW or Oracle drivers). Likewise, it is a license violation to distribute proprietary applications with reciprocally licensed drivers such as the GDAL GRASS driver, or the PDF driver.

此RFC及其促进的改进旨在帮助用户、应用程序和驱动程序设置和遵循许可证策略,以避免无意中违反许可证。其中一个特别有用的领域是广泛的软件发行版,如 OSGeo4W .

途径

提出的一般方法是,驾驶员将申报其驾照类别,而应用程序或最终用户将申报一项政策,说明可与哪些驾驶员结合使用。GDALDriverManager和ogrdriverregistrator类将应用此信息以避免无意中违反许可证。

驱动程序

驾驶员将通过驾驶员的“LICENSE_POLICY”(DMD_LICENSE_POLICY)元数据项声明这三种特定于驾驶员的许可政策之一:

  • “对等”:驾驶人可在对等自由/开源软件许可证(如GPL)下使用,不应与专有驾驶人或应用程序混合使用。

  • "NONRECIPROCAL": the driver is available under a non-reciprocal FOSS license such as MIT, or LGPL. This is the default if no licensing policy is declared and is the natural policy of drivers provided as part of GDAL without outside dependencies.

  • “专有”:通常由于使用专有库,驱动程序有一些许可限制,这使得它不符合使用交互许可软件分发的资格。这将包括MrSID、ECW和与Oracle相关的驱动程序。

应用程序许可证策略

鼓励应用程序设置以下反映应用程序性质的许可策略之一。策略应设置为GDAL_APPLICATION_LICENSE_policy配置变量的值,通常通过调用gdalestconfigion() 之前 对GDALAllRegister()或OGRRegisterAll()的调用。

  • “互惠”:申请是根据互惠许可证(如GPL)授权的,不应加载专有驱动程序。

  • “专有”:应用程序有一些许可限制,这使得它不符合使用相互许可的软件分发的资格。应注意避免装载同等驾照的驾驶员,如GRASS和PDF驾驶员。

  • “默认”:应用程序不应用任何许可限制。这是典型的非GPL开源应用程序,如MapServer,如果未声明任何内容,则将成为默认策略。

用户许可证策略

混合专有软件和相互许可软件的限制通常适用于分发点。特别是,这并不意味着阻止最终用户组装各种组件,以供他们认为合适的用途,供他们自己使用。为此目的,重要的是为最终用户提供一种机制,使其故意忽略对混合相互许可的专有组件的限制。这是通过GDAL_LICENSE_策略配置变量实现的,该变量通常可以通过环境设置,或者通过--config命令行开关设置到大多数GDAL应用程序。它可能具有以下值:

  • “使用全部”:不要基于许可证限制丢弃任何驱动程序。

  • “首选专有”:如果专有和相互许可的驾驶人之间存在冲突,请使用专有驾驶人。

  • “prefere_recipulate”:如果专有驾驶人和混合驾照驾驶人之间存在冲突,请使用混合驾照驾驶人。

除了通过配置变量设置这一点之外,还将有一个configure/nmake.opt声明来更改默认的GDAL_LICENSE_策略。因此,可以将本地生成配置为在生成时全部使用,而不必设置环境变量或命令行开关。这不适合将要重新分发的软件。

政策逻辑

  1. 如果用户选择了“全部使用”的GDAL_LICENSE_策略,则不会基于许可卸载任何驱动程序。

  2. 如果用户选择了“首选专有”或“首选互惠”的GDAL_许可证策略,则忽略GDAL_应用程序许可证策略。

  3. 如果应用程序选择了“专有”或“对等”的GDAL_application_LICENSE_策略,则使用该策略。

  4. 如果没有用户或应用程序级别的策略,则默认为“PREFER_property”策略。

该策略将应用于GDALDriverManager::AutoSkipDrivers()方法和新引入的OGRSFDriverManager::AutoSkipDrivers()方法。AutoSkipDrivers()方法已经用于卸载基于GDAL_SKIP(以及很快的OGR_SKIP)的驱动程序,通常在初步注册驱动程序之后调用。

受影响的司机

我认为以下驱动程序应标记为“专有”:

  • ECW

  • JP2ECW公司

  • MRSID

  • JP2MRSID版本

  • MG4激光雷达

  • GEORASTER

  • 2千日元

  • JPIPKAK

  • ArcObjects

  • OCI

  • 文件数据库

  • FME

  • ArcSDE(栅格和矢量)

我认为,应将以下驱动程序标记为“互惠”:

  • 草地(栅格和矢量)

  • EPSILON

  • MySQL(取决于有效的许可条款!)

  • PDF

未解决:

  • OGR SOSI驱动程序目前可能应该被标记为专有的,因为它依赖于与具有未知许可条款的二进制对象的链接,即使最终目标似乎是开放源代码。

  • 我有点困惑 MSG——气象卫星第二代 . 似乎它依赖于第三方的东西,包括专有代码和GPL代码。

  • 我不确定基于ODBC的驱动程序。我想PGEO和mssqlspace驱动程序也应该标记为专有的?这是否取决于odbc库的实际许可条款?

请告诉我其他司机需要评分。

SWIG绑定

一些(全部?)swig绑定会在加载绑定时自动调用GDALAllRegister()和/或OGRRegisterAll(),这使得在进行注册之前很难在脚本中设置应用程序级GDAL_许可证策略。为了解决这个问题,我认为我们应该通过SWIG公开AutoSkipDrivers()方法,以便脚本可以设置策略,然后根据有效的策略“清理”驱动程序。

测试套件

如何测试?

文档

如何记录?

实施

Frank wartemdam将在trunk中完成核心实现。驱动程序维护人员可能需要更新特定驱动程序的元数据。