譯者 | 劉濤
審校 | 重樓
最近,我參加了一場開源峰會(huì),并被一個(gè)意外的發(fā)現(xiàn)所震撼。在一場關(guān)于社區(qū)貢獻(xiàn)的小組討論中,主持人向在場觀眾提出了一個(gè)問題:“在場的各位中,有多少人曾經(jīng)為開源項(xiàng)目做出過貢獻(xiàn)?” 只有少數(shù)人舉起手。令人驚訝的是,盡管現(xiàn)場充滿了對(duì)開源的熱情,但許多參會(huì)者似乎對(duì)于如何邁出貢獻(xiàn)開源項(xiàng)目的第一步仍感到迷茫和不確定。
目錄
- 洞見貢獻(xiàn)開源項(xiàng)目的無限可能
- 引言
- 什么是開源?
- 為開源做貢獻(xiàn)的好處
- 如何開始參與開源貢獻(xiàn)
- 非技術(shù)類開源貢獻(xiàn)
- 結(jié)語
洞見貢獻(xiàn)開源項(xiàng)目的無限可能
在峰會(huì)后的交流中,我發(fā)現(xiàn)了一個(gè)普遍的心聲:許多人對(duì)參與開源項(xiàng)目心存畏懼,誤以為只有技術(shù)精英才能做出有意義的貢獻(xiàn)。這種普遍的擔(dān)憂促使我撰寫了這份指南。我希望通過這份指南,能夠?yàn)榇蠹医议_開源項(xiàng)目的神秘面紗,證明無論技術(shù)水平高低,每個(gè)人都能在這個(gè)充滿活力的生態(tài)系統(tǒng)中找到自己的位置和價(jià)值。
引言
開源軟件是許多我們?nèi)粘J褂玫墓ぞ吆头?wù)的基礎(chǔ)。從網(wǎng)頁瀏覽器,到復(fù)雜的操作系統(tǒng),再到支撐各類應(yīng)用程序的底層庫,開源項(xiàng)目在技術(shù)領(lǐng)域中扮演著極其重要的角色。
然而,對(duì)于許多技術(shù)新人來說,踏入開源項(xiàng)目的大門往往令人望而生畏。面對(duì)開源項(xiàng)目龐大的規(guī)模和復(fù)雜的結(jié)構(gòu),很多新手感到不知所措,既不清楚應(yīng)從何處著手,也不知道如何能夠做出有意義的貢獻(xiàn)。
本文旨在為你提供一份詳盡的指南,逐步引導(dǎo)你如何向開源項(xiàng)目貢獻(xiàn)自己的力量。無論你是編程高手,還是新手,只要跟隨本文的指引,你將能夠掌握開始為開源項(xiàng)目做貢獻(xiàn)所需的知識(shí),并樹立起參與的信心。
什么是開源?
在深入探討如何向開源項(xiàng)目做出貢獻(xiàn)之前,我們需要先明確“開源”這一術(shù)語的具體含義。開源軟件是指那些遵循特定許可協(xié)議發(fā)布的軟件,這些協(xié)議允許任何人自由查看、修改以及分發(fā)軟件的源代碼。這種開放與協(xié)作的模式極大地促進(jìn)了技術(shù)創(chuàng)新與共享,使得從個(gè)人開發(fā)者到大型企業(yè)的各類參與者都能為開源項(xiàng)目的發(fā)展添磚加瓦。一些流行的開源項(xiàng)目包括:
- Linux:為許多操作系統(tǒng)提供支持的內(nèi)核。
- Python:一種廣泛使用的編程語言。
- React:一個(gè)用于構(gòu)建用戶界面的JavaScript庫。
- Mozilla Firefox:一款廣受歡迎的網(wǎng)頁瀏覽器。這些項(xiàng)目通常托管在GitHub和GitLab等平臺(tái)上,為開發(fā)者提供了便捷的協(xié)作和溝通渠道。開發(fā)者可以通過提交代碼、報(bào)告問題、參與討論和審查更改等方式,為這些開源項(xiàng)目的發(fā)展做出貢獻(xiàn)。
為開源做貢獻(xiàn)的好處
參與開源項(xiàng)目可以帶來諸多好處:
- 技能提升:通過參與實(shí)際項(xiàng)目,你將有機(jī)會(huì)親身實(shí)踐并學(xué)習(xí)最新的編程語言、開發(fā)工具以及行業(yè)內(nèi)的最佳實(shí)踐。這種實(shí)戰(zhàn)經(jīng)驗(yàn)對(duì)于深化你的技術(shù)理解、提升編程技巧具有不可估量的價(jià)值。
- 社區(qū)互動(dòng):開源項(xiàng)目背后往往有一個(gè)龐大且充滿活力的社區(qū)作為支撐。這個(gè)社區(qū)由來自全球各地的開發(fā)者組成,他們樂于分享知識(shí)、交流經(jīng)驗(yàn),并共同推動(dòng)項(xiàng)目的發(fā)展,能夠幫助你在技術(shù)和個(gè)人成長方面取得進(jìn)步。
- 人脈拓展:參與開源項(xiàng)目為你提供了一個(gè)與行業(yè)內(nèi)其他開發(fā)者、潛在雇主以及科技領(lǐng)域?qū)<医⒙?lián)系的平臺(tái)。這些聯(lián)系對(duì)于你的職業(yè)發(fā)展具有重要意義。
- 創(chuàng)建作品集:為開源項(xiàng)目做出貢獻(xiàn)是展示你技能和才華的絕佳方式。這些貢獻(xiàn)將成為你作品集中的重要組成部分,為你的未來雇主提供有力的證明。
- 產(chǎn)生影響:你的貢獻(xiàn)能夠直接影響全球成千上萬的用戶,幫助改善他人所依賴的軟件。這些用戶可能來自各行各業(yè),他們依賴這些軟件來完成工作、學(xué)習(xí)或娛樂。
如何開始參與開源貢獻(xiàn)
開源項(xiàng)目參與之旅可以細(xì)分為幾個(gè)條理清晰、易于管理的步驟。這些步驟將引領(lǐng)你逐步完成從尋找合適的開源項(xiàng)目、深入理解貢獻(xiàn)方式,到最終提交你的貢獻(xiàn)并接受審核的全過程。
第1步:設(shè)置開發(fā)環(huán)境
在著手參與開源項(xiàng)目之前,搭建一個(gè)適宜的本地開發(fā)環(huán)境是首要任務(wù)。所需的具體工具會(huì)根據(jù)項(xiàng)目所使用的編程語言或技術(shù)棧而有所差異。以下是適用于大多數(shù)項(xiàng)目的基本設(shè)置:
1.Git:一個(gè)功能強(qiáng)大的版本控制系統(tǒng),它能夠幫助你精確地追蹤代碼中的每一次更改,并促進(jìn)多人之間的協(xié)作開發(fā)。你可以從git-scm.com下載并安裝它。
安裝后,設(shè)置你的 Git 用戶名和電子郵件:
git config --global user.name "Your Name"
git config --global user.email "youremail@example.com"
2.GitHub帳戶:大多數(shù)開源項(xiàng)目都托管在GitHub上,因此請(qǐng)?jiān)?github.com上先創(chuàng)建一個(gè)帳戶。
3.文本編輯器:在挑選用于編寫代碼的文本編輯器或IDE(集成開發(fā)環(huán)境)時(shí),你會(huì)面臨多種選擇。其中,Visual Studio Code、Sublime Text 和 JetBrains 系列IDE是備受歡迎的幾款工具。
4.編程語言:根據(jù)項(xiàng)目需求安裝必要的編程語言。例如,如果你正在參與Python項(xiàng)目,請(qǐng)確保你的系統(tǒng)上已經(jīng)安裝了Python。
第2步:理解Git版本控制
版本控制是開源項(xiàng)目協(xié)作的基石,而Git則是這一領(lǐng)域的佼佼者,它使得眾多開發(fā)者能夠協(xié)同工作于同一項(xiàng)目之上,而不會(huì)相互沖突。在著手貢獻(xiàn)之前,深入理解以下Git核心概念至關(guān)重要:
- 倉庫(repo):用于存儲(chǔ)項(xiàng)目代碼和文件的目錄。
- 復(fù)刻(Forking):對(duì)項(xiàng)目進(jìn)行復(fù)刻會(huì)創(chuàng)建一個(gè)該倉庫的個(gè)人副本,允許你在不影響原始項(xiàng)目的情況下進(jìn)行修改。
- 克隆(Clone):克隆操作會(huì)將整個(gè)倉庫復(fù)制到你的本地計(jì)算機(jī)上,以便你可以離線工作。
- 分支(Branch):分支用于將你的更改與主代碼庫(通常稱為main或master)隔離。
- 拉取請(qǐng)求(Pull Request,簡稱PR):拉取請(qǐng)求是一個(gè)提議,旨在將你在分支中所做的更改合并到原始倉庫的代碼庫中。
克隆倉庫:
git clone https://github.com/username/repository.git
為更改創(chuàng)建新分支:
git clone https://github.com/username/repository.git
第3步:找到要參與貢獻(xiàn)的項(xiàng)目
找到合適的開源項(xiàng)目是開源貢獻(xiàn)之旅的起點(diǎn),也是至關(guān)重要的一步。以下是一些專為新手量身定制的查找適合項(xiàng)目的有效方法:
1.GitHub Explore:是GitHub平臺(tái)上一個(gè)極具價(jià)值的資源,專為尋找開源項(xiàng)目的用戶設(shè)計(jì)。在這個(gè)Explore頁面上,你可以方便地查找熱門倉庫以及按語言或興趣搜索項(xiàng)目,這些倉庫和項(xiàng)目往往聚集了大量的關(guān)注者和貢獻(xiàn)者,是了解和學(xué)習(xí)當(dāng)前技術(shù)趨勢(shì)的絕佳窗口。
2.Good First Issues: 在開源社區(qū)中,為了鼓勵(lì)新手積極參與并降低初次貢獻(xiàn)的門檻,許多項(xiàng)目維護(hù)者會(huì)特別標(biāo)記一些適合新手嘗試的問題,這些通常被稱為“good First Issues”。你可以通過在GitHub或其他平臺(tái)上搜索“good first issue”來找到這些內(nèi)容。
3.開源社區(qū):開源社區(qū)為新手提供了諸多友好的入門途徑,其中First Timers Only和Up For Grabs是兩個(gè)極具代表性的平臺(tái),它們均列出了一系列適合新手參與貢獻(xiàn)的開源項(xiàng)目。
4.文檔檢查:在挑選開源項(xiàng)目時(shí),務(wù)必關(guān)注那些提供了詳盡文檔的項(xiàng)目。完善的文檔能夠?yàn)槟愕呢暙I(xiàn)之路提供明確的指引,使你能夠更順暢地參與到項(xiàng)目中。例如,如果你是一名Python 開發(fā)人員,則可以為Python官方文檔或一些流行的Python庫如Requests、Flask 或 Django 等做出貢獻(xiàn)。
第4步:理解項(xiàng)目
找到你感興趣的項(xiàng)目后,接下來的關(guān)鍵步驟就是深入了解并熟悉它。
1.閱讀README:閱讀README文件是參與開源項(xiàng)目時(shí)的首要任務(wù)。這個(gè)文件通常位于項(xiàng)目的根目錄下,是了解項(xiàng)目概況、設(shè)置方法以及貢獻(xiàn)指南的窗口。
2.檢查問題:在GitHub的項(xiàng)目倉庫中,仔細(xì)查看問題板塊。這里是記錄bug、功能需求及待辦事項(xiàng)的地方。特別留意那些標(biāo)有“good first issue”或“beginner-friendly”等標(biāo)簽的問題,它們往往是專為新手設(shè)計(jì)的貢獻(xiàn)起點(diǎn)。
3.在本地設(shè)置項(xiàng)目:克隆倉庫并在本地計(jì)算機(jī)上設(shè)置項(xiàng)目,以確保一切按README中的說明正常工作。例如,如果你正在處理Python項(xiàng)目,則可能需要通過pip安裝依賴項(xiàng):pip install -r requirements.txt
4.閱讀貢獻(xiàn)指南:許多項(xiàng)目都有貢獻(xiàn)指南。這些指南可能涵蓋編碼風(fēng)格、測試要求以及如何格式化提交信息等內(nèi)容。確保你仔細(xì)閱讀并理解這些指南。
第5步:開啟你的第一次貢獻(xiàn)
現(xiàn)在是最有趣的部分,開始貢獻(xiàn)吧!以下是具體方法:
1.復(fù)刻倉庫:在GitHub上,點(diǎn)擊“Fork”按鈕以創(chuàng)建項(xiàng)目的個(gè)人副本。
2.克隆復(fù)刻:將復(fù)刻克隆到本地計(jì)算機(jī)上。 git clone https://github.com/your-username/repository.git
3.創(chuàng)建新分支:為每次貢獻(xiàn)創(chuàng)建一個(gè)新分支是一個(gè)好習(xí)慣:git checkout -b my-branch
4.進(jìn)行更改:現(xiàn)在,進(jìn)行你想要貢獻(xiàn)的修改。例如,如果你正在修復(fù)一個(gè)bug,可以在相應(yīng)的文件中編輯代碼。如果你是在更新文檔,可以編輯README.md。假設(shè)你正在修復(fù) README 中的拼寫錯(cuò)誤:
# Incorrect text
This is a sampe of a typo.
你可以改成:
# Corrected text
This is an example of a typo.
5.提交更改:一旦完成修改,請(qǐng)用清晰簡潔的信息提交這些更改:
git add .
git commit -m "Fix typo in README"
6.推送你的更改:將你的更改推送到 GitHub 上的復(fù)刻:
git push origin my-branch
第6步:提交拉取請(qǐng)求(PR)
既然你的更改已經(jīng)推送到GitHub上了,現(xiàn)在是時(shí)候?qū)⑺鼈兲峤灰怨忛喠恕?/span>
1.前往原始倉庫:導(dǎo)航到原始倉庫(不是你復(fù)刻的那個(gè))。
2.創(chuàng)建拉取請(qǐng)求:GitHub通常會(huì)顯示一個(gè)橫幅,提示你的分支已準(zhǔn)備好創(chuàng)建拉取請(qǐng)求。請(qǐng)點(diǎn)擊“Compare & pull request”按鈕。
3.編撰說明:請(qǐng)清晰說明你所完成的操作及其原因。具體描述你的更改解決了什么問題。
一旦提交拉取請(qǐng)求后,項(xiàng)目維護(hù)人員將審查你的更改。他們可能會(huì)要求你進(jìn)行修改或者直接批準(zhǔn)你的更改。
第7步:回應(yīng)反饋
維護(hù)人員可能會(huì)就你的拉取請(qǐng)求(Pull Request)提供反饋。請(qǐng)務(wù)必及時(shí)回應(yīng)。如果他們要求你進(jìn)行修改,請(qǐng)?jiān)诒镜剡M(jìn)行這些更改,然后提交,將它們推送到你的復(fù)刻倉庫中。例如:
git commit --amend
git push --force
更改獲得批準(zhǔn)后,你的拉取請(qǐng)求將合并到主項(xiàng)目中。
非技術(shù)類開源貢獻(xiàn)
盡管編碼等技術(shù)性貢獻(xiàn)常常被視為開源項(xiàng)目的核心,但實(shí)際上,開源項(xiàng)目同樣歡迎并珍視那些不需要編程技能的貢獻(xiàn)方式。這些貢獻(xiàn)同樣具有極高的價(jià)值,能夠?yàn)轫?xiàng)目的成功和發(fā)展做出重要貢獻(xiàn)。
1.文檔
清晰、全面的文檔對(duì)于任何開源項(xiàng)目都至關(guān)重要,但它往往被忽視。作為非技術(shù)貢獻(xiàn)者,你可以為項(xiàng)目改進(jìn)或編寫文檔,使新用戶和其他貢獻(xiàn)者更容易理解和使用軟件。
- 改進(jìn)README:明確設(shè)置說明、使用示例和安裝流程。
- 編寫教程:創(chuàng)建分步指南或視頻教程,幫助新手入門該項(xiàng)目。
- 修正拼寫錯(cuò)誤:糾正現(xiàn)有文檔中的拼寫、語法和格式錯(cuò)誤。
2.社區(qū)支持與參與
眾多開源項(xiàng)目的繁榮發(fā)展離不開一個(gè)充滿生機(jī)與活力的社區(qū)。為這樣的社區(qū)貢獻(xiàn)力量,可以采取多種形式,如解答疑問、引導(dǎo)討論以及為初來乍到的新手提供支持。
- 通過在GitHub問題跟蹤系統(tǒng)或社區(qū)論壇中回答用戶的問題,幫助那些在項(xiàng)目使用中遇到問題的用戶。
- 確保論壇、郵件列表或社交媒體上的討論具有建設(shè)性且緊扣主題。
- 整理常見問題及其答案,以幫助用戶解決常見問題。
3.設(shè)計(jì)與用戶界面(UI)貢獻(xiàn)
項(xiàng)目往往需要在提升其用戶界面的視覺美感及用戶友好度方面尋求助力。如果你具有設(shè)計(jì)專業(yè)背景,可以通過創(chuàng)建原型、改進(jìn)布局或提出用戶界面/用戶體驗(yàn)(UI/UX)改進(jìn)建議來貢獻(xiàn)力量。
- 為項(xiàng)目設(shè)計(jì)標(biāo)識(shí)、圖標(biāo)或插圖等視覺元素。
- 繪制原型圖,或提供關(guān)于如何使界面更加直觀易用的建議。
4.項(xiàng)目本地化與翻譯
確保開源項(xiàng)目能夠觸達(dá)全球受眾是至關(guān)重要的,這不僅能增加項(xiàng)目的知名度和影響力,還能促進(jìn)全球范圍內(nèi)的協(xié)作與創(chuàng)新。為了實(shí)現(xiàn)這一目標(biāo),需要將項(xiàng)目內(nèi)容翻譯成多種語言,以適應(yīng)非英語母語者的需求。
- 將項(xiàng)目文檔轉(zhuǎn)換為其他語言,擴(kuò)大用戶群。
- 調(diào)整軟件界面、錯(cuò)誤信息或網(wǎng)站,使其適應(yīng)不同地區(qū)和文化背景。
5.市場推廣與對(duì)外宣傳
開源項(xiàng)目的持續(xù)發(fā)展離不開新用戶和貢獻(xiàn)者的加入。因此,制定有效的營銷策略至關(guān)重要。對(duì)于非技術(shù)背景的貢獻(xiàn)者來說,可以通過多種渠道來提升項(xiàng)目的知名度和影響力。
- 在Twitter、LinkedIn、Facebook等平臺(tái)上分享項(xiàng)目動(dòng)態(tài)、更新和亮點(diǎn)。
- 撰寫關(guān)于項(xiàng)目的文章,介紹使用方法或解決的具體問題。
- 制作視頻教程或博客文章,幫助新用戶學(xué)習(xí)如何使用或參與項(xiàng)目。
6.活動(dòng)組織與籌款
組織活動(dòng)或籌集資金對(duì)開源項(xiàng)目的可持續(xù)發(fā)展至關(guān)重要。諸如活動(dòng)策劃或財(cái)務(wù)支持等非技術(shù)性貢獻(xiàn)可以產(chǎn)生重大影響。
- 協(xié)助組織社區(qū)活動(dòng)、黑客松(hackathons:是一種由程序員、開發(fā)者等IT行業(yè)人員參與的集思廣益的編程活動(dòng)。它強(qiáng)調(diào)在短時(shí)間、高強(qiáng)度、重實(shí)操的條件下,通過團(tuán)隊(duì)合作解決特定問題或開發(fā)新產(chǎn)品)或會(huì)議,促進(jìn)開發(fā)者和用戶的交流。
- 支持籌款工作,通過眾籌活動(dòng)或申請(qǐng)資助等多種方式,以確保開源項(xiàng)目擁有穩(wěn)健的財(cái)務(wù)前景。
7.質(zhì)量保證(QA)與測試
盡管軟件測試在許多人眼中是一項(xiàng)高度技術(shù)性的任務(wù),但實(shí)際上,非開發(fā)者同樣能通過測試軟件的可用性和報(bào)告遇到的問題來為項(xiàng)目貢獻(xiàn)力量。非技術(shù)背景的用戶往往能為項(xiàng)目的用戶體驗(yàn)提供極為寶貴的反饋。
- 識(shí)別并報(bào)告在使用軟件過程中遇到的缺陷或問題。
- 對(duì)軟件的易用性提供反饋,并建議改進(jìn)方案。
8.法律與許可貢獻(xiàn)
開源項(xiàng)目在運(yùn)營過程中,頻繁面臨許可證合規(guī)、服務(wù)條款遵循等法律層面的挑戰(zhàn),確保項(xiàng)目在法律框架內(nèi)穩(wěn)健前行至關(guān)重要。
- 確保項(xiàng)目擁有法律許可相關(guān)證明,并遵守相關(guān)開源許可證要求。
- 協(xié)助制定貢獻(xiàn)者協(xié)議或其他法律文件,以保護(hù)貢獻(xiàn)者和項(xiàng)目本身的利益。
這些非技術(shù)性的貢獻(xiàn)對(duì)開源項(xiàng)目的長遠(yuǎn)發(fā)展具有不可估量的價(jià)值。遺憾的是,它們往往被新手所忽視,他們可能錯(cuò)誤地認(rèn)為唯有技術(shù)才是貢獻(xiàn)的唯一途徑。事實(shí)上,開源社區(qū)的靈魂在于協(xié)作與共享,非技術(shù)貢獻(xiàn)者在培育這一精神中發(fā)揮著舉足輕重的作用。
結(jié)語
參與開源項(xiàng)目無疑是一段充滿意義的旅程,它不僅能夠助力開發(fā)者的個(gè)人成長,還能使一群志同道合的伙伴建立深厚的聯(lián)系,共同為軟件世界添磚加瓦,創(chuàng)造價(jià)值。
請(qǐng)記住,每一位貢獻(xiàn)者都是從零開始,或許你的初次貢獻(xiàn)微不足道,又或許在參與的過程中你會(huì)遭遇重重挑戰(zhàn),但請(qǐng)切勿氣餒。開源社區(qū)以其開放和包容的特性而著稱,你的每一分貢獻(xiàn)都將轉(zhuǎn)化為無限的學(xué)習(xí)與成長契機(jī),讓你在這個(gè)充滿活力的環(huán)境中不斷進(jìn)步。
譯者介紹
劉濤,51CTO社區(qū)編輯,某大型央企系統(tǒng)上線檢測管控負(fù)責(zé)人。
原文標(biāo)題:How to Contribute to Open Source Projects as a Beginner,作者:Fanny Nyayic