開源,無禁止即可為
盡管我們經(jīng)常說代碼貢獻(xiàn)并不是唯一的開源貢獻(xiàn)方式,參與討論,Review RFC 也是參與開源的良好途徑。但是很多同學(xué)仍然會(huì)有疑慮:我不是項(xiàng)目的 Maintainer/Committer/Reviewer,我有資格 Review 別人的 PR 嗎?本文以我在?envd[1]?中的實(shí)踐來闡述這樣的觀點(diǎn):開源,無禁止即可為。
關(guān)于 envd
envd[2]?是?tensorchord[3]?發(fā)起的開源項(xiàng)目,旨在解決機(jī)器學(xué)習(xí)開發(fā)過程中環(huán)境難以部署的問題,主要團(tuán)隊(duì)成員包括?@gaocegege[4]
?,@terrytangyuan[5],@kemingy[6],@VoVAllen[7]?等。受?@gaocegege[8]?的邀請,我參加了?envd[9]?Open Source Preview:以非正式團(tuán)隊(duì)成員的身份加入 tensorchord ,提前看到 private 的代碼,模擬開源后的流程。這是一個(gè)非常有意思的實(shí)踐,RisingWave[10]?在開源之前也組織過類似的活動(dòng),以后有機(jī)會(huì)再跟大家分享。
開源,無禁止即可為
有不少同學(xué)提出這樣的問題:我想?yún)⑴c Databend 項(xiàng)目,是不是要先學(xué)一下 Rust/Database?實(shí)際上并非如此,Contributor 不必是資深開發(fā)者,資深開發(fā)者不是一個(gè)由外人授予的頭銜。我在之前的文章中也反復(fù)強(qiáng)調(diào):開源共同體本質(zhì)上都在奉行基于開源貢獻(xiàn)的精英主義原則資深開發(fā)者之所以資深,是因?yàn)樗麄冇辛俗銐虻呢暙I(xiàn);同理對于剛加入項(xiàng)目的貢獻(xiàn)者如果積累了同等的貢獻(xiàn),他們也能成為該項(xiàng)目的資深開發(fā)者。所以我們不必等待項(xiàng)目所有者的授權(quán)/批準(zhǔn)/許可來提交代碼或者 Review PR。在 envd 的項(xiàng)目中,我對機(jī)器學(xué)習(xí)一無所知,Golang 已經(jīng)好久沒寫了,Python 更是半吊子,但是這并不妨礙我參與項(xiàng)目特性的討論和做出其他的非代碼貢獻(xiàn)。
在?Add proposal for kubernetes support[11]?中,我向作者提出要求增加一個(gè)概念介紹的章節(jié),因?yàn)槲铱床欢?proposal。
在?fix: cannot assign requested address[12],我協(xié)助其他的貢獻(xiàn)者一起排查跟特定環(huán)境有關(guān)的問題
在?v0.1.0-alpha.8?[13]?中,我?guī)椭?xiàng)目的維護(hù)者解決了發(fā)版過程中遇到的問題
在?feat[14]: Refactor syntax?中,我從一個(gè)新用戶的角度出發(fā),為項(xiàng)目的配置語法格式提出了自己的建議
總的來說,項(xiàng)目的新貢獻(xiàn)者可以從以下角度參與貢獻(xiàn)并逐步了解項(xiàng)目
閱讀并參與 Proposal 的討論:新貢獻(xiàn)者可以從閱讀 Proposal 開始,提出自己看不懂的地方,要求作者予以補(bǔ)全或者進(jìn)行追加解釋。這其實(shí)也從側(cè)面呼應(yīng)了項(xiàng)目維護(hù) Proposal 的重要性:Proposal 是新貢獻(xiàn)者了解底層實(shí)現(xiàn)細(xì)節(jié)最好的途徑。
遷移復(fù)用自己的經(jīng)驗(yàn):新貢獻(xiàn)者往往在有過其他項(xiàng)目的參與經(jīng)驗(yàn),他們可以將這些已有的經(jīng)驗(yàn)和最佳實(shí)踐遷移復(fù)用到新的項(xiàng)目中來。比如說新貢獻(xiàn)者過去是 Python 的熟練使用者,那么他可以為項(xiàng)目與 Python 有關(guān)的模塊中提出自己的改進(jìn)。
避免已有知識(shí)的詛咒:新貢獻(xiàn)者對一個(gè)開源項(xiàng)目最直接的價(jià)值體現(xiàn)在他對這個(gè)項(xiàng)目一無所知。TiDB 社區(qū)有個(gè)著名的彥青測試[15]?就是邀請不懂項(xiàng)目,甚至不懂開發(fā)的運(yùn)營同學(xué)來提交 Issues 和 PR,以此來檢驗(yàn)自己項(xiàng)目的文檔和基礎(chǔ)設(shè)施是否健全。新貢獻(xiàn)者往往能夠發(fā)現(xiàn)很多特別基礎(chǔ)而容易忽略的問題,探索項(xiàng)目整體的易用性和使用感,進(jìn)而改進(jìn)整個(gè)項(xiàng)目的開發(fā)體驗(yàn)。
開源項(xiàng)目中也會(huì)存在著一些保留或者明確禁止的行為。比如說,涉及到人身攻擊,種族歧視等行為,社區(qū)的維護(hù)者需要行動(dòng)起來,根據(jù)已有的 Code of Conduct 規(guī)范采取相應(yīng)的行動(dòng)。當(dāng)維護(hù)者自己存在此類的行為時(shí),社區(qū)成員可以提出反對意見,或者選擇退出這個(gè)社區(qū)。有的開源項(xiàng)目會(huì)制定明確的貢獻(xiàn)規(guī)則,只接受某些特定的貢獻(xiàn)。比如?benbjohnson/litestream?[16]?出于簡化維護(hù)負(fù)擔(dān)的考慮,決定只接受文檔或者 bugfix 的貢獻(xiàn),不接受增加新的 feature。此時(shí)貢獻(xiàn)者也需要尊重項(xiàng)目維護(hù)者的意愿,避免為維護(hù)者帶來困擾。此外,發(fā)布 Release 和設(shè)定 Roadmap 等項(xiàng)目管理性質(zhì)的操作我們通常會(huì)交由項(xiàng)目的維護(hù)者來執(zhí)行,因?yàn)樗麄兺莆兆疃嗟男畔ⅲ瑢φ麄€(gè)項(xiàng)目有更多的了解,更能代表整個(gè)開源共同體的意愿。但是貢獻(xiàn)者仍然擁有著自由的評論和建議權(quán)利,在 Discussion 或者 Issues 中提出自己的看法。當(dāng)社區(qū)成員們對項(xiàng)目未來的發(fā)展有強(qiáng)烈沖突時(shí),可以選擇分支出一個(gè)獨(dú)立的項(xiàng)目來進(jìn)行為維護(hù)。這在歷史上發(fā)生過無數(shù)次,比如說 gogs 的部分成員不滿單一維護(hù)者的管理模式,決定分支出 gitea 來支持更加開發(fā)的,更快速的模式(后續(xù):gogs 目前也成立了獨(dú)立的 gogs 組織來維護(hù))。這與前面一直在強(qiáng)調(diào)的無禁止即可為是不沖突的。
總結(jié)
無禁止即可為感覺像是不言而喻的事實(shí),但是大家在實(shí)踐的過程中還是很容易陷入專有軟件協(xié)作模式的窠臼,沒有充分發(fā)揮開源項(xiàng)目的開發(fā)協(xié)作價(jià)值。希望大家能夠擺脫來自身份和職位的自我束縛,更積極主動(dòng)地加入到開源討論中去~
引用鏈接
[1]
?envd:?https://github.com/tensorchord/envd[2]
?envd:?https://github.com/tensorchord/envd[3]
?tensorchord:?https://github.com/tensorchord[4]
?@gaocegege:?https://github.com/gaocegege[5]
?@terrytangyuan:?https://github.com/terrytangyuan[6]
?@kemingy:?https://github.com/kemingy[7]
?@VoVAllen:?https://github.com/VoVAllen[8]
?@gaocegege:?https://github.com/gaocegege[9]
?envd:?https://github.com/tensorchord/envd[10]
?RisingWave:?https://github.com/singularity-data/risingwave[11]
?Add proposal for kubernetes support:?https://github.com/tensorchord/envd/pull/237[12]
?fix: cannot assign requested address:?https://github.com/tensorchord/envd/pull/386[13]
?v0.1.0-alpha.8:?https://github.com/tensorchord/envd/discussions/369#discussioncomment-2960851[14]
?feat: Refactor syntax:?https://github.com/tensorchord/envd/pull/238[15]
?彥青測試:?https://github.com/tikv/tikv/pull/11095[16]
?benbjohnson/litestream:?https://github.com/benbjohnson/litestream
關(guān)于 Databend
Databend 是一款開源、彈性、低成本,基于對象存儲(chǔ)也可以做實(shí)時(shí)分析的新式數(shù)倉。期待您的關(guān)注,一起探索云原生數(shù)倉解決方案,打造新一代開源 Data Cloud。
Databend 文檔:https://databend.rs/
Twitter:https://twitter.com/Datafuse_Labs
Slack:https://datafusecloud.slack.com/
Wechat:Databend
GitHub :https://github.com/datafuselabs/databend
