假设您有一个大型的多服务集成项目。您突然决定将其中一项服务开源。在不泄漏其他部分的情况下,您将如何做到这一点?
例如,释放一个服务的整个存储库可能不起作用,因为其他服务的草图曾经驻留在这个存储库中,后来又被分开了。
另外,您会如何处理与“完整性”相关的部分。您可能有两个组件 A 和 B,它们协作,但您只想开源 A。您将如何处理与 B 相关的代码?
其他人如何实现相同目标的好例子将有很大帮助。
假设您有一个大型的多服务集成项目。您突然决定将其中一项服务开源。在不泄漏其他部分的情况下,您将如何做到这一点?
例如,释放一个服务的整个存储库可能不起作用,因为其他服务的草图曾经驻留在这个存储库中,后来又被分开了。
另外,您会如何处理与“完整性”相关的部分。您可能有两个组件 A 和 B,它们协作,但您只想开源 A。您将如何处理与 B 相关的代码?
其他人如何实现相同目标的好例子将有很大帮助。
将软件作为开源发布时,您需要决定许可证。有几种流行的经批准的开源许可证。OSI 批准许可证,如果您希望您的工作被他人采用,则不应选择未经批准的许可证或设计自己的许可证:http: //opensource.org/licenses/category
在开源许可证 X 下发布软件包 A 时,您自己没有义务遵守许可证的条款。您保留软件包 A 的版权,即使其他从您那里获得软件许可的人不允许分发 A 与非自由软件包 B 的组合版本,您仍然可以这样做。
但是,只有在没有包 B 的情况下仍然可以使用包 A 和/或如果您希望其他人为 A 做出贡献时,开源才有用。一旦其他人为 A 做出贡献,您就开始分享部分内容的版权和他们一个。实际上,如果他们根据许可证 X 向您提供回馈,则您将不再被允许在未经他们特别同意的情况下分发 A 和 B 的组合(有效地为您提供个人许可证)。
现在让我们看看您有哪些选择:
在许可许可证 Y下发布包A。BSD 许可证是此类许可证最突出的示例。该许可允许每个人将 A 与任何非免费包 B 结合起来。它还允许每个人在非免费条款下将 A 重新许可给其他人。由您决定是否对此有问题。在此类许可下发布的示例软件:X.org 显示服务器、LLVM 编译器、Mach 内核(用于 OS X)、BSD 操作系统。
在严格的非许可许可 X下发布包A。GNU GPL v2/v3 许可是最突出的例子。仅在相同或等效许可下才允许重新分发包 X。该软件不能链接到非等效许可的软件并重新分发。(允许单独链接 A 和 B,但不允许分发)。您可以将 GPL 软件与 BSD 软件链接,因为 BSD 软件在您的发行版中成为 GPL 许可(因为 BSD 许可允许这样做)。要仍然从外人的贡献中获利,请使用版权协议这些各方为您提供其贡献的全部版权。因此,即使 A 包含其他人的代码,您仍然可以自己在非 GPL 许可下分发包 A、B。执行此操作的示例软件:MySQL。
在不那么严格的非许可许可证 Z 下发布包 A。GNU LGPL v2/v3 许可证是最突出的例子。这些许可证的行为与上述许可证类似,但允许将包 A 链接到任何非 LGPL 软件并进行分发。被许可人不得在非 LGPL 条款下重新分发您的作品,但他们可以将其与非自由软件结合,例如通过插件系统。大多数使用此许可证的项目本质上是库而不是最终用户软件。所以你可以在你的非自由项目中使用这些库。突出的例子:Qt、Webkit(用于 Chrome 和 Safari)。
选择解决方案时的问题本质上是:您希望在其他人使用包 A 时给予多少自由?您给予的自由越多,您就越有可能被采用并为您的项目做出贡献。然而,在最宽容的形式中,你为那些只从你在 A 上的工作中受益、可能与你竞争、根本不回馈你和/或公众的人敞开大门。