什么是开源许可证(如GNU

我期待使用具有类似GNU-GPL许可证的开源产品,并且如果使用该产品,我必须共享我的应用程序的源代码。

我对此有些困惑。 我知道Linux也可以在GNU-GPL许可下使用。 这是否意味着所有的 Linux应用程序都必须是开源的? 这是否意味着我可以向甲骨文公司索要完整Oracle数据库的源代码(至少是在Linux上运行的部分)?

编辑:

摘自FAQ:

如果图书馆是在GPL(而不是LGPL)下发布的,那么是否意味着任何使用它的程序必须符合GPL或GPL兼容许可证?

是的,因为实际运行的程序包含库。


认识到“GPL”可以指两个许可证是很重要的。

  • GNU通用公共许可证
  • GNU较宽松通用公共许可证(又名)图书馆通用公共许可证
  • 任何一个都非常清楚地指定它将来自库的代码视为与程序混合在一起的工作。 这意味着,如果你的程序通过一个动态加载器(即一个公共共享对象)加载一个库,或者静态链接它,那么生成的可执行文件就是程序本身和支持它的库的组合工作。

    现在,这两个许可证之间的差异变得非常重要。

    GPL规定,如果您的程序使用库(或GPL涵盖的任何其他代码),则必须按照与GPL相同的条款进行发布。 这(再次)是因为GPL认为生成的程序是您的代码的组合工作,加上其他人的工作。

    幸运的是(或不是?根据您的意见),GNU C库不包含在GPL中。 它由LGPL覆盖。 LGPL表示,简单地加载和使用系统C库确实构成了一个组合工作,但是允许专有应用程序执行此操作的例外情况不需要遵守GPL的分发要求。 因此,在这种情况下,Oracle可以自由地使用系统C库(需要运行他们的代码),而无需发布其源代码。

    如果Oracle发布需要加载或链接到GPL覆盖库的软件,比如readline() ,那么是的,他们将有义务分享代码。 Oracle(与为类UNIX操作系统编写软件的许多其他人一样)会谨慎选择在更宽松的许可证(又名2或3子句BSD)下发布的库,或者自行实施。

    就内核而言,仅仅使用它的系统调用接口并不构成组合工作。 虽然我们大多数人只是让系统C库将这些复杂性抽象出来,但您完全可以根据自己的需要随意实现自己的系统调用。 这说明了为什么系统C库的LGPL是一个非常具有战略意义的选择。 如果是相反的话,GNU / Linux会让更多的开发者望而却步。 还要注意,许多定义与内核的系统调用接口进行交谈所需的幻数的Linux头文件没有任何提及的许可证。 例如,参见linux/sysctl.h ,或者Linus自己在与内核一起发布的COPYING文件中的注释:

    注意! 该版权不包括通过正常系统调用使用内核服务的用户程序 - 这仅仅是内核的正常使用,并不属于“派生工作”的标题。 还请注意,下面的GPL受自由软件基金会的版权保护,但它引用的代码实例(Linux内核)受我和其他实际编写它的人的版权保护。

    还要注意,就内核而言,GPL唯一有效的版本是许可证的特定版本(即v2,而不是v2.2或v3.x或其他),除非另有明确说明。

                        Linus Torvalds
    

    请注意,Linus特别指出,使用内核头文件和系统调用接口并不构成派生(如修改)或组合(如简单使用)的工作。 除此之外,这是Linux和GNU之间裂痕的一部分。 我提到这一点只是因为你间接提到了GPL的分支。 Linus(有时)需要修改内核的代码,但选择了GPL来确保(有时)是他的选择。

    简而言之,如果您链​​接或加载GPL涵盖的库,则必须在相同的许可证下提供您的代码。 如果链接或加载LGPL涵盖的库,则授权条款由您决定。

    还要注意LGPL还有很多话要说,特别是在修改,静态链接等方面。我所描述的只是回答你的问题。

    最后,GPL仅适用于您分发或传送节目的情况。 你可以在计算机上做任何你想要的软件,并且你没有义务与计算机的其他用户(或者服务器,或者其他)共享它。 AGPL有话要说,如果软件与网络互动......但这是另一个问题的话题。

    FSF在licensing@fsf.org上发布了与GPL相关的问题 - 如果您对某个特定案例有疑问,并且希望确保您不会遇到麻烦,那么他们相当友好并乐于回答问题。即使您正在制作非自由软件。 他们喜欢它,当人们努力确保他们适当地执行许可证时,不幸的是这种许可证不时发生。

    这个话题仍然和90年代初一样敏感。


    Linux是内核,没有应用程序直接使用内核,而是使用内核,通常是在LGPL下发布的GLIBC。 这有点违反了GPL链,因为GLIBC系统调用了内核,但似乎已经达成共识。 所以我担心你不会从Oracle获取代码:-)。

    如果应用程序使用任何GPL授权代码,那么您必须根据GPL授权使用该应用程序的源代码(但不仅限于您选择的许可下的开源代码)。 这使得GPL实际上是一种非常严格的许可证,“污染”产品,这就是为什么它也被称为病毒许可证。


    与GPL许可证的主要区别是构成根据本许可证发布的软件包的“使用”。 GPL将这种区分视为“合并”与释放“并行”GPL许可软件,以及后者是否构成“武器长度”关系。

    大多数使用GPL许可软件的软件可能会“合并”它,因此如果它被发布,它本身将被要求在GPL下发布。 (GPL不需要发布,而只是规定了发布必须发生的方式)。例如,使用基于GPL的库可以作为合并。

    在前面的答案中提到的F​​AQ包含了对这个问题的精确讨论,并举例说明了编译器和内核在何处具有公平关系的资格,因此编译器可以在没有任何GPL许可的情况下单独发布可能有,只要释放正确完成。 但是,我认为这比GPL涉及的规则更为例外。

    同样需要理解的是,与LGPL许可证相比,GPL许可证在这方面有很大不同,因为LGPL许可证的版本更加宽容。

    链接地址: http://www.djcxy.com/p/13949.html

    上一篇: What does open source license (like GNU

    下一篇: Reselling Open Source Code licenced under GPL, MIT