想改進一個開源項目,是直接用它的代碼比較好,還是fork 之後給它貢獻代碼比較好?

最近由於項目需要用了一個開源庫,但這個庫有很多功能缺失,我想給它補上。不知道是自己新建一個項目直接用它的代碼比較好,還是fork 之後給它貢獻代碼比較好?

我怕自己開一個項目不太道德,但又擔心fork 別人的代碼會受制於人。

這個庫每隔幾個月都在維護,不過都是修修bug,很久沒有添加功能了。


當然是fork完push回去,不然開源意義何在。


題主描述這個問題的方式,展示了中國現在軟體工程師一個非常常見的問題,開發思維已經非常落後了。

過去我們描述軟體,都用功能來描述,因為過去沒有開源的概念,所以分支很少,我們習慣了說一個軟體的某某特性,這時,通常指的就是主分支,所以這樣說話是沒有問題的。而現代的軟體開發,即使不開源,都不得不引入了大量的,非開發形態的,分支的概念,這時我們談特性,都要談具體是什麼分支的。

現在回到題主的問題,題主問「想改進一個開源項目」,這句話把自己說的太高大上了,你明明是要用一個開源項目的代碼,並對這個代碼有修改訴求(這是常態),你很難說有動力去「幫助別人修改代碼」的(但看著吧,我認為你可能後面會有動力的)

理解清楚這個模型,題主的問題就很簡單了:

首先,你要fork一個項目,只要這個項目的版權允許,你是否push回去,和道德無關。Android fork了別人一堆的項目,大部分不回傳,也沒有什麼社區的人說它「不道德」,代碼開源就是為了讓你fork的,不是像中國的「中二工程師」們認為的那樣那樣,以為開源一個項目是為了讓你創造美麗新世界的。

第二,fork別人的代碼是會受制於人的,但這種制約,很可能不是題主想的那些制約,這些制約包括:版權控制,比如GPL代碼要求和它構成共同作品的其他作品必須是GPL協議的,這就控制你的版權設計; 專利控制,部分開源代碼中有專利,你使用別人的專利,別人就有可能在你的作品中種入專利; 其他比較小的控制你自己想,你有構架設計的概念,自然能想到這些問題,否則說也是白說

第三,很多時候我們fork一個項目,是有push back的動力的,這個動力是你懶得維護那麼多的變更,如你所述,原始的分支每個月都有幾個bugfixing,你自己拉一個分支,bugfixing的合入就都是你的工作,你的工作量是增加的。對於你說的項目可能還好,對於Linux Kernel這樣的項目,backporting是個極為困難的工作。以Google這樣的土豪,都只能反覆rebase自己的版本,就更不要說一般的小公司了。


推不推是個人問題


fork 把你代碼提交上去 怎麼會有受制於人哪,開源的意義就在於多人協作完善


fork別人的代碼 也不怎麼會受制於人吧~


推薦閱讀:

專訪ECharts團隊:無KPI驅動如何做出成功開源項目
如何編寫開源項目的 README 文檔
產品經理們如何看 GitHub 這款(類)產品?
沒有什麼是 Peeqo 機器人一個表情包不能解決的,如果有,那就兩個
Linux 25 年內核開發的 9 個經驗教訓

TAG:開源 | 開源項目 | GitHub |