開源已經(jīng)是一場(chǎng)革命盹憎,但是在開源的發(fā)展歷史上敦姻,其實(shí)依然在不斷的發(fā)展瘾境,甚至革命歧杏。簡(jiǎn)單的回顧一下:
最早的開源镰惦,僅僅是把自己的源代碼放出來(lái),或者讓別人用磁帶Copy帶走犬绒,或者放在Server上供人下載旺入。
再后來(lái),關(guān)于這個(gè)項(xiàng)目的代碼與功能凯力,就浮現(xiàn)出來(lái)了兩個(gè)問題:代碼大家都能改茵瘾,如何整理與匯總各自的工作成果?功能大家都有想法咐鹤,最后應(yīng)該做成什么樣拗秘?
于是,源代碼版本管理工具與各種在線討論的方式祈惶,開始了一輪又一輪的演進(jìn)雕旨。具體的項(xiàng)目就不再一一列舉,但是其中最大的一次創(chuàng)新捧请,就是從集中式版本管理凡涩,走向了分布式版本管理。如果說(shuō)Github有自己的哲學(xué)疹蛉,他的來(lái)源活箕,首先是分布式開發(fā)的理念。
分布式開發(fā)與分布式版本管理:沒有一個(gè)核心的版本庫(kù)可款,意味著沒有任何一個(gè)人育韩、任何一個(gè)組織是核心克蚂,每個(gè)人都可以在自己的機(jī)器上,保留全部的版本樹筋讨,并且不斷發(fā)展自己的版本陨舱。一個(gè)人的代碼,可以貢獻(xiàn)給A版仔,也可以貢獻(xiàn)給B游盲,一切自由。
隨著Linux開發(fā)的哲學(xué)蛮粮,被逐步的傳播開來(lái)益缎,才有了Github的出現(xiàn),最初的Github然想,最大的貢獻(xiàn)莺奔,是將這種無(wú)中心,多分支的開發(fā)模式变泄,Web化令哟、常態(tài)化了。一鍵就能夠fork自己的分支妨蛹,然后可以跟原有的分支毫無(wú)關(guān)聯(lián)屏富,也可以非常方便的提交pull request,這就帶來(lái)了更加頻繁的分裂蛙卤,使得分裂常態(tài)化了狠半。
原來(lái)的開源社區(qū),我改了代碼颤难,希望能夠貢獻(xiàn)給社區(qū)神年,需要穿越種種障礙,如果社區(qū)不接受行嗤,最后我只能逼不得已已日,自己開一個(gè)新的分支,變成一個(gè)新的項(xiàng)目栅屏。在分裂是異常的狀態(tài)下飘千,分裂是罪惡的,是不應(yīng)該的既琴,是會(huì)帶來(lái)陣痛的占婉。當(dāng)分裂變得常態(tài)化,pull request也變得常態(tài)化甫恩,分分合合逆济,以每天N次的速度發(fā)生,恰恰因?yàn)槿绱耍辉偈且环N罪惡奖慌,而是一種健康的抛虫、向上的、以更快速度進(jìn)步的模式简僧。大家不再是在一個(gè)版本下建椰,各自貢獻(xiàn),而是在各自的版本下岛马,獨(dú)立發(fā)展棉姐,想分就分蛇尚,想合就合蛇捌。
這背后折射出的哲學(xué),可以這樣總結(jié):如果將分裂視為罪惡尽纽,而力圖用各種方法去阻止夏志,總會(huì)碰到各種各樣的新的困難乃坤。如果反其道而行之,通過(guò)技術(shù)手段盡可能的方便分裂與合并沟蔑,這反而是滿足了真正的需求湿诊。(阻止分裂,其實(shí)是在壓抑開發(fā)過(guò)程中存在的真實(shí)需求)所以:盡力滿足真實(shí)的需求瘦材,才有可能獲得成功厅须。
隨著這樣的模式,變得常態(tài)化宇色,然后Github才被稱為一個(gè)社區(qū)九杂,fork/pull request颁湖,也從一種開發(fā)行為宣蠕,變成了一種社交行為。于是甥捺,程序員們發(fā)現(xiàn)抢蚀,最好的交流,正是通過(guò)源代碼來(lái)交流镰禾,一切的講道理皿曲,都不如用源代碼來(lái)講道理。這恰恰是程序員們最習(xí)慣吴侦,也最喜歡的一種交流方式屋休。這當(dāng)然也是因?yàn)闈M足了真實(shí)的需求。甚至我們可以說(shuō)备韧,Github創(chuàng)造了真實(shí)的需求劫樟。
隨后的事情,是順理成章的,程序員們泡在Github上叠艳,自然想在Github上做所有的事情奶陈,這卻不必再過(guò)多分析了。