铁头乔:开源社区那些事
?
本文字數:2948 字
閱讀時間:8 分鐘
目
錄
舉個例子
開源社區如何起步
起步后的困難在哪
是什么激勵我們
舉個例子
大家經常看到開源社區這四個字,什么是開源社區呢?咱們先看個例子。
一個程序員 A,寫了一個簡單的計算器,支持加減乘除四個功能,然后公開到網上了,類似一個在線文檔,可以協同編輯,他就成了第一個貢獻者。
有一些人發現這個計算器的風格挺好看,就下載使用了,于是就成為了開源用戶。用戶在用的過程發現缺少了一些高級功能,于是開始提新需求。
這些用戶里,有一個也是程序員,他想了想,與其等原作者開發,不如自己動手寫了,畢竟代碼都是公開的,他就開始向這個計算器里增加新的代碼和文檔。于是他又多了一個身份:貢獻者。?
還有一些程序員,他們本身不需要用計算器,但是他們發現這個計算器的代碼水平很高,于是一邊看代碼學習,一邊提交一些代碼和文檔,于是他們也成為了貢獻者。
還有一些人,覺得這個計算器項目很有意義,于是開始給朋友推薦這個計算器,他就成為了布道師。
用戶、貢獻者、布道師,開源社區里主要就是這些角色。
所有圍繞這個開源計算器項目的參與者就構成了這個項目的開源社區。一般來說項目和開源社區是一對一的。
一個開源項目的代碼可以商用嗎,商用時 Bug 造成了損失能找開發者索賠嗎,基于這些代碼改的代碼也需要開源嗎,這些是開源協議明確的事情。如 Apache 協議、BSD 協議、MIT 協議、木蘭協議等。通常被 OSI (Open Source Initiavite 開源促進會)https://opensource.org/licenses/category 認證的才算開源協議。
為了讓大家協作的更好,需要有一套完整的流程引導大家工作,告訴大家這個項目的運轉規則,比如在哪里進行交流討論、如何發布版本、如何接受一個人的修改建議等,這就是開源社區規范。這個沒有標準模板,每個社區都可以制定自己的規范。
為了促進開源項目的發展,會有一些組織,幫項目提供知識產權服務、指導項目建立開源社區規范、提供一些技術和平臺支持,這就是開源軟件基金會。如 Apache 基金會、Linux 基金會、CNCF 基金會、開放原子基金會等。基金會通常會為項目分配社區導師來進行實際的指導。
從上邊的例子可以看到,開源社區是一個虛擬世界的概念,他不要求社區中的人物理上在一個城市、一個小區,社區的人甚至沒有互相見過面,但這不影響他們一起協作,而且也不是只有程序員才能參與開源社區,文檔貢獻、Logo設計、活動組織、宣傳等都是可以參與的建設活動。
開源社區如何起步
我最開始接觸開源,是在做一個項目過程中遇到了問題,于是去相關項目的 Github 中提問,當時有一個國外小哥很快回答了我的問題,這是我第一次享受到開源社區對用戶的福利。作為回報,我關注了這個小哥。
在做時序數據庫 IoTDB 的過程中,我們也幸運地進入 Apache 開源軟件基金會,在社區導師的指導下,開始建設我們的開源社區。雖然有很多不熟悉的,但還是朝著正確的方向前進。
開源社區建設有幾個重要的方向:
項目整理:按照 Apache 的規范整理代碼、用戶手冊、開源協議,并且學習版本發布計劃,這個階段是讓項目合法合規,這是建設社區的第一步,也是需要持續關注的。
社區宣傳:把代碼公開并不會給項目帶來多少流量,需要通過各種宣傳渠道讓別人了解你的開源項目。
服務用戶:一個開源社區的目標一定是讓軟件被更多人用起來,所以服務用戶是每個社區的主線工作。包括開發用戶需要的功能、修復用戶發現的bug、寫文檔讓用戶更便捷地使用起來。
貢獻者協作:貢獻者往往不是一個人,而且通常是遠程交流,為了更好地服務用戶,現有貢獻者通常希望實現兩件事:吸引更多的貢獻者、和其他貢獻者高效地分工合作。這就需要社區有一套完善的工作機制,讓每個人都能找到自己合適的位置,并且做出貢獻。
起步后的困難在哪
上邊四項聽起來并不難嘛,確實,起步不難。但是做好并不容易,接下來講幾個場景。
(1)持續合規:項目中依賴的其他開源項目都需要滿足一定的開源協議要求,并且進行聲明。但并不是社區所有人都清楚開源協議的具體要求的,畢竟大家不都是法務,于是可能某一次代碼合并就引入了一個不符合要求的項目。
解法:需要通過一些工具來進行檢查,在發版前都要一一確認。
(2)宣傳:很多開發者都喜歡低調研究技術,并不喜歡宣傳自己在干什么,于是了解項目的人就少。
解法:要鼓勵大家寫文章,有意識地與人交流,多做分享。
(3)交流:與開源用戶交流通常是在線上。而且不同用戶的背景和語境都不一樣,導致交流困難,所以你會發現每個社區與用戶交流較多的都是那么幾個人。
解法:多與用戶接觸,之后就能適應各個用戶的語境,快速切換語料庫。
(4)文檔:程序員都喜歡看文檔,但是都不喜歡寫文檔,尤其是用戶手冊,或者用戶手冊寫的別人并不能看懂。
解法:把自己當做產品經理,多從產品的角度思考。
(5)協作:通常社區的貢獻者都是一個一個小團隊,每個小團隊是線下一起辦公的,大家肯定更習慣面對面討論,通常團隊內討論出來結果就直接開干了,并不會有跟社區同步的意識,這就會導致社區貢獻者之間不知道其他人在干什么,也可能做了重復、沖突的工作。
解法:團隊內要注意多把開發計劃和社區同步,尤其是團隊負責人要有這個意識。
(6)培養:新人加入社區,通常需要有老人帶,老人只能通過給新人分配任務的方式培養新人。這時候老人可能會有一種心理,我又不是新人的上級,給他們分配任務是不是不太好。
解法:要臉皮厚一些,習慣跟新人說“來做個這個任務吧”。
(7)鼓勵:對于新人來說,開發過程中會遇到各種各樣的小問題,即使指定了一個老人帶他,也會不好意思問,覺得這個問題太小了,是不是自己太菜了。
解法:要多鼓勵新人提問,不分大小,并且總結常見問題給更多新人參考。
(8)協商:不同開發者對于同一件事的觀點不同,我想用方案1實現,你想用方案2實現,怎么辦?
解法:可以定義框架,大家對外暴露的功能一樣,但是允許有不同的實現方案。如果是功能不同,可以考慮提供配置參數進行功能切換。
是什么激勵我們
上邊只列了一些困難和可能的解法。接下來到了核心問題。社區貢獻者為什么要費這么大勁來做這些事,社區做大了對個人有什么好處?
(1)對用戶兼貢獻者友好
社區做大了,用戶的體驗一定會變好,因為軟件會更完善,維護者也會更多。很多貢獻者本身就是用戶,所以這是一件對自己有直接好處的事。
(2)技術能力提升
一些開發者,工作之余還有精力,想積累一些項目經驗,鍛煉編碼水平,這時候就可以參與到開源社區中,鍛煉技術能力,做的越多,收獲越多。
(3)提升影響力
在社區中,解答用戶的問題、培養新人、貢獻代碼,這些貢獻別人都會看在眼里、記在心里,這樣就提升了自己在社區的影響力。
(4)獲得友情、甚至愛情
一個社區的人通常都有共同的目標,大家一起扛過槍,服務過用戶,關系會更緊密。對于一些不會追女生的男生,聊代碼、聊技術也是一個好的活動。
(5)理想
項目的每個貢獻者,不論貢獻多少,都會有一種希望,希望社區越來越好。而且貢獻越多,希望會越強烈。當社區足夠出名,他能很自豪的跟別人說:我也是這個社區的貢獻者。
最后,歡迎大家加入 Apache IoTDB 社區,為國產時序數據庫貢獻力量。至于如何加入,可以在公眾號加我微信。
長
按
關
注
鐵頭喬
生命,永不低頭。
總結
以上是生活随笔為你收集整理的铁头乔:开源社区那些事的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大学期间的副业赚钱之道
- 下一篇: 英雄杀判定