如何开源现有的代码库?

时间:2009-04-24 15:45:28

标签: open-source

我正在为之工作的公司面临一些困难,而且我们的未来就是不确定的。在过去几年中,我们开发了一个构建社区应用程序和社交网络的框架。我们认为这一举措不应该完全丢失,并且可能对社区有用,所以我们决定开源。

我对此过程有一些疑问:

  • 如何选择最合适的许可证,知道原作者仍然可以做出贡献和/或做一些咨询?
  • 我们必须在代码库中进行哪些必要的修改?
  • 您是否对某些现有的文档/书籍有一些指导,这些文档/书籍将涵盖这个广泛的主题?

我知道这些问题非常开放,没有简单的答案,但我想听听一些有类似经历的人的意见。

提前致谢!

3 个答案:

答案 0 :(得分:6)

对于许可证,您必须询问您的许可目标。您的目标是构建一个回馈代码的人社区,而不是让其他任何人创建代码的专有分支吗?那么GPL将是一个很好的选择许可。您的目标是允许您保留版权,将其作为开源分发,但是为希望将其与专有软件链接的人提供替代许可?同样,GPL可能是一个不错的选择,但在这种情况下,您需要确保从任何其他贡献者处设置版权分配,以便您可以重新许可他们的贡献。

听起来您的代码可能是服务器端软件,在这种情况下您可能需要查看AGPL; AGPL就像GPL一样,但如果他们在自己的服务器上运行它(GPL不需要,因为它只在你分发时需要任何东西),也要求人们将源分发给变更。

如果您希望人们在编写专有软件时能够构建它,但仍然可以将更改改回软件本身,LGPL非常好。如果您不关心专有的叉子,并且想要一些简单的许可,那么MIT许可证是一个不错的选择。

唯一必要的修改是删除您无法合法发布的任何代码。如果您拥有所有代码的版权,那么它应该都是好的,但要小心任何加密代码,如果您的程序中有任何代码,请与律师联系。出口限制可能很难处理,尽管它们确实有一些条款可以使开源软件的过程更简单。

除了必要的修改之外,最好确保您的代码易于构建并在尽可能多的系统上运行。例如,您应该检查哪些依赖项是必需的,哪些依赖项可以是可选的。关于如何构建和安装软件的一些好的文档也很好,以及在任何软件开发(不仅仅是开源)中所需的所有常用内容,例如易于构建的系统,单元和回归测试等。 / p>

要考虑的其他一些事情是:

  1. 其他人如何改变你?邮件列表上的补丁?附加到错误报告的补丁?福特GitHub
  2. 您将使用哪种版本控制系统?我一般主张使用分布式修订控制系统,如GitMercurial,但Subversion也非常受欢迎,应该可以胜任。
  3. 确保你明确社区应该如何运作;一个描述如何获取软件以及如何贡献的网页,指向您的邮件列表或IRC频道的指针或您想要讨论的任何媒体。如果您要拥有一组核心提交者或类别的东西,请记录选择提交者的过程如何工作。
  4. 我可以继续列出更多细节,但我可能会重复已经说过的话。如果您想了解更多信息,我建议您阅读Karl Fogel的Producing Open Source Software

答案 1 :(得分:2)

如果您正在寻找将此软件的公开采购纳入为您的公司赚钱的策略的方法,Joel Spolsky's take是我读过的最清晰的一种。

如果你只读过一本关于开源许可证的书,那么劳伦斯·罗森(Lawrence Rosen)很难做到Open Source Licensing

答案 2 :(得分:0)

我们上周完成了同样的过程。我们选择Mercurial作为版本控制系统,它就像一个魅力。 Bitbucket是一家托管公司,提供免费托管的开源项目。您还需要更多文档,因为来自世界各地的人们都希望加入您的项目 - 这与向您隔壁的同事解释事物有所不同。

还有一件重要的事情是,你必须记住,你现在有一个你不想惹恼的观众。通过内部开发,您经常会更改API,数据库架构或类似的东西。对于开源,您必须记住,如果需要,次要版本和明确的迁移路径之间应该兼容。