如果我们使用一个很好的库(如TetGen ),生成一个简单的应用程序包装器来简化我们的需求并将其发布为开放源码,那么我们能在商业产品中使用它吗?
这是GPL和AGPL许可所允许的,还是强制所有由许多这样的应用程序组成的商业产品都是开源的?
发布于 2014-10-28 12:08:15
对于在商业产品中的使用没有明确的限制,只对派生作品的分发(或用作AGPL代码的服务)没有明确的限制,而不分发它们的源代码。
因此,如果您想要使用这个库,您要么必须遵守GPL许可证,要么就必须付费才能在许可下获得许可。
应用程序是否被视为派生工作,以及是否必须在兼容许可下授权应用程序,取决于如何调用GPL代码。
如果您在GPL/AGPL软件和您自己的软件之间共享接口和数据结构,那么它们很可能被认为是派生的工作,您自己的软件将需要在兼容的许可下获得许可。
如果您使用类似unix管道的方法将数据流从一个程序输送到另一个程序,那么这些程序处于单独的进程空间中,并且没有共享数据结构,那么它们很可能不会被认为是派生的工作,您可以在自己的代码上附加任何您想要的许可。
来自关于GNU许可证的常见问题:
“聚合”和其他类型的“修改版本”有什么区别?“聚合”由多个单独的程序组成,它们分布在同一个光盘或其他媒体上。GPL允许您创建和分发聚合,即使其他软件的许可证是非免费的或GPL不兼容的。唯一的条件是,您不能在禁止用户行使每个程序的单独许可所授予的权限的许可下释放聚合。两个独立的程序和一个有两个部分的程序之间的界线在哪里?这是一个法律问题,最终由法官决定。我们认为,适当的标准取决于通信机制(exec、管道、rpc、共享地址空间内的函数调用等)。以及通信的语义(什么样的信息是交换的)。如果模块包含在同一个可执行文件中,那么它们肯定是合并在一个程序中的。如果模块设计为在共享地址空间中连接在一起运行,那几乎肯定意味着将它们合并成一个程序。相比之下,管道、套接字和命令行参数通常是两个独立程序之间使用的通信机制.因此,当它们用于通信时,模块通常是单独的程序。但是如果通信的语义足够亲密,交换复杂的内部数据结构,这也可以作为将这两个部分合并成一个更大程序的基础。
有关更多信息和其他建议,请参见这个答案 to 我可以在我的封闭源代码应用程序中动态调用LGPL/GPL软件吗?
但是,与往常一样,除非您的情况是明确的,否则您可能需要咨询一位在开源许可方面是专家的律师,然后再将您的业务模型建立在此基础上。
付费使用
如果您确定您的产品将形成派生工作,并且您不希望开放您的产品,则另一种选择是简单地以商业条款授权库。根据TetGen牌照常见问题 (问题2),图书馆是双重许可的,你可以联系他们的价格和条件。
如果这符合您的业务模式,那么这可能是一个很好的方式来回报开放源码社区,鼓励它的增长和未来的开发,并帮助分享您通过更广泛地分发他们的软件而产生的一些利润。每个人都赢。
发布于 2014-10-28 10:36:03
当我为一个有很多愿望的客户开发商业软件时,我使用了开源组件。这确实意味着他收到的产品也是开源的,但也是商业化的。如果没有钱的话,我就不会写这段代码了。
因此,是的,您可以在商业软件中使用开源组件,当然,对于GPL,该软件也必须是GPL。
https://softwareengineering.stackexchange.com/questions/261094
复制相似问题