如何在開源世界打造自己的明星 Project?

GitChat技術雜談發表於2017-11-27

640.gif?wxfrom=5&wx_lazy=1

本文來自作者 王爵nice 在 GitChat 上分享「如何進入開源世界並打造自己的明星 Project?」,閱讀原文」檢視交流實錄

文末高能

編輯 | 莫蘭迪

我相信很多人多多少對開源軟體都會有所瞭解,很多人也許正在使用它們。在本次的分享中我大概會涉及到以下內容:

  1. 開源軟體的意義

  2. 如何加入開源隊伍

  3. 創造屬於自己的開源專案

  4. 打造明星 Project 的要點

  5. 嘗試獲得報酬

其實上面這些內容已經夠多了,按我之前的預算放在一篇 Chat 中是無法全部講的很細,所以這篇分享中會指出每個標題中的關鍵。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

開源軟體的意義

據我所知,大部分的網際網路企業都會使用開源軟體。開源軟體相對於商業軟體有其更為深遠的意義,對於一些發展中國家、初創企業而言,完整的構建原始碼是非常耗時的,成本也逐漸增加,對於技術人員的要求也更高。

開源讓這些事情變得簡單,優秀的開源軟體可以保證原始碼透明度、軟體可靠性、安全性、社群活躍。這促使企業可以更低成本的享受開源軟體帶來的紅利。

作為開發者,在開源世界中我們可以結識到更多優秀的工程師,鞏固現有的技能。

學習優秀的開原始碼也會提升自己的程式設計能力,參與開源專案會認識到更多和你志趣相同的小夥伴。

開源將一群身處世界各個城市的人們連線在一起,在這個虛擬的世界裡你也可能會因為一些舉措幫助到別人,可能會因為寫了一些程式碼讓更多人知道你是誰。

接下來我們來進一步感受它吧~

如何加入開源隊伍

什麼是貢獻?

在開源軟體中參與一次貢獻可以是程式設計修復BUG,也可以是文件上的錯別字被指正,或者是提出一個好的建議,他們都是一種貢獻。

發揮所長

我擅長編碼

  • 修復新的BUG

  • 優化軟體效能

  • 完成新特性

  • 改進構建或自動化測試

我擅長寫作

  • 撰寫和改進文件

  • 編寫軟體教程

  • 為軟體釋出更新新聞

  • 翻譯為其他國別語言

我喜歡幫助別人

  • 回答公開的問題

  • 幫助其他人解決問題

  • 參與一些 BUG 或者新特性的討論

  • 幫助別人做 CodeReview

我擅長組織活動

  • 將社群中的問題分類,讓它變得井井有條

  • 將最近討論的問題闡釋清楚,以推動討論

  • 組織和策劃社群的線上、線下分享活動

我擅長設計

  • 優化官網的使用者體驗或佈局

  • 通過調查完善導航欄設計

  • 整理一個統一風格的視覺設計

  • 為專案建立T恤或更合適的 LOGO

當然除了這些也可以不必是軟體,在 Github 上也有很多的文件專案、分類列表等,如果你也有收集癖不妨嘗試總結一些好的想法分享給大家。

我該怎麼做

分析專案

當找到一個感興趣的開源專案時,靜下來分析這個專案,每個專案都會有自己的特色,你應該瞭解一下專案的組織結構和開源準則。一個典型的開源專案均會有如下型別的人:

  • 作者: 專案的作者或發起者

  • 歸屬者: 程式碼倉庫或組織的管理員(不一定和作者是同一個人)

  • 維護者: 貢獻者,負責專案的未來走向和組織的管理(他們通常也是專案的作者或歸屬者。)

  • 貢獻者: 只要是為專案做出了貢獻都算。

  • 社群成員: 那些使用專案的人們。他們或許是積極的討論者,又或者是為專案的方向提出意見的人。

一個靠譜的專案中也會列出他們的開源準則,在Github上可能會看一些規範文件:

  • LICENSE: 根據開源軟體的定義,每一個開源專案必須是有開源許可協議的。

    可以這麼認為:假如說某個專案原始碼開放,但是沒有任何的許可協議,那麼它就不能叫做開源。

  • README: README 是一個介紹性的說明檔案,對初次光臨社群對人們表示歡迎,它通常會解釋專案有何用處,為何發起,以及如何快速入門等。

  • 貢獻檔案: README 幫助人們來認識專案,貢獻檔案則是幫助對專案如何做貢獻。

    它解釋了目前專案需要什麼樣型別對貢獻者,社群對流程是啥樣的。並非所有的專案都會有這個檔案,它某種程度上也是展示專案對於貢獻者的友好程度。

  • 行為準則: 顧名思義,即是一些參與社群時的一些禮儀、說話方式、行為等,幫助形成一種友好的氛圍,不是所有的專案都會撰寫行為準則檔案,它某種程度上也是展示專案對於貢獻者的友好程度。

  • 其它文件: 有些專案也許還有其它文件,例如教程、指南,或者是治理規則,這在大型專案中常見。

找到屬於自己可以參與的

假如你之前從來都沒有為開源做過貢獻的話,那麼請記住來自美國總統約翰 F.肯尼迪的這段話:“不要問你的國家能為你做什麼,要問你能為國家做什麼。”

你可以通過以下方式找到合適的專案:

  • GitHub 探索

  • GitHub 流行

  • First Timers Only

  • 你的第一個 PR

  • CodeTriage

  • 24 Pull Requests

  • Up For Grabs

  • 像忍者一樣貢獻

這裡是指如何在 Github 找到開源專案,恐怕也沒有比這個平臺更多的開源專案了。

和他人溝通

當你閱讀了專案的準則,可能會有自己的想法,可以嘗試發起一個 issue 和其他參與者一起探討。

在開源世界中和他人溝通是你必須會的一項技能,為了解決一個問題或者求助於某件事,你應該知道一些準則,否則可能會竹籃打水。

在開始提問前準備好上下文

當回答者想幫助你解決問題的時候必須知道你在什麼樣的環境下遭遇何種問題才有可能幫助到你。

所以你需要儘可能清楚和詳細的描述自己的問題,準備好上下文讓對方知道你在問什麼。

保持內容短小、簡潔

能用一句話闡述的就不要長篇大論。

讓你的問題公開

在社群的公開 issue 或者社交軟體中公開表達你的問題、想法,也許其他人也有這個疑惑,很多人會在你們的交流、意見中受益。

保持友好

開源世界中可能來自不同地區的人,無法完全在同一語境下溝通,所以保持禮貌、善意讓溝通變得更加融洽。

可以做的事

  • 新增一個好的想法

  • 修復一個文字錯誤

  • 幫助編寫文件

  • 幫助編寫測試用例

  • 優化某個函式的效能

  • 翻譯其他國別語言

  • 編寫一些Demo示例

創造屬於自己的開源專案

有部分同學有自己的想法,也希望可以將它們被人們使用、讓更多人蔘與,我只有一句:“大膽去做吧”。在開始之前我會告訴你一些技巧和需要注意的地方。

開源是免費的嗎?

開源裡很重要的一點是拿來主義,拿來主義不光能省去開發成本,還能讓你擴充見識和想法,而不會成為井底之蛙還茫然自得。

開源軟體是免費的,但是,“免費”只是開源的總體價值的一個副產品。因為開源許可證要求任何人可以幾乎出於任何目使用,修改和共享您的專案,專案本身往往是免費的。 如果該專案花錢使用,任何人也都可以合法地複製和使用免費版本。

因此,大多數開源專案是免費的,但“免費”不是開源定義的一部分。 有些方法可以通過雙重許可或有限功能間接地為開源專案收費,同時仍然遵守開源的官方定義。

自由與免費

軟體是 “自由的”(libre)還是 “免費的”(gratis),這兩種說法通常是有區別。

也就是說,軟體是不需要支付購買費用,還是您可以獲得原始碼並對其進行自由修改?

開源指的是後者。然而,由於開源意味著自由複製,所以開源軟體本身沒有太多的商業銷售。

開啟一個專案都需要什麼

1. 開源協議

至於如何選擇開源協議,我覺得用一張圖來解釋比較簡潔明瞭。

0?wx_fmt=png

2. README

README 檔案不僅僅是用於說明如何使用你的專案。他們還可以解釋你的專案為什麼重要,以及它可以為你的使用者做什麼。

在您的 README 檔案中,嘗試回答以下問題:

  • 這個專案做什麼?

  • 為什麼這個專案有用?

  • 如何開始?

  • 如果需要,我可以在哪裡獲得更多的幫助?

3. 基本 Git 操作流

Git 的操作內容非常多,我們在這裡列一些最常用的。

3.1 新建程式碼庫

0?wx_fmt=png

3.2 配置

Git 的設定檔案為 .gitconfig,它可以在使用者主目錄下(全域性配置),也可以在專案目錄下(專案配置)。

0?wx_fmt=png

3.3 增加/刪除檔案

0?wx_fmt=png

3.4 程式碼提交

0?wx_fmt=png

一些點子

  • 自用的小工具

  • 某個軟體的外掛

  • 比現有軟體更好的解決方案

  • 讓某件事變得自動化

  • 提高程式設計師生產力

  • 更好的文件、流程、溝通協作工具

  • 有趣的爬蟲專案

  • 等等…

打造明星 Project 的要點

這裡講一些打造明星專案的個人觀點和經驗,針對於個人專案而言。絕大部分的開源專案很可能都會死在半路上,因為種種的原因不在維護下去,是什麼讓一部分專案變得更受歡迎呢?

編寫更好的 README

這裡為什麼說編寫更好的 README,我不是已經寫了 README 了嗎?其實和編寫簡歷也有異曲同工之處,一個好的 README 會讓你的專案在短時間內倍受關注,這些經驗是我在後來才發現的。

你需要清楚一點,所有的使用者點開你專案連結第一眼看到的就是README文件,只有使用者在這個頁面停留的時間較長或者因為你的介紹真的很酷,或是一些其他非常讚的特性才有可能關注、支援你的專案。在這件事上要有條理,把所有需要給別人呈現的東西都要提及,下面是一個好的README文件格式參考。

# 專案名稱關於這個專案一段簡短的描述## 特性- 比 Redis 更快的效能 - 像 Ruby 一樣優雅的語法 - 程式碼不到 1000 行 - 諸如此類的介紹## 快速入門用你認為最簡單的一種方式解釋它是如何執行、部署的。### 環境資訊比如它是否需要某個程式語言環境的什麼版本等等 - JDK1.8- Maven3### 如何安裝一個安裝的示例,告訴使用者你的專案在它的環境下如何安裝,必須告訴他需要什麼環境。比如: pip3 install request## 執行測試當你有單元測試的時候可以告訴開發者該如何執行他們,以便於學習你的專案。## 部署新增附加說明如何部署這個專案## 基於以下構建* [Dropwizard](http://www.dropwizard.io/1.0.2/docs/) - The web framework used * [Maven](https://maven.apache.org/) - Dependency Management * [ROME](https://rometools.github.io/rome/) - Used to generate RSS Feeds## 參與貢獻請閱讀 [CONTRIBUTING.md](https://github.com/biezhi/blade/CONTRIBUTING.md) 在我們的行為準則的細節,並向我們提交的請求過程。## 作者專案的作者是 [biezhi](https://github.com/biezhi) 其他貢獻者名單 [contributors](https://github.com/your/project/contributors)## 開源協議這個專案是 MIT License - 可以檢視 [LICENSE.md](LICENSE.md) 檔案詳情

好的入門示例

為你的專案編寫一個簡單、快速的入門示例,讓使用者不要困惑。
比如:

public static void main(String[] args) {    Blade.me().get("/", (req, res) -> {        res.text("Hello Blade");    }).start(); }

新增一些徽章

為你的專案新增一些諸如 構建結果、程式碼質量驗證、下載量、測試覆蓋率、最新版本等徽章,會讓使用者第一眼清楚這個專案的很多情況,也是加分項。比如我的專案中使用了這些:

0?wx_fmt=png

這些徽章都有各自存在的意義,不同程式語言、專案也都有所不同,在這篇文章中就不一一概述了,如果有興趣可以聯絡我一起交流。

更快的處理反饋

當有人注意到專案之後,你馬上會收到一些 issue 或者 pull request,對於每一個 issue 或者 pull request 都快速的給予反饋,即便你無法立刻處理,也不要讓發起者感到這個專案無人問津,這也是讓專案保持活力的一種方式。

推廣你的專案

雖說 酒香不怕巷子深,作為專案的主要貢獻者,你的責任是為你的的專案建立文件並推廣它。

寫部落格文章,並在社交媒體上分享專案的進展。你可以從簡要描述如何成為專案的貢獻者開始,並在該描述中提供主要開發者文件的參考連線。你可以通過以下渠道推廣你的專案:

  • V2EX

  • 掘金

  • 開發者頭條

  • Hacker News

關於 Github 推廣的一個小技巧,推廣時間選擇在一週的開始,不用做重複的推廣,只要在第一天有很多的關注者,排行到 Github 的流行趨勢裡那麼受歡迎程度的熱度還是比較長的。

如果可以找到一些有影響力的程式設計師幫忙宣傳一下效果更好。

如果專案真的不錯(可以為很多企業服務),也可以線上下找到受眾,可以通過公開演講或者參與聚會讓更多人知道這個好的專案。

不斷優化

好的專案是不斷的優化而來,很多事情往往不是一成不變的,一個開源專案會在擁有一小部分關注後收到來自不同方向的聲音。

作為專案的發起者需要不斷維護和優化它,和那些願意使用你軟體的朋友們一起討論、交流,讓它變得更好。只有這樣你的軟體才會被傳播的更遠。

當項有一定的使用者和支持者之後,我們要花更多的時間去管理專案上的一些協作流等任務,比編碼更重要的是整個過程。打造一個大家願意使用、貢獻、並主動宣傳的人氣社群。

建立社群

對於一個初級的小專案而言你可以使用一些IM軟體來做為使用者溝通,因為 郵件、論壇 這樣的方式很難實時,或許會因此流失一部分支持者。

目前也有很多流行的工具,像 gitter、QQ群、slack 都是不錯的方式,你可以選擇自己喜歡的工具。

對於一個發展中的專案而言(這裡指使用者基數比較多了),IM 方式溝通肯定是處理不過來了,維護者可需要更多人蔘與,可以建立線上的論壇,分不同的版塊去交流問題。

千萬不要做 QQ1群、2群 這種愚蠢的事,要知道更多的群只會讓你收到更多垃圾訊息而已。

嘗試獲得報酬

大多數的開源專案都源自某個人的辛苦付出,從經濟學原理來講你在某件事情上所花費的時間可以用金錢來衡量,對於一個開源專案的作者而言如果可以收到一些經濟上的贊助或者收益會增大對專案的激情。

在這裡我們講一下什麼型別的專案容易獲得報酬以及開源軟體盈利的一些方式。

什麼專案容易獲得報酬?

開源專案基數龐大,並非每個專案都會有盈利的點,畢竟不是誰都可以做出像 Vue.js 那麼受歡迎的頂級專案。

專案能否盈利的關鍵在於它的商業價值,比如 微信公眾號 類的專案在國內就會非常受歡迎,為這類專案分一下類目大概是:工具類、自動化類、個性化展示類、提高效率類,等等。

開源專案盈利的方式

· 獲得捐贈

部分開源軟體的維護是需要成本的(像 VPS、域名等等),如果你的開源專案想要接受捐贈,你們可以設定一個捐贈按鈕(例如使用 PayPal 或者Stripe,還有支付寶和微信支付),除非您是符合條件的非營利機構(如果你在美國),否則這筆錢不會免稅。

· 技術諮詢

當專案的使用者很多的時候技術諮詢就是一個賺錢的活兒了,比如像 apache 旗下的一些頂級專案,會有人多人做技術的培訓、諮詢。

因為有些企業只知道這個專案可以幫助他們解決問題、業界推薦,但是他們沒專業的人才所以會請一些技術諮詢、培訓的人幫忙講授,價格也是比較高的。

· 二次開發

有些專案實現了一些有趣的點子,對某些營銷、其他行業的人更有商業價值,但是對方對現有功能不太滿足,可能會找人做二次開發。

比如,微信個人機器人,這專案不是官方的,有些公司會有一些自定義的需求,開源專案中提供的功能不夠用,會找別人做二次開發,去眾包類的網站也是非常常見的一個需求。

· 增值服務

增值服務的盈利模式在國內比較常見,專案分為開源版本和專業版(專業版收費),像開源中國裡絕大部分火起來的專案都是如此,這裡就不舉例子了,自己去看。

前面我們說了這麼多關於開源的事情,相信你大概在心中已經有了自己心中的開源世界,我們可以探索和發現的還有更多,歡迎和更多開源愛好者一起協作、交流,謝謝大家捧場。

近期熱文

視訊的「編解碼」與「傳輸」的那些事兒

從 JS Event Loop 機制看 Vue 中 nextTick 的實現原理

Java 面試必會知識點:Java 多執行緒與併發程式設計

手把手教你如何向 Linux 核心提交程式碼

Java 實現 Web 應用中的定時任務

來自Python中文社群創始人

GitHub 筆記

0?wx_fmt=jpeg

「閱讀原文」看交流實錄,你想知道的都在這裡

相關文章