实例操作:十个步骤教你将闭源项目转换为开源

日期: 2014-05-08 来源:TechTarget中国 英文

Difio是一个基于Django的应用程序,它可以跟踪你的程序包并在其发生改变时通知你。它提供多种变化分析,因此你可以及时判断你何时以及如何升级。之前,Difio是一个闭源项目,但是作者决定把它开源,以便能够内部部署以及吸引更多的社区开发者参与进来。以下是作者 Alexander Todorov撰写的Difio开源过程中所经历的10个步骤,编译主要内容如下,以供各位参考。

1. 删除不必要的代码

任何一个存在了好几年的项目都会积累一些不再使用的代码和功能。删掉所有可以删除的代码,以保持项目的简洁。开源Difio前大约删除了约20%的现有代码,它们包括:

  • 未使用的和过时的设置
  • Django的应用
  • 静态文件和模板
  • 模型类(class)
  • 旧的URL
  • 弃用的功能
  • 其它Python工具

删除需要额外管理的内容和一次性代码。比如,我曾经在一些模板里使用Markdown而在另一些地方使用了纯HTML,还有一些模板tag只在一两个地方使用。把这些都删除,以保证模板间更加一致。硬编码路径、值、URL等在快速原型中是不可避免的。有时,一个封闭源代码的应用程序及其部署环境的遗留都需要清理。我已经在需要的地方设置并使用了自定义模板标签。

2. 创建独立的模块

重新组织文件结构也使得一切更加简洁和自然。让模块彼此独立,自成一体,这样以后分离起来也更为容易。

Difio的Web后端部署在OpenShift,它使用了不同的目录布局模板和静态文件。我移动了文件并更新Django的设置,以便它们能够正确加载,这也让我重新思考静态源文件被送达CDN后台的方式。

3. 分离内部代码和外部代码

在应用程序中有一些内部代码来为你提供更多信息是很正常的。这些代码如使用情况跟踪、其他指标、计费信息等。在基于网络服务的情况下,这些功能通常是与核心功能集成在一起的,但是它们需要被分离出来。

这也是一个决定到底该留下什么的好机会。比如说,Difio就没有传送它的测试用例,因为从CI环境分离它们需要跟多的工作量。

  • Difio包含五个单独的模块:
  • difio/ (核心用户体验)
  • 一个配置文件子系统
  • 计费模块
  • 扩展管理模块
  • 部署相关的模块(主要是设置)

所有这些都进行了适当的分离和相互隔离,以消除内部依赖关系。目前difio/依赖于几个配置文件的API ,它提供了正常的缺省值,这一步也帮助你从核心用户体验分离一些工作(如定制的电子邮件模板)。

4. 代码重构

重构和测试应该是一个持续的过程。不过,到现在为止你可能已经将全部的现有代码做了一个快速审查,发现很多东西需要改进。这也是创建一个简短的路线图和修正你的反馈(ISSUE)跟踪系统的好机会。它可以在早期对你的新项目展示和持续改进有所帮助。

在Difio项目上,我主要重构了一些内部的方法,让它适应新的应用程序结构。外部的方法被留到以后解决,因为它们不是必须的。

5. 做好法务工作

根据软件的不同和组织规模的复杂性,迁移到开源也许是相当耗时的,从选择合适的许可证、品牌、作者命名以及法律审查、寻找潜在的侵权代码等等,都需要在这一步解决。

对于Difio来说,这倒是简单的多。我选择了Apache 2.0协议,在所有源文件开头增加了协议说明,并妥善处理了我在互联网上可找到的外部代码的著作权和版权。

6. 更新和列出外部资源列表

作为一名软件开发人员,你必须及时将引用的外部软件升级到最新版本,并确保软件正常工作。没有人希望运行旧的外部程序,旧的外部程序有时会无法正常运行。你还需要提供一个列表,来让别人知道如何运行和安装这些软件。

幸运的是,Difio中只有有限的问题和程序依赖外部项目。

7. 提供文档和示例

对于每一个想加入你的项目的新人来说,文档是非常重要的。毕竟你开源是希望引起大家的参与,书面文档和范例是必须的。

对于Difio,我写了一个详细的README文件,因为该程序有多个子系统(消息传递、cron调用等),它有很多配置方式。我创建的第二个文档是一个内容管理指南,因为有些东西需要手动调整,这两个文件囊括了Difio最重要的设计和部署功能。不过,你可能需要为你的项目写更多的其他文档。

8. 创建一个公共代码库

你需要创建一个公共的代码仓并往上推送软件代码。

对于Difio,我决定复制整个difio/目录下的内容,进行初始化提交。这样以来,以前的历史就无法使用了,但我仍然决定这么做,以避免泄露在硬编码中的一些密钥和密码。在实际开发中,由于我的云环境中使用了Git部署,Git子模块取代了difio/目录,这缩短了发布/部署周期。

从现在开始,你对源代码的一切操作都应该公开进行。

9. 独立部署一个新的测试环境

直到最近,你可能一直在本地副本里操作来自于特定版本的应用程序,比如继承关系、环境配置等等,但在一个新的环境里从外部用户的角度测试将会帮你进一步完善文档,清理遗留问题。

在测试Difio的时候,我发现了几个缺失的或过多的需求、缺少或不恰当的设置、错误和不完整的文档。

你需要不断的重复修改、测试,直到每一步都是合理的、开箱即用的,这将确保你的用户和未来的贡献者可以顺利安装你的软件。

10. 对外宣布

这是最后一步了!写一篇 文章,对外宣布你的软件开源的信息。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐