如何才能運(yùn)作好一個(gè)開源項(xiàng)目?
將一個(gè)項(xiàng)目的代碼開源出來很容易,但是將它長(zhǎng)久維護(hù)下去,并吸引更多人參與,這就比較難了。開發(fā)者Jim Cowart結(jié)合自身的開源項(xiàng)目維護(hù)經(jīng)驗(yàn),給出了本文這些建議,希望能為你的開源之路帶來一些幫助。

1. 堅(jiān)持遵循Wheaton法則
Wheaton法則的中心思想是“Don’t be a dick”,意思是不要成為一個(gè)不顧別人感受的人。在這里,我想說的是,你要耐心對(duì)待你的開源項(xiàng)目的用戶。
我以前是一個(gè)音樂家,但是后來開始喜歡編寫軟件。我常常認(rèn)為我的知識(shí)和同事相比就如同瑞士奶酪(千瘡百孔),但是很快我發(fā)現(xiàn),每個(gè)人與其他人相比在某些方面都存在一些優(yōu)勢(shì)和差距。因此,對(duì)于那些在某些知識(shí)領(lǐng)域不如你的人,要有耐心。
每個(gè)開源項(xiàng)目,無論大小,都會(huì)產(chǎn)生一個(gè)與它相關(guān)的文化。當(dāng)你創(chuàng)造了這樣一個(gè)文化,也意味著你已經(jīng)創(chuàng)造了一個(gè)空間,供各知識(shí)水平的人來交流學(xué)習(xí)。要知道,能夠成為其他人學(xué)習(xí)新事物路上的一個(gè)向?qū)?,將是一種榮譽(yù)。
2. 選擇一個(gè)開源許可證
我選擇的許可證是MIT。如果必要的話,你可以使用雙許可證。你可以參考http://choosealicense.com/網(wǎng)站,或者閱讀opensource.org中具體的許可證規(guī)范。
3. 不要急于發(fā)布1.0版本
你需要一些空間來對(duì)項(xiàng)目進(jìn)行迭代、改進(jìn)、重構(gòu)和更改。
如果有人使用了你的v0.2.3版本,那么說明他們認(rèn)為你的項(xiàng)目中存在的風(fēng)險(xiǎn)是可以接受的,即使項(xiàng)目還在起步階段。你可以在README或者其他文件中提醒用戶該項(xiàng)目還處于實(shí)驗(yàn)階段,并可能隨時(shí)會(huì)更改。
雖然我們都知道標(biāo)上“1.0”標(biāo)簽在某些時(shí)候并不意味著完全可用于生產(chǎn)環(huán)境,但是大部分開發(fā)者都會(huì)有這種感覺。因此,不要急于將項(xiàng)目標(biāo)記為1.0狀態(tài),這將有助于項(xiàng)目后續(xù)的改進(jìn)。
4. 不要害怕重建API(但要負(fù)責(zé)任地做)
在早期維護(hù)postal.js這個(gè)項(xiàng)目時(shí),我犯了一個(gè)大的錯(cuò)誤——沒有以我希望的方式重建API,現(xiàn)在回想起來,這樣做似乎使得項(xiàng)目開發(fā)工作滯后了幾個(gè)版本。
但我最終更改了API,我覺得這個(gè)項(xiàng)目有了新的生命,按我的想法進(jìn)行擴(kuò)展變得更加容易。
5. 不要害怕說“不”、“請(qǐng)?zhí)峤粶y(cè)試”,“請(qǐng)修復(fù){X}”等
有時(shí)你會(huì)收到一個(gè)有可怕想法的pull請(qǐng)求。但有時(shí)它也可能是一個(gè)偉大的想法,但不應(yīng)該屬于代碼基本功能(也許應(yīng)該作為一個(gè)插件)。
有時(shí)你會(huì)得到一個(gè)沒有經(jīng)過測(cè)試的pull請(qǐng)求。這些情況下,你需要以某種方式說“不”。當(dāng)你這樣做的時(shí)候,請(qǐng)參照第1條,應(yīng)該禮貌地說明你的理由,而不應(yīng)該只有一個(gè)“不”字。
如果你因?yàn)樗麄儧]有進(jìn)行測(cè)試而說“不”,那么你***也應(yīng)該先對(duì)自己的代碼進(jìn)行測(cè)試。此外,如果你有一個(gè)特定的代碼風(fēng)格(制表符、空格等),請(qǐng)?jiān)谀愕腞EADME中說明。
6. 明智地選擇合作伙伴
如果你的項(xiàng)目已經(jīng)增長(zhǎng)到需要合作伙伴的地步,那么可以考慮讓其他開發(fā)者來作為項(xiàng)目共同所有者或維護(hù)者。前提是,你要明智地選擇這些人。
要知道,沒有人的想法會(huì)和你完全一樣(這是很好的事情),但是你要確保你們的想法大部分能夠重疊,以便項(xiàng)目能夠朝著一個(gè)方向發(fā)展。無論一個(gè)人有多么博學(xué)或受歡迎,如果他是一個(gè)dick(見第1條),那么就不能讓他成為項(xiàng)目所有者。如果在開源項(xiàng)目中出現(xiàn)派別爭(zhēng)斗,那么項(xiàng)目離結(jié)束就不遠(yuǎn)了。
一些好的做法是,給予貢獻(xiàn)者和所有者不同的權(quán)限。如果一個(gè)初級(jí)開發(fā)者想?yún)⑴c修復(fù)問題,不要給他所有者的權(quán)限。
7. 不要吝嗇贊美和鼓勵(lì),給予貢獻(xiàn)者應(yīng)得的榮譽(yù)
作為一個(gè)開源項(xiàng)目所有者,如果有人為你的項(xiàng)目貢獻(xiàn)了一條非常好的建議,一定要在公開場(chǎng)合經(jīng)常表揚(yáng)他。這樣可以鼓勵(lì)更多的人貢獻(xiàn)更多的想法或代碼。
我現(xiàn)在和一些人一起工作,如果他不能給我一些應(yīng)得的榮譽(yù)的話,我想我在大多數(shù)事情上會(huì)對(duì)他產(chǎn)生不信任——不只是在開發(fā)工作上。
8. 不要害怕放棄
我之前開發(fā)過幾個(gè)項(xiàng)目,當(dāng)時(shí)我認(rèn)為這些項(xiàng)目的想法很偉大,但是現(xiàn)在我已經(jīng)放棄了這些項(xiàng)目。如果還有人發(fā)現(xiàn)你的項(xiàng)目有用并正在使用它們時(shí),你很難放棄。但如果你因?yàn)閷W(xué)到了一些更好的方法,使得你放棄這個(gè)項(xiàng)目,你需要解釋一下原因,有可能這會(huì)促成一個(gè)新的開源項(xiàng)目,并可以更好地幫助這些用戶解決問題。如果你因?yàn)闆]有時(shí)間而放棄,你可以問問其他人是否愿意接管這個(gè)項(xiàng)目。
如果你放棄了一個(gè)有人在使用的項(xiàng)目,用戶可能會(huì)沮喪。不幸的是,這就是現(xiàn)實(shí)。你要從長(zhǎng)遠(yuǎn)來看。比如,我之前寫了很多工具,但現(xiàn)在看來,這些工具充斥著各種糟糕的代碼,似乎放棄這些是一個(gè)明智的決定。
總結(jié)
開源是美麗而危險(xiǎn)的。美麗是因?yàn)榭梢宰尯芏嗳藶榱艘粋€(gè)目標(biāo)而努力,危險(xiǎn)是因?yàn)槟阈枰谐种院?、樂于分享的精神?nbsp;
現(xiàn)在的一些光輝奪目的開源項(xiàng)目并不能代表所有,每天都會(huì)有大量的開源項(xiàng)目被創(chuàng)造,也有大量的開源項(xiàng)目死亡。你會(huì)發(fā)現(xiàn)一些對(duì)你有很大幫助的項(xiàng)目有可能在不久的將來會(huì)消失,除非該項(xiàng)目獲得了足夠多的貢獻(xiàn)。這就是為什么持之以恒的精神和創(chuàng)造力對(duì)于一個(gè)開發(fā)者和開源項(xiàng)目來說比其他方面更重要。