我最近发现我对开源(Open Source)的看法和我的很多朋友不一样。我对开源的态度一贯是:
这段代码能够很好的解决我的问题。假如它也能解决你的问题,我很欣慰。但是假如它不能,我愿意做一些改进,但是我也会拒绝一些让代码变的臃肿的的想法。最后,做一个成熟的库大约需要几年的时间。成熟我是指足够的稳定来发布一个最终的版本,或者有人做了一个高级版本。我不认为一个开源的项目能说明我在这个行业的成就。
但是和别人的交流我发现他们不愿意做开源的原因如下:
1. 代码不够成熟
2. 不想写文档
3. 不想被需求和各种邮件占用太多时间
我完全理解这几点,但是我开发生涯中的一些事件改变了我的看法。
那是我的第一个开源项目,我一直不敢拿出来开源,直到我把他用在生产环境中稳定的运行了一年,我有足够的自信相信我这个项目能解决一些问题。它是一个 .NET 对象关系映射库,叫做 NORM,在2005年发布。我相信你没有听说过这个项目。我花了好几个月的时间来完善这个项目,但是没有人在乎。然后我就不想再发布什么东西了。我现在相信不论我发布什么都不会引起人们的注意,所以我最好还是尽快的发布,如果不行,那就承认失败,然后继续前进。
没有人会为自己写文档,他们为其他将要用这个软件的人写文档。人们很少从使用他们开源软件的人那里得到什么。这个简单的现实导致文档的稀缺。但是,缺乏文档不代表你不能开源你的软件,它只是意味着你的软件推广起来会比较慢。
我两年以前开源了 expectations,没有任何文档,并且在一年之内都没有任何文档。在这一年中,很少有人关注了这个项目。但是这个项目确实对一些人来讲很有用,所以还是有一些应用。最终,有一些用户开始产生一些 pull request,提交一些文档。他们的共享让我产生了撰写文档的动力。我没有动力为潜在的使用者提供文档。但是我把代码放在那里,有人用了,这个就让我产生了动力,因为这些使用者实实在在就在那里。
如果你很幸运的创建了一个广泛使用的项目,你将毫无疑问的被各种邮件淹没。刚开始,我相信任何人都会被这种成功冲昏头脑,认为增加的工作量不是什么大问题。但是慢慢的你会发现,这就像是第二份全职工作,然后你会想着究竟是为了什么?在开发者中的声誉并不能让你提早退休。不管怎样,这不能成为你不做开源的借口。还有,我相信 GitHut 已经改变了游戏规则。如果你的项目托管在 GitHub,当你打算停止维护这个项目的时候,会有很多人愿意 fork 你的项目,继续开发的。
我并没有因为离开自己的项目而良心不安。如果你的想法真的有价值,会有人愿意接替你的位置的。很有可能是有几个人愿意接替你,然后最强的那个生存了下来。我见到的类似的项目有 Capistrano。Jamis Buck 在2009年高调的离开了这个项目,但是我知道还是有很多人到今天还在使用它。我坚信假如你的项目真的很好,即使有一天你决定去做其他事情,这个项目也会活的很好。
我看起来不像是一个开源的好公民,过早的发布,过早的离开。如果真的是这样的话,我愿意接受批评,但在我看来事实并不是这样。