我想把自己寫的程序開源,需要對源碼做哪些處理?
我不是想問使用github和選擇開源協議這方面的問題,而是想問我需要對目前的代碼做哪些修改和整理工作。
我的理解,開源並不僅僅是把代碼上傳到公共空間這麼簡單,還需要有詳細的文檔說明等等。我沒有這方面的經驗,不了解相關的流程,希望有做過開源項目的朋友幫忙解答。比如,是不是需要在每個源文件里寫清作者信息和開源協議信息,是不是要把程序用到的其他庫的版權信息列出,如果要列出,應該寫在什麼地方之類的。感謝您的幫助!
呃。。。
提問者說了不問github、開源協議方面的問題。。我也沒打算回這方面的東西
我說幾點一定要注意、就算是很多「大牛」也做得很不好的地方(一、二)吧。。。
一、成品- 一定要能一鍵構建
- 如果做不到1,請一定寫清楚構建步驟,詳細的命令,需要提前安裝的庫(和安裝方法)
- 如果跨平台,一定要在支持的平台測試一下再聲稱可以一鍵構建
- 一定要配demo,demo一定要簡單直接
- 務必對主要介面進行文檔描述,md即可,plain text亦可。內容為用法和注意事項
- 附錄給了一個宇宙終極渣開源項目的例子
- 盡量(盡你所能)乾淨一點,做好縮進等格式化
- 如果代碼很臟,最好能重構二一
- 介面要統一、正交
- 如果可以,請配上gif / apng效果圖
- 確保沒有違反使用的第三方庫協議(這個自己翻翻別人的協議怎麼說的就好了)
- 如果不是特別喜歡刷存在感,減少或刪除貼在文件頭上的大段廢話
四、總結
- 原則就是要讓用戶爽,越爽越好。不能讓用戶煩心,不能讓用戶用不來
- 文檔你按這個格式寫,用戶就會很開心了
- 請贊
def buildConnectionString(params):
"""Build a connection string from a dictionary of parameters.
Returns string."""
return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
if __name__ == "__main__":
myParams = {"server":"mpilgrim",
"database":"master",
"uid":"sa",
"pwd":"secret"
}
print buildConnectionString(myParams)
首先你要選擇你準備採用的發布協議。例如 gpl 啊 bsd 啊 apache 啊 mit 啊等等。
然後,你可以參考該協議中給你的建議。
一般而言協議中會建議你在每個源文件頭都加上版權信息,這個信息對於每個不同的協議不同。你可以打開一個對應協議的開源項目,查看裡面的代碼頭,一般這個頭是協議的簡化版。
把每個文件都加上版權信息,然後在你的項目的主目錄中存放你使用的協議的「完整全文」,這個文件一般可以取名為 COPYING ,當然你也可以取名為用戶可以理解的任何名字。
源代碼倉庫中包含版權協議的完整全文,並且每個源代碼頭都包含版權聲明簡化版。然後這個代碼要「發布」出去(發布的方式與場所你可以任意選擇)。這就滿足了開源的基本要素。就開源本身來說,以某個開源的協議發布,就算作開源。
至於其他的事情都是「可選」的,你做了更多,可以更好的宣傳你的項目,但並不是強制的。一般慣例:1. 代碼頭部通過注釋的方式添加授權協議,網站,版權信息等簡要信息。比如我們的代碼頭:2. 代碼根目錄增加一個README文檔,提供軟體的基本介紹。3. 代碼建立一個doc目錄,相關協議文件,幫助等可以放在doc目錄下面。4. 如果有國外用戶的話,盡量用英文寫注釋。
5. 目錄命名可以盡量遵循慣例,比如Linux下面常用bin, lib, doc, 這樣的目錄。
其他的我覺得就是代碼的格式啊,注釋啊可能要整理下,方便第三方的用戶閱讀理解。我們的代碼實例:https://github.com/easysoft/zentaopms在README中寫明API,不一定要全部寫出來,把常用的,已經確保穩定的寫出來就好了,對於不穩定的API,自己心裡有點B數就好,先保留著,等維護穩定了再發布。
其次,Quick Start,README中附帶一些demo,即範例代碼,讓開發者對用法一目了然。然後,構建以及測試的方法,比如構建環境,配置,命令等。最後,如果項目還在迭代中,且有不穩定的地點,把這些坑註明一下吧。嘗試一件新事物的時候,不要搞得太複雜,否則連動手的勇氣的都沒有了,建議你把代碼里不能公開的信息去掉,然後發布到github或者bitbucket上,按照網站的提示上傳代碼基本就OK了,Readme.md可以先寫一個簡單的,日後再完善,至於License什麼之類的等你明白了是幹什麼的再加也不遲,總之先把第一步邁出去。
竟然沒人提到單元測試?!如果你的項目足夠火,那會有好多Pull Request,到時候你都Pull進來,最後發現程序崩潰了。所以啊,你得有一些能迅速發現問題的單元測試,最起碼保證每個版本都是可以運行的,同時你也要要求Contributor的代碼能通過單元測試,並且要求他們在加入新Feature的時候用TDD。
確信別人可以通過幾個固定的步驟(而不是這裡改改那裡改改)
來編譯運行你的代碼
比如:* 按照INSTALL所說裝一堆包* ./autogen.sh* make* make test除了協議
其他的不需要,你可以直接開源,別人想不想fork就是另外一回事了
Github上多數項目貌似根目錄下方基本都有三個文件,學著他們做就好了吧..
- README:項目介紹
- LICENCE:項目版權協議
- CHANGELOG:各版本的更新記錄
- 對於依賴庫,如果項目使用Maven或者Ant等項目構建,通過上傳對應的的xml構建文件,到時候build一下就能自動獲取依賴庫了,否則建立一個lib目錄放需要用到的依賴庫,最後在readme裡面說一下就好.
- 一般庫項目我會在項目目錄下建一個bin目錄,然後放這個項目編譯好的庫,方便一些人直接使用.
- 把提交記錄寫清楚,每個功能一次提交.這樣能通過版本管理日誌知道項目的功能變化.
- 代碼注釋之類的一般在功能定型之後慢慢給每個文件加的吧,頻繁變動期間加了也沒意義.
記得把諸如資料庫密碼等內容刪除。。
添加版權,添加readme,添加工整的注釋
推薦閱讀:
※非大公司支持的開源或自由軟體感覺大部分都很死腦筋,為什麼不在用戶體驗上多花點心思呢?
※ShopEx 和 ECSHOP 的区别在哪?都是上海商派的产品,为啥一个开源一个非开源呢?
※假如 ISIS 開發了有價值的開源軟體並用於作惡,我們使用有道德問題嗎?
※Ubuntu上哪些地方做的比Windows好?
※有哪些霸氣側漏的開源軟體License?