聊聊Github的方法与哲学
开源思索集
开源已经是一场革命,但是在开源的发展历史上,其实依然在不断地发展,甚至革命。简单地回顾一下:
最早的开源,仅仅是把自己的源代码开放出来,或者让别人用磁带复制带走,或者放在Server上供人下载。
再后来,关于这个项目的代码与功能,就浮现出来了两个问题:代码大家都能改,如何整理与汇总各自的工作成果?功能大家都有想法,最后应该做成什么样?
于是,源代码版本管理工具与各种在线讨论的方式,开始了一轮又一轮的演进。具体的项目就不再一一列举,但是其中最大的一次创新,就是从集中式版本管理走向了分布式版本管理。如果说Github有自己的哲学,它的来源,首先是分布式开发的理念。
分布式开发与分布式版本管理:没有一个核心的版本库,意味着没有任何一个人、任何一个组织是核心,每个人都可以在自己的机器上保留全部的版本树,并且不断发展自己的版本。一个人的代码,既可以贡献给A,也可以贡献给B,一切自由。
随着Linux开发的哲学,被逐步地传播开来,才有了Github的出现。最初的Github的最大的贡献,是将这种无中心,多分支的开发模式,Web化、常态化了。一键就能够fork自己的分支,然后可以跟原有的分支毫无关联,也可以非常方便地提交pull request,这就带来了更加频繁的分裂,**使得分裂常态化了。
**
原来的开源社区,我改了代码,希望能够贡献给社区,需要穿越种种障碍,如果社区不接受,最后我只能逼不得已,自己开一个新的分支,变成一个新的项目。在分裂是异常的状态下,分裂是罪恶的,是不应该的,是会带来阵痛的。当分裂变得常态化,pull request也变得常态化,分分合合,以每天N次的速度发生,恰恰因为如此,它不再是一种罪恶,而是一种健康的、向上的、以更快速度进步的模式。大家不再是在一个版本下,各自贡献,而是在各自的版本下,独立发展,想分就分,想合就合。
这背后折射出的哲学,可以这样总结:如果将分裂视为罪恶,而力图用各种方法去阻止,总会碰到各种各样的新的困难。如果反其道而行之,通过技术手段尽可能地方便分裂与合并,这反而是满足了真正的需求。(阻止分裂,其实是在压抑开发过程中存在的真实需求)所以,尽力满足真实的需求,才有可能获得成功。
随着这样的模式,变得常态化,然后Github才被称为一个社区,fork/pull request也从一种开发行为变成了一种社交行为。于是,程序员们发现,最好的交流,正是通过源代码来交流,一切的讲道理都不如用源代码来讲道理。这恰恰是程序员们最习惯,也最喜欢的一种交流方式。这当然也是因为满足了真实的需求。甚至我们可以说,Github创造了真实的需求。
随后的事情是顺理成章的,程序员们泡在Github上,自然想在Github上做所有的事情,这不必再过多分析了。