以下是mogotest负责人在将项目过程中的一个心路历程自白,从中我们可以学习到将项目开源过程中需要注意的很多事项,总结一下:
1.必须明确开源的范围。可能一个完整的项目包括很多的组件和模块,要对其所涉及到知识产权作细致的分析和梳理。
2.选择一个合适的开源协议,并仔细阅读它的每一条条款。
3.必须确保开源的代码不包括任何用户个人信息。这一点非常致命。
4.尽量消除信息/网络安全相关的隐患,比如说系统漏洞。
5.尽量消除原来商业开发中引入代码的一些商业因素,比如说宣传广告,收费设计等。
6.尽量消除代码/注释中的一些带有明显个人/公司色彩的印记。
7.作好维护开源代码的计划。
2014年10月底,我宣布将Mogotest项目关闭。经过接近五年的运营,我很清楚这块业务无法继续增长了。并不是由于没有机会,我觉得是项目早期的一些商业决策导致现在项目举步维艰。具体是什么导致现在的失败我改天再谈。这篇文章我想讨论一下项目关闭后我是如何处理源码的。
正如我所料的,我宣布关闭项目后人们问我的首先事情之一就是我是否准备将项目开源。我的客户、对我们的项目感兴趣的公司(尽管他们从来没有觉得需要给我支持)、网友,还有其他一些人他们都很关心这个问题。我在之前有过思想准备,但是在我宣布之后遭到这么多人的问题轰炸还是出乎意料的。
其实我之前参与过很多开源的项目。但我没有我自己的“品牌”可以维护,我也没有专门销售过开源的软件或者开源软件的咨询服务,但我确实参与了很多开源项目。我所有的项目基本都用Apache 软件2.0版本开源许可。对于开源软件,我想我更倾向于实用主义而非理想主义。
如我以上所说的,我的第一反应就是不开源。我在理智分析之后的决定也是不开源。
这里我需要插播一段免责声明。以下的观点都是我源于我自己的经验和惯性思维,如果我说的大道理让你反感,请你原谅,我这个人还是很谦逊的。
第一点是情感上的。我刚从专注了整整五年的项目里面缓过神来。那时候我损失了两年的工资外加大概4万美元的存款来应对商业上的合伙人之间竞争。我觉得这是最有可能的结局,所以我一直不想要大家同情我。但是经过这么多事情之后又让我回到项目,把项目无偿奉献出来实在是太困难了。
还有一点可能是我比较小气的地方。一些人认为我们的项目不值得付钱,所以让我们免费开源给大家。当我想把项目转手的时候,那些潜在购买公司建议我开源,因为他们不想要付钱来使用我们的授权。所以,尽管我想让我现有的用户有时间来“软着陆”以解决我们项目关闭的问题,我也不想让那些占便宜的人在一旁看笑话。
把这些都放在一旁,将源码开源也是个极为繁琐的事情。我先不谈清理一些让我感到尴尬的东西,下面是我想到的可能不太全面的一些需要说明的点:
这中间有很多的责任。把所有的点都做好需要很多的工作。
这之后我让我自己打起精神,关注之前我根本不在乎的地方。我有时候会在代码中诅咒的。我对英语有着传统的观点,我也希望我丰富语言能符合我的观点。所以我在日常写作中使用了很多性别代名词,现在也必须公开了。我确定在代码里会“埋葬”着每一个写浏览器代码的人:)。毫无疑问,代码中会冒犯一些人,我的个人声誉也会受到影响。这些都是因为代码要公开。
我所做所有事情基本就是不断的清理之前的代码,而且是免费的。
即使我清理了所有的问题,接下来的问题就是我觉得开源的意义不太大。开源项目,是的,开源所有的代码,怎么说呢?我没有时间和财力在这个项目上。开源之后肯定很多人会询问各种各样的问题,而我有没有时间去逐一回答。这就会让我一直感觉这个项目只是个废品。另外,即使我有精力,我也没有动力去完成各种各样的新的设计任务。有些设计肯定会看起来很傻,但那又是受到时间和各种条件约束不得不做的。听起来很简单, 但是现在看来也许没那么容易。实现新的设计肯定是个进步,但是这些设计大多数都不是经过严格推敲的。如果不知道这个设计的来龙去脉,我可不想犯傻去做这个事情。
今天的晚些时候,我想修改一下Web持续集成测试这块,让它更好的运行起来。如果把Mogotest开源肯定对这有帮助。我会忽略掉一些困难。我已经在ASLv2的协议下开放了ancillary 类库,很快我也会在AGPL协议下开放主题程序的代码。经过上周14个小时的清理工作,我现在仍不敢100%确认代码里面没有泄露用户信息。把所有的代码都看一遍我可不太想干。
由于遵循AGPL协议,我决定尝试一下 crowd-sourced campaign 来帮助开源。要求我开源的公司没有做出任何实质性的事情来帮助开源这件事情。之前众多的从IndieGogo网站和Twitter来的评论邮件现在也同样令人灰心。
对开源这件事。我有过因为情感因素的第一反应。我分析了原委后,我决定不按照我的第一反应来开源我的项目。但是我没有成功。我认为我已经开源的那些工具会有利于他人,我在google的自动化测试会议上也说明了事情的进展。净屋实现(clean-room implementation)不应该太过复杂。鉴于我现在做了这么多的工作,你现在加入正是时候。不幸的是,我到站了。今天就到这里。
原文引自:http://code.csdn.net/news/2822834