如何發(fā)起并運(yùn)營(yíng)一個(gè)開(kāi)源項(xiàng)目
1. 前言
今天分享一下如何發(fā)起并運(yùn)營(yíng)一個(gè)開(kāi)源項(xiàng)目。平時(shí)我們開(kāi)發(fā)用到的輪子大多都是開(kāi)源的,可以說(shuō)開(kāi)源項(xiàng)目推動(dòng)了IT行業(yè)的的發(fā)展,而這兩年是開(kāi)源項(xiàng)目的爆發(fā)期。對(duì)于個(gè)人來(lái)說(shuō),開(kāi)源項(xiàng)目也是開(kāi)發(fā)者成長(zhǎng)提升的途徑之一。今天就來(lái)分享一下如何孵化并運(yùn)營(yíng)一個(gè)開(kāi)源項(xiàng)目。
2. 立項(xiàng)
凡是項(xiàng)目都需要?jiǎng)?chuàng)意,或者我們稱之為“點(diǎn)子”,來(lái)源有多個(gè)方面。
很多開(kāi)源項(xiàng)目包括編程語(yǔ)言都誕生于解決特定問(wèn)題的過(guò)程中,比如Java誕生于智能硬件平臺(tái)的研發(fā)過(guò)程中。所以你日常遇到的一些問(wèn)題和你對(duì)這些問(wèn)題的解決方案可以成為你創(chuàng)建開(kāi)源項(xiàng)目的一個(gè)思路。這種情況下需要更多的創(chuàng)造性,同時(shí)還要規(guī)避一些法律風(fēng)險(xiǎn)。
你也可以對(duì)其它一些開(kāi)源項(xiàng)目進(jìn)行擴(kuò)展和優(yōu)化,有時(shí)候我們可以站在巨人的肩膀上。就像開(kāi)源Git托管平臺(tái)Gitea誕生于Gogs。
更簡(jiǎn)單的方式是你甚至可以整合腳手架,目前在Github上的整合腳手架非常多,甚至有些項(xiàng)目知名度還非常高。
當(dāng)你有這個(gè)契機(jī)你就有孵化開(kāi)源項(xiàng)目的先決條件了。
3. 開(kāi)發(fā)
接下來(lái)就是開(kāi)發(fā)了,最開(kāi)始只有你自己貢獻(xiàn)全部的代碼,而且你可能需要做得更多。開(kāi)發(fā)盡量遵循Git工作流,ISSUE功能要充分利用起來(lái),用戶的咨詢建議和BUG反饋盡量通過(guò)ISSUE來(lái)處理。
通過(guò)吸收 Pull Request 也可以集思廣益,提升你項(xiàng)目的質(zhì)量。Gitee和Github還提供了一些漏洞檢測(cè)和質(zhì)量檢測(cè)功能。也能提高你的開(kāi)發(fā)質(zhì)量。
3.1 測(cè)試
作為開(kāi)源項(xiàng)目,一定要把好質(zhì)量關(guān)。起碼的單元測(cè)試要做,這樣其它開(kāi)發(fā)者會(huì)更加信任你的項(xiàng)目。
3.2 開(kāi)源協(xié)議
開(kāi)源協(xié)議是開(kāi)源項(xiàng)目的重要標(biāo)識(shí),這個(gè)是必須的步驟。目前開(kāi)源協(xié)議有很多,選擇一款適合你的,一般情況下我選擇 Apache 2.0 。
協(xié)議除了放一個(gè) LICENSE 文件在項(xiàng)目的目錄中外,最好在每一個(gè)源代碼文件的 copyright 頭中也聲明一下,比如胖哥的開(kāi)源項(xiàng)目 Payment Spring Boot 中是這樣的:
3.3 其它配套設(shè)施
作為一個(gè)開(kāi)源項(xiàng)目,項(xiàng)目說(shuō)明 README.md 要有,用來(lái)對(duì)項(xiàng)目進(jìn)行簡(jiǎn)單的介紹。因?yàn)槭窃创a開(kāi)放,代碼注釋也非常重要,也有利于向別人講解你的思路和意圖。如果有精力構(gòu)建一個(gè)項(xiàng)目主頁(yè)就可以讓你的項(xiàng)目更加高大上了,把文檔、圖文教程、CHANGELOG、Q&A、RoadMap分門別類放進(jìn)去,也有利于用戶更加深入的了解學(xué)習(xí)你的開(kāi)源項(xiàng)目。你可以看胖哥以往的相關(guān)文章有介紹的哦。
4. 發(fā)布
如果覺(jué)得你的項(xiàng)目已經(jīng)達(dá)到可用的程度就可以公開(kāi)發(fā)布了。源代碼國(guó)外肯定是放在Github上,國(guó)內(nèi)選擇Gitee(碼云)。根據(jù)你的喜好選擇一個(gè)主庫(kù),兩者定期同步。另外要明確開(kāi)發(fā)分支和正式分支,最好默認(rèn)顯示最近的正式版本分支。
大致的發(fā)版步驟
版本一經(jīng)發(fā)布不能進(jìn)行更改,版本號(hào)建議語(yǔ)義化,參考下圖中Gitee的語(yǔ)義化說(shuō)明。
Github和Gitee都提供了創(chuàng)建發(fā)行版的功能,以Gitee為例(Github同樣有類似的功能):
創(chuàng)建完畢后,你的項(xiàng)目就會(huì)生成一個(gè)發(fā)行版,用戶可以通過(guò)對(duì)應(yīng)版本的發(fā)行版獲取對(duì)應(yīng)版本的源代碼,查看描述。
在進(jìn)行源代碼發(fā)行的同時(shí),也建議部署對(duì)應(yīng)的編譯版本到公用依賴庫(kù),比如Java項(xiàng)目會(huì)發(fā)布的Maven中央倉(cāng)庫(kù),JavaScript項(xiàng)目會(huì)發(fā)布到NPM,Python項(xiàng)目PyPi。如果你有能力使用CI/CD的話(例如Github Action),可以讓整個(gè)發(fā)版流水線化。
記得發(fā)版的同時(shí),要發(fā)布對(duì)應(yīng)版本的更新信息、文檔等配套設(shè)施。
5. 推廣
只要是產(chǎn)品就需要推廣。推廣是一個(gè)技術(shù)活,而這往往不是技術(shù)人員的強(qiáng)項(xiàng)。你可以在目標(biāo)人群的聚集地友好地宣講你的開(kāi)源項(xiàng)目,例如一些開(kāi)發(fā)者社區(qū)(開(kāi)源中國(guó)),交流群等等,甚至是這幾年比較火的短視頻。每次發(fā)版可通過(guò)一些公共渠道進(jìn)行公告。讓你的開(kāi)源項(xiàng)目盡可能為人所知。但是請(qǐng)不要作弊,不要學(xué)某些人走捷徑,花錢去購(gòu)買Star。
在推廣的過(guò)程中,要學(xué)會(huì)收集和分析用戶的意見(jiàn)。
6. 社區(qū)驅(qū)動(dòng)
推廣的同時(shí)要進(jìn)行社區(qū)建設(shè),有利于拉升你開(kāi)源項(xiàng)目的活躍度,同時(shí)也可以從中提煉項(xiàng)目的需求。甚至可以將社區(qū)活躍者提升為項(xiàng)目貢獻(xiàn)者,組建一個(gè)開(kāi)源小團(tuán)隊(duì)。
社區(qū)驅(qū)動(dòng)是開(kāi)源項(xiàng)目發(fā)展的重要?jiǎng)恿Α?/p>
7. 總結(jié)
如果你想做好開(kāi)源,就要把開(kāi)源項(xiàng)目當(dāng)做產(chǎn)品來(lái)做,堅(jiān)持、創(chuàng)新、協(xié)作、運(yùn)營(yíng)、服務(wù)一個(gè)都不能少。個(gè)人也會(huì)在項(xiàng)目的打磨中成長(zhǎng)提升。對(duì)于開(kāi)源更重要的是一種態(tài)度。無(wú)論項(xiàng)目涉及的技術(shù)是否高深,開(kāi)源者都應(yīng)該得到鼓勵(lì)和尊重。