How to opensource an existing codebase?
我为之工作的公司正面临一些困难,我们的未来,也就是说,是不确定的。在过去的几年里,我们开发了一个框架来构建社区应用程序和社交网络。我们相信这个主动性不应该完全丧失,它可能对社区有用,所以我们决定开源它。
我对这个过程有一些问题:
- 如何选择最合适的许可证,知道原始作者仍然可以贡献和/或做一些咨询?
- 在代码库中我们必须做哪些必要的修改?
- 您是否有一些指向某些现有文档/书籍的指针,这些文档/书籍将涵盖这个广泛的主题?
我知道这些问题很开放,没有简单的答案,但我想听听有类似经历的人的意见。
事先谢谢!
对于许可证,您必须询问您的许可证目标是什么。您的目标是建立一个由代码贡献者组成的社区,而不是让其他人创建您的代码的专有分支吗?那么GPL将是一个很好的选择许可证。您的目标是允许您保留版权、以开源方式分发它,但为希望将其链接到专有软件的人提供另一种许可证吗?同样,GPL可能是一个不错的选择,不过在这种情况下,您需要确保设置了来自任何其他贡献者的版权分配,这些贡献者会将更改发送回您,以便您可以重新授权他们的贡献。
听起来您的代码可能是服务器端软件,在这种情况下,您可能希望查看agpl;agpl类似于gpl,但如果在自己的服务器上运行,还要求人们将源代码分发给更改(gpl不需要,因为它只在分发时需要任何东西)。
如果您希望人们能够在编写专有软件的同时构建它,但是仍然能够对您的软件本身进行改进,那么lgpl是非常好的。如果你不关心专有的叉子,想要一些简单的许可,那么麻省理工的许可证是一个不错的选择。
唯一需要的修改是那些删除了您在法律上不能发布的任何代码的修改。如果您拥有所有代码的版权,那么它应该都是好的,但是要小心任何密码,如果您的程序中有任何密码,请与律师联系。出口限制可能是一个难以处理的问题,尽管它们确实有使开源软件的过程更简单的规定。
除了必要的修改之外,最好确保代码易于在尽可能多的系统上构建和运行。例如,您应该检查哪些依赖项是必需的,哪些依赖项是可选的。关于如何构建和安装软件的一些好的文档也很好,以及在任何软件开发中(不仅仅是开源的),如易于构建的系统、单元和回归测试等,您都希望得到的所有常见的东西。
其他一些需要考虑的事情是:
我可以继续列出更多细节,但我可能会重复已经说过的话。如果你想了解更多信息,我建议你阅读卡尔·福格尔的《开发开源软件》。
如果你正在寻找方法将这个软件的开放源代码整合到为你的公司赚钱的策略中,乔尔·斯波斯基的观点是我读过的最清晰的观点之一。
如果您只阅读一本关于开源许可主题的书,那么就很难比劳伦斯·罗森的开源许可做得更好。
上周我们也做了同样的事情。我们选择Mercurial作为版本控制系统,它的工作方式很有魅力。BitBucket是一家托管公司,它为开源项目提供免费托管。你还需要更多的文档,因为来自世界以外的人很有希望加入你的项目——这与向你隔壁的学院解释不同。
一件重要的事情是你必须记住,你现在有了一个你不想惹麻烦的听众。通过内部开发,您通常会更改API、数据库模式或类似的内容。对于开放源码,您必须记住,次要版本之间应该有兼容性,必要时清除迁移路径。