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