为什么我的代码进入闭源状态

我做出了一个可能让很多人遗憾的决定。从今天开始,我曾经开源放在 GitHub 上的代码,除了教育性质的代码,全部进入私有闭源状态。这些代码包括 PySonar2,RubySonar,ydiff 等等,它们已经从 GitHub 上消失。从今以后,除非用于教育目的,我将不再开源任何代码。当然,大家已经下载的那些代码,仍然可以按照开源许可证免费使用,然而最新的改进以及将来的新产品,将全部闭源。做出这个决定的大部分原因,是因为多次对人心的失望。

PySonar2 一度处于开源状态,使用宽松的 BSD 和 Apache 版权。PySonar 的用户包括了 Google,Sourcegraph,还有其它几个我不能透露名字的,做专业代码管理工具的公司。很多人崇尚 BSD 这样的宽松版权,因为这样可以最大限度的传播代码。他们甚至把这作为了一种信仰,对于 GPL 这类严格限制商业用途的版权嗤之以鼻。甚至遮住眼睛对你说:“你的代码是 GPL 的,我不能看!看了之后写出一样的代码来,你会起诉我!” 然而多年的经历之后,我才发现 BSD 并不是好的开源版权,它其实会让代码的作者失去自由,而 GPL 才是真正保护软件及其作者的自由的。就像 Stallman 说的,自由软件(Free Software)这个词里的“free”,是自由的意思,而不是免费的意思。直到今天,我才明白他这句话的真正含义。

为什么 BSD 版权会让人失去自由?这个故事要从 Sourcegraph 讲起……

Sourcegraph 是一家做代码管理工具的公司。他们初期的系统,其实只是在 PySonar 之上做了一个简单的 web 包装。把 PySonar 分析出来的信息倒到数据库里面,然后通过 web 方式显示给用户。PySonar 本身早就有一个演示程序,可以生成互动的 HTML,所以其实 Sourcegraph 能做的事情,我很容易就可以做到,只不过多一些杂活而已。Sourcegraph 并没有在 PySonar 之上增添很多的新东西,也无法做出 PySonar 这样的核心技术。他们早期的 UI 混淆不堪,有很多地方都是我给他们改了之后,才好了一点。但是因为我一直不在乎 Python 这语言,也没觉得这种工具有什么市场,所以一直没有动手开发一套完整的服务。不是不能做,而是没有动力去做。

BSD 的版权使得 Sourcegraph 的两个创始人可以完全免费,无限制的使用 PySonar。这样的结果,使得我无法为 PySonar 收到任何的回报。后来 Sourcegraph 的两个人找到我,想招我进去,帮助他们制造 RubySonar 和改进 PySonar。这样就开始了我们的不平等合作关系。Sourcegraph 使用了 PySonar,按理我不需要另外做什么,就应该有一定的回报。然而现在他们把我招进去作为员工,我必须要做点其它事情,才能得到回报,也就是说我反倒成为了他们的打工仔。几个月之后,我逐渐发现这两个人的肤浅和不尊重。最后,在得到了最重要的技术改进之后,两个创始人翻脸不认人,把我赶出了公司。

新的 PySonar2 里面已经没有了 Google 的代码。由于对人心的失望,我曾一度把 PySonar2 的版权改为 AGPL。这是 GPL 的增强版,它要求任何使用这些代码的人和公司,在对它做出改进之后,必须把改进的代码能让人下载。就算你在自己的服务器上运行这些代码,不把它作为产品提供给人,也一样需要让人能够下载到改进的代码。这并不是说你不能用这些代码,但如果作为一个公司,你不想让别人得到改进后的代码,那么你完全可以找代码的原作者,付给他一定的报酬,得到闭源使用这些代码的权利。也就是说,AGPL 能够让代码的作者在某些时候得到应有的回报。

把版权改为 AGPL 之后,出现了一个奇怪的事情。申请美国绿卡的时候,我找以前 Google 的上司要一封“工作经历证明”。这种证明本应是公司无条件提供的,甚至不应该需要通过上司去获取,而是人事部无条件签发。然而收到 email 之后,前上司却对我说:“我可以给你这个证明,然而我想让你给我提供一个好处作为交换。你的 PySonar2 现在改成了 AGPL 版权,我们想用你的代码,却因为这个版权没法用。你能否把版权改为 BSD 一类的,这样很多人都可以用它?” 面对这样的无理要求,我很鄙视,所以干脆没要 Google 的工作经历证明,直接找其它公司开了证明。

又过了一段时间,我感觉 AGPL 似乎确实限制了 PySonar 的应用,所以又把版权给换成了 BSD,进而换成了 Apache,一种比 BSD 还要宽松的版权。刚换成 BSD,我就发现有一家代码工具公司 fork 了 PySonar,最新的 commit 正好是改为 BSD 版权的时候。这个公司从来没联系过我,从来没感谢我,只是无声无息地用 PySonar 来赚钱。他们 fork 这个时候的 PySonar,应该只是用于法律保护,证明 PySonar 的代码在这时候是 BSD 版权的。

这样的作法不仅让我一阵心酸。曾经一直在用 PySonar 的另一家公司的创始人 J,当天也发信来跟我说:“正在考虑给你版税呢,结果你就换成 BSD 了。哈哈哈!” 这是什么意思呢?本来都要付钱给你了,结果你把版权换成了 BSD,所以我就可以不给钱了,捡了个大便宜,就是这个意思吧。他最后还是象征性的给了一千美元,然而这相对于 PySonar 为他创造的价值,其实什么都不是。

我一直把 J 作为朋友。平时如果他报告 PySonar 的 bug,我乐意免费给他改进。我给他介绍投资人,甚至给他介绍妹子…… 我并没有图他什么,并没有要求回报。我只是想积点德,将来总有好的后果吧。然而,前几天当我宣布离开美国的时候,我才发现我的好心其实并没有好报。J 发信息来,说看我想回国,所以想招我进他的公司。给我开了一个价,具体的数字我就不说了,不过这个工资,现在国内是个程序员都能拿到。我当时想,给这点钱,给他当个顾问,关键时刻给点方向,隔几个月改改 PySonar 的代码也就算了,结果他说要求我全职给他工作。笑他太抠门,结果得到的回答是嘲笑:“你嫌钱少,可是你做出过什么真正的产品吗?” 哦,是的,PySonar 不是真正的产品。你在外面做个包装界面,然后功劳都是你的了,我还得给你打工?换成 BSD 版权的时候就捡了一个大便宜,现在我要回国,以为我落难了,趁火打劫想捡个超大便宜。说不定到时候还跟 Sourcegraph 一样跟我翻脸不认人…… 哎,我再也不相信任何免费用我代码的人了。

这就是我用 BSD 版权发行有价值的代码的辛酸史。有些人免费拿你的高价值代码去赚了钱,到后来却让你给他做廉价劳工。由于这个原因,从今天起,我的代码完全进入闭源状态。没有人再能免费得到 PySonar 最新的改进,没有人再能看见我最新的技术。另外我还留了一手,PySonar 其实一直以来都有一个未开源的分支,里面含有对于静态分析逻辑的重大改进,能够精确地发现很多 Python 程序里的 bug。从今以后,这一切都属于我私有,它们将会让我未来的产品立于不败之地。

后记:有人可能误以为我要一心拿 PySonar 来做产品。其实 PySonar 支持的那种产品只能用于企业内部提高生产力用,不能产生直接的效益。由于 PySonar 等技术的复杂度和难度之高,收益却不成正比,所以我并不把它作为一个很好的创业手段。我首要的创业目标,应该是创造直接的生产力和效益,而不是提供间接的辅助设施。提供给程序员的产品,程序语言等等,虽然也很重要,然而优先级在我这里其实不是最高的。