对开源的一些感悟
通过 CQHTTP(最初的全称叫 CoolQ HTTP API),我经历的不只是一个项目的开发、迭代和流行,而是一整个以 CQHTTP 为核心的开源社区的形成,这里面包括各语言 SDK、开发框架、具体的机器人应用、web 控制面板、API 兼容的替代实现、CoolQ 关闭服务之后的替代 runtime、各类教程和文档等。
有时候我觉得这个过程和 Linus Torvalds 上传 Linux 初版代码之后逐渐形成 Linux 社区没什么本质的不同,只是规模小了几个数量级、场景更加小众。
在这个社区的形成过程中,很重要的一点是,CQHTTP 和大部分周边项目都是开源的,开源的关键在于“开放源代码”(open source),而不只是“公开源代码”(public source)。“开放”的意思是说,首先,社区是开放的,任何人都可以参与到社区里来,开发各式各样的周边项目,其次,这些项目本身也是开放的,从项目的一开始就以开源的方式进行,作者在 GitHub 上公开 push 代码,同时也随时可接受别人的 pull request。与之相对的,是另一种我想称之为“假开源”的形式,在项目封闭开发完成后,去掉所有 Git 历史,创建新的第一个 commit,内容写做“release 1.0.0”,然后发布到代码托管网站,接着可能在 issue 里面回答一些问题,代码仍然封闭开发,到下一版完成后,再去掉 Git 历史,覆盖到上一版代码中,提交第二个 commit,写做“release 1.1.0”。这后一种“开源”,只是把源代码公开了,而不是真正的开放。
另一个很重要的点,是所有项目的开发者,都是自发地来参与开发,而不是为了钱或是被迫的。每个人都是出于自身的兴趣,选择从头开发或者参与社区中的已有项目,没有人需要被安排“你这周做什么,下个月做什么”,也没有人期待从项目中获得金钱收益。大家主动从社区中发现需要修复的 bug、需要补充的功能,而不是被动地做自己不愿意做的事。如果你要问这些开发者为什么作业那么多、上课那么忙,还要熬夜写这些代码,大部分会回答“因为好玩”。
从初中生、高中生到大学生,甚至是工作后半路转行做程序员的人们,有很多人在使用 CQHTTP 社区项目的过程中入门了编程,无论是 C++、Python 或是其它。也有很多人通过开发 CQHTTP 社区项目获得了自己的用户群体、GitHub 星星、更丰富的编程经验和更广的人脉,并以此找到了更好的学习和工作机会,包括我自己。这常常让我感慨万分,让我感到自己曾经做的事情并不是简单的玩具,虽然它的影响范围很小,但它是有意义的,它帮助到了许多人,也或许间接地微弱地帮助到了中国的软件行业。
我想我会一直坚持我所认同的开源理想主义,坚持我的初心。
当然了,开源的开发形式和理想主义并不是 CQHTTP 本身成功的根本原因,它成功的根本原因是解决了 CoolQ 难以用多种编程语言开发的痛点。如果当时我选择闭源,它可能仍然会成功。但如果真的闭源,可能就很难形成后来那么开放的社区了。所以,要想成功,解决痛点是必须的,而解决痛点之后以什么形式呈现,就是理想主义和现实主义的分野了。