Categories

Why Open Source? Just for Fun!

Open Source其实一直也在想这个问题,当然我并不是在想开源的战略价值或者商机之类的,只是想弄清楚自己为何会走进这个世界,以及这里吸引我和让我感到无奈的一些地方。

Just for Fun 来自于那本写 Linus Torvalds 的书 Just for Fun: The Story of an Accidental Revolutionary 的标题。最初看这本书的时候其实也是刚刚接触到 Open Source ,也正好是对 Open Source 最狂热的时候,事实上那个时候根本没有思考过这个问题,只是既然这句话由开源世界里大神级别的人物 Linus 说出来,也就当喊口号一样拿过来就用了。不过后来仔细回想,觉得其实是个相当贴切的词。

如同其他许多人一样,我接触开源也是从 Linux 开始的,Debian 呀、Emacs 之类的,一开始也是觉得好玩吧,后来才慢慢接触到一些概念上的东西,诸如 Free as in Free Speech 于 Free as in Free Beer 的区别、Open Source 的概念还有 GPL 之类的东西。显然,我用这些开源的东西并不是为了想要保持我的系统里没有一个商业(或盗版)软件。那是有其他什么目的吗?也不是,一开始只是好玩而已,那时刚从高中毕业的我,一点也没有意识到应该开始为自己将来的人生做打算了。

再到后来会尝试报告一些 bug ,提交一些 patch ,甚至发起一些自己的开源项目,这让人很有荣誉感不是吗?可是其他很多事都能让我很有荣誉感,选择这个肯定是因为兴趣所在了。当然,其实网上早已有一些相关的讨论——为什么人们会参与开源社区,自发地做贡献呢?

有一个说法就是开源的东西往往是自己要用到的东西,发现没有现成的,于是就创造了一个,放到 Internet 上,就算是贡献了。这也算是挺符合的一个理由吧,不过,我觉得更大的驱动还是兴趣所在,另外,虽然大部分人都是更喜欢创造新的东西而不是维修旧的东西,但是很无奈地,人们如果用你的工具时遇到问题,通常都会第一个想到找工具的作者,所以总是免不了会有一些后续的维护工作——这将是更艰难和漫长的一个任务,如何把这个维持下去呢?

自己要用?恐怕不是吧,一个软件会遇到的问题总是五花八门各式各样,就算我自己天天也在使用,别人会碰到的问题我并不一定能碰到,甚至有时候就算是想要重现也重现不了。开源社区还有一句经常会见到的话就是“it works for me”,它在我这里工作得好好的,我不知道为什么在你那里会出这样的问题,你最好检查一下你自己的系统,看它是不是和其他什么东西冲突了?我想,随便打开一个项目的 Issue List ,里面 fix 的 bug 或者添加的 new feature 恐怕只有很小的一部分是作者自己需要用到的吧。

责任?不!我没有任何责任,从原则上来说,我贡献出工具来,但是我并没有要求你去使用它,所以我没有任何义务(或责任)来帮助你解决这使用中遇到的问题。如果想的话,我可以在任何时候宣布不再维护这个项目。前不久看到 Capistrano 的作者宣布发布最终版并不再维护和开发后续版本的 blog 文章(Capistrano 是 Rails 社区一个很流行的 deploy 工具),让我吃惊不小,不过缓过神来仔细想想,其实是很正常的事,而且没有谁会因此而责备他。

那么荣誉?也许也有一些吧,但是有称赞也总会有批评的声音吧,就更不用说还有相当一些自以为是的人了。之前 fcitx 的作者 Yukking 宣布停止开发的事(应该是比较久以前的事了),据说是因为一些“编程高手”不断地评击 fcitx 的代码写得如何如何地烂。那好,那你们来写高水平的代码好了。

说到底,还是兴趣的结果吧。反思我自己的情况,似乎也是如此,比如最初的 sdcv-mode ,或者用户量再多一点的 RMMSegpymmseg-cpp 之类的,以及经常都有 feature suggestion 、bug report 甚至完整的 patch 提交以及各种 snippet 和相关工具贡献到社区里来的 YASnippet 。一开始为何会创造出它们来呢?确实是因为我需要,但是也要有兴趣的成分。

比如,我想要在 Ruby 里抓取网页,但是 Ruby 没有提供现成的完整的 Cookie 支持,原则上我可以写一个 Cookie 库出来解决这个问题,但是读冗长的 RFC 以及处理各种混乱的 Cookie 情况已经完全超出了我的兴趣范围,所以在必要的时候我就直接换用 Python 或者是 Java ,或者是等其他感兴趣的人来做这件事情。

而项目的维护,则更是如此,上面提到的那些东西,甚至是 YASnippet ,我现在几乎都是从来没有用到过。所以不存在我自己需要用的问题。责任也谈不上,虽然如果我拖延了很久才回复用户的反馈时通常都会出于礼貌加上一句“I’m sorry for the late reply”,但是我从来没有觉得我有任何义务必须要去做这些事情。当然,要说撒手不干了,我想,Capistrano 的作者肯定也是纠结了很长时间才最终下的决定吧,再怎么说,有自己亲手创立的项目,总是会有感情的吧。只是

I look forward to being able to experiment and play with new projects and new ideas.

或许兴趣已经不在了,或者发现了一些其他的需要自己投入精力去做的事情。毕竟很大一部分开源项目其实都是由贡献者们在业余时间打造出来的。

这其实也算我对开源社区感到的一种无奈吧,当然,支持商业软件的大公司也是有倒闭的可能的,但是总是要比主要有个人兴趣所支撑的开源项目要稳定一些。所幸的是,死去的项目,如果确实有价值的话,总是还会再复活过来的。

另外,虽然龙蛇混杂,但是总的来说,开源社区还是相当友好的,许多时候都能得到热心的帮助,当然,你自己也得要有好的态度,毕竟是需要大家互相尊重的。事实上,我在开源社区里碰到一些亦师亦友的人,对我的影响还是很大的。

最后,抛开所有这些东西,就开放源代码本身来说,我想,是一个非常不错的建议。大概谁都不会愿意把破烂的代码共享出来吧,那样太丢脸了,所以,在写开源的代码时,就多了一个理由让自己写出更好的代码来。另一方面,能读到别人的代码,也是一件非常重要的事,有一句话我觉得非常有道理,原话我不记得了,大致意思就是说,作家能够写出伟大的文字和他博览群书显然是有很大的关系的,类比过来,程序员要写出伟大的代码,自然少不了要时常阅读别人写的 Beautiful Code 。我觉得说的很有道理,有时候看到别人的代码,会有一种“原来还能这样”的非常畅快的感觉,当然,遇到这样的情况并不多,因为阅读代码和读书其实差不多吧,这是一个慢慢积累的过程,心急不得。

6 comments to Why Open Source? Just for Fun!

  • “Just for fun”这概括真贴切。我在wyest那里留的评论也提到,我觉得生活就是要Be Happy,大家都Happy,可能就是我的人生观吧。

    然而现实是复杂的,走向大方向的Happy并不能使得每个细节都是Happy,遇到选择,每个人都有自己的做法。不过总体上看,前仆后继,还是很好的 :p

  • 圆圆

    @quark
    但是大家都 Happy 好难啊~

  • ziffer

    你好,无意中看到你的网站http://lifegoo.pluskid.org/wiki/index.html,我本身并不做网站,可是看到你的页面很漂亮很舒服,突然有了也做个自己的网站的想法,就像你的这个,放些自己的东西,因为没有研究过这个东西,不清楚你用的是什么工具和环境,是开源的吗?我自己有个服务器是Linux + Apache, 希望你能提供点信息我可以业余做做玩哈,想做网站完全是看的你这个很漂亮。谢谢啊
    我的邮件地址放上了

  • @ziffer
    你好,那个站点是用 Emacs Muse 生成的,当然 css 是需要自己弄的。 🙂

  • ziffer

    @pluskid
    好,谢谢,看来css还是关键啊

  • qiyang

    文章写的不错的说