近年來(lái),越來(lái)越多的開(kāi)發(fā)者選擇將自己的產(chǎn)品以開(kāi)源形式發(fā)布,有時(shí)的結(jié)果是——你滿懷誠(chéng)意地開(kāi)源,卻無(wú)人問(wèn)津。盡管你的產(chǎn)品做得相當(dāng)好,但是僅把產(chǎn)品的源代碼公布出來(lái),這還不算開(kāi)源,因?yàn)槠渌脩艨赡軣o(wú)從下手。沒(méi)有用戶,久而久之,你的滿腔熱情就會(huì)熄滅。?
那么如何才能讓開(kāi)源項(xiàng)目為更多人所知,成為一個(gè)真正牛X的開(kāi)源項(xiàng)目呢?除了項(xiàng)目自身優(yōu)秀外,你還需要注意以下事項(xiàng)。?
一、有一個(gè)真正有用的README?
即使你為你的開(kāi)源項(xiàng)目制作了一個(gè)很好的網(wǎng)站,但是一些潛在用戶很可能會(huì)首先通過(guò)閱讀README文件來(lái)了解這個(gè)項(xiàng)目。因此,你要確保在README中提供盡可能全面的信息:?
1.? 依賴(lài)、安裝信息?
盡可能寫(xiě)清楚依賴(lài)、安裝信息,最好能夠讓用戶通過(guò)復(fù)制粘貼相關(guān)代碼來(lái)添加依賴(lài)。比如這樣。?
2. 項(xiàng)目成熟度狀態(tài)?
不至于讓用戶在生產(chǎn)環(huán)境中用了幾個(gè)月后才發(fā)現(xiàn)你的項(xiàng)目才處于Alpha階段。?
3.? 詳細(xì)說(shuō)明項(xiàng)目支持的語(yǔ)言、運(yùn)行環(huán)境和工具的版本?
不至于讓用戶花費(fèi)大量的時(shí)間去摸索你的項(xiàng)目的兼容性。?
4.? 明確所使用的許可證?
這個(gè)許可證需要是流行的、用戶都知道的,如果你自己創(chuàng)造一個(gè)或使用一個(gè)陌生的(比如WTFPL),那么沒(méi)有用戶敢于在自己的產(chǎn)品中使用你的開(kāi)源項(xiàng)目的。你可以選擇比較友好的?Apache Public License 2.0或Eclipse Public License等。需要注意的是一些許可證(比如MIT)也是比較流行的,但是沒(méi)有提供任何專(zhuān)利保護(hù)。你也可以采用APL2/GPLv2雙許可,讓用戶挑選適合他們的。?
二、為你的項(xiàng)目寫(xiě)一個(gè)文檔?
寫(xiě)文檔并不容易,且比較費(fèi)時(shí),但是對(duì)于用戶來(lái)說(shuō),文檔是了解一個(gè)項(xiàng)目最便捷、最省時(shí)的方式,還可以讓用戶相信你不會(huì)輕易放棄這個(gè)項(xiàng)目。?
在文檔中,把你的項(xiàng)目可以幫助用戶完成的事情放在首位,這是用戶決定是否使用這個(gè)項(xiàng)目的關(guān)鍵。此外,你要讓用戶相信做這個(gè)項(xiàng)目的是個(gè)人,而不是一個(gè)會(huì)產(chǎn)生代碼的機(jī)器人。?
關(guān)于開(kāi)源項(xiàng)目文檔,建議你閱讀:開(kāi)源項(xiàng)目文檔應(yīng)規(guī)避的13處“硬傷”?
三、項(xiàng)目可以很容易地升級(jí)?
隨著項(xiàng)目中bug的修復(fù)和一些功能的改進(jìn),你需要發(fā)布另一個(gè)版本。需要注意的是:?
1.? 向后兼容?
不要因?yàn)椴幌蚝蠹嫒荩層脩糁貙?xiě)大量代碼。這樣會(huì)讓用戶憤怒,繼而拋棄你的項(xiàng)目。當(dāng)然,你也不必像OpenJDK那樣兼容15年前的產(chǎn)品。?
2.? 更新日志?
有一個(gè)清晰明確的更新日志,需要包含:該版本發(fā)生了什么變化?會(huì)破壞用戶現(xiàn)有項(xiàng)目的代碼嗎?等等。比如Twitter的做法:?
?
- 每修復(fù)一個(gè)bug,就在更新日志中寫(xiě)上一個(gè)簡(jiǎn)短的條目
- 每添加一個(gè)功能,就簡(jiǎn)要描述一下并附上一些示例代碼
- 每改變一個(gè)API,就需要在日志中用粗體明確指出
如果你有多個(gè)分支,就需要為每個(gè)分支都寫(xiě)一份更新日志。?
3.? 版本標(biāo)簽?
為你的項(xiàng)目的每一個(gè)版本打上一個(gè)標(biāo)簽,比如v1.0.0-alpha1、v1.0.0、v1.1.2,可以讓你的用戶很清晰地分辨出項(xiàng)目的版本。?
4.? 發(fā)布公告?
項(xiàng)目發(fā)布后,接下來(lái)就需要為這個(gè)事件寫(xiě)一篇博文,或直接將公告發(fā)布到項(xiàng)目的郵件列表中。?
在公告中需要說(shuō)明這個(gè)項(xiàng)目有什么用,是否向后兼容,并給出更新日志的鏈接。?
5.? 項(xiàng)目狀態(tài)標(biāo)簽?
有些項(xiàng)目很長(zhǎng)時(shí)間一直使用相同的版本號(hào),比如1.1.0,而項(xiàng)目一直在改進(jìn)。如果這是一個(gè)開(kāi)發(fā)版本,你也需要通過(guò)標(biāo)簽來(lái)說(shuō)明項(xiàng)目所處的開(kāi)發(fā)階段。比如:?
?
- 1.1.0.pre1
- 1.1.0-alpha1
- 1.1.0-SNAPSHOT
總之,你要確保項(xiàng)目有一個(gè)嚴(yán)格的版本命名規(guī)劃。?
四、使用GitHub?
在GitHub上,你可以很容易地做下面的事情:?
?
- 發(fā)布你的項(xiàng)目
- 瀏覽和搜索代碼
- 專(zhuān)注于項(xiàng)目issues
- 參與貢獻(xiàn),合并用戶的貢獻(xiàn)
五、確保有一個(gè)為用戶提供支持的地方?
如果你的項(xiàng)目達(dá)到一定的普及程度,你就會(huì)不斷收到用戶的提問(wèn)。你需要有一個(gè)收集和回答用戶提問(wèn)的地方,比如論壇、郵件列表等。只要有一個(gè)交流的地方,用戶也可以彼此提供幫助。久而久之,就會(huì)形成一個(gè)很不錯(cuò)的社區(qū)。?
六、項(xiàng)目傳遞?
不排除這種情況——你可能會(huì)對(duì)項(xiàng)目維護(hù)失去興趣,或者你換了一個(gè)新工作不再使用當(dāng)前的項(xiàng)目了。你可以在郵件列表上公布,讓其他開(kāi)發(fā)者接管你的項(xiàng)目。在Github上項(xiàng)目所有權(quán)轉(zhuǎn)移會(huì)更容易,尤其是在別人為你的項(xiàng)目引入了新功能后。?
無(wú)論如何,不要讓項(xiàng)目死掉。?
七、總結(jié)?
總之,在你打算發(fā)布開(kāi)源產(chǎn)品時(shí),請(qǐng)確保它有:?
?
- 清晰的依賴(lài)/安裝說(shuō)明
- 至少有一個(gè)簡(jiǎn)短的文檔/指南
- 庫(kù)中包含更改日志和相關(guān)標(biāo)簽
- 一些關(guān)于支持語(yǔ)言、運(yùn)行環(huán)境、工具版本、項(xiàng)目成熟度的信息
- 郵件列表,供用戶提問(wèn)、相互幫助
八、最后?
總之,要想讓你的開(kāi)源項(xiàng)目“發(fā)揚(yáng)光大”,首先應(yīng)該讓它對(duì)用戶更友好。除了項(xiàng)目文檔外,其他事情花費(fèi)不了多長(zhǎng)時(shí)間。?
另外,將項(xiàng)目開(kāi)源出來(lái)容易,長(zhǎng)時(shí)間維護(hù)就難了,因此,你還需要具備堅(jiān)毅的精神和打持久戰(zhàn)的準(zhǔn)備。當(dāng)然,如果你只希望將項(xiàng)目開(kāi)源出來(lái),而不指望它能夠發(fā)展得多好,那么你完全可以忽略以上的所有內(nèi)容。?
英文原文:
How to Make Your Open Source Project Really Awesome
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
