想靠開源賺錢嗎
原文由 Matthias Endler 于 發布,訂閱此部落格
多年來維護開源軟體,我一毛錢也沒賺到,還以為這就是常態。去年我終於開始研究如何讓自己的專案變現,在這場演講中想分享到目前為止學到的心得。還沒讓我致富(暫時還沒!),但我已經打造出第一個能永續經營的副業專案 analysis-tools.dev ✨。
我會聊聊這個專案和其他專案,以及我在邁向永續經營的路上所犯的錯誤。
相關連結與資源:
- Caleb Porzio 的 Podcast,談論為何圍繞 GitHub Sponsors 打造事業會如此艱難。
- The Changelog Podcast — 與 Zeno Rocha 對談「從開源賺錢是沒問題的」。
- Nadia Eghbal 談論我們關鍵資訊基礎設施的維護。她也針對這個主題寫了一本書《Working in Public》。
- Vadim Demedes 撰寫的《Generating income from open source》,透過各種真實案例說明不同的專案變現方式。
以下為本次演講的完整逐字稿。(文字有點多,先說聲抱歉。)
這場關於靠開源賺錢的演講,是我在 2020 年底於 Aachen 的 Web Engineering Meetup 上發表的。主辦單位很樂意讓我把它分享到自己的 YouTube 頻道上。基本上,我試圖回答一個問題:「為什麼我在 GitHub 上還沒賺到 10 萬?」我會談談如何為自己尋找企業贊助,以及開源維護邁向永續的那條漫漫長路。
你可能甚至會不想開始。這場演講是獻給那些覺得「如果要花這麼久才會成功,花這麼多心力在開源上可能不值得」的人。老實說,這場演講最後講得有點沉重。我本來想講一場很激勵人心的分享,但現實就是,很難,真的非常難。
我只是想先把這個重點講清楚,或許還是能激勵你去嘗試,但首先:憑什麼由我來談這個?我做開源已經超過 10 年了。這場演講算是獻給 15 年前的自己。我在 trivago 工作,這是一家總部位於杜塞道夫的飯店搜尋公司。我的部落格在 endler.dev。跟大家還有他們的媽媽一樣,我也有一個 YouTube 頻道,叫做 Hello, Rust!,我超級活躍,每兩年發一部影片。所以,你絕對會想訂閱,才不會錯過任何更新。不過今天,我想聊的是開源,而且我有一個非常精密的大綱,只有兩點:我的旅程與獲利模式。
讓我們回到 2010 年。那時的世界看起來確實很不一樣。

這就是當時的 GitHub,而我算是比較晚加入的。我在 2010 年 1 月加入,那時 GitHub 已經成立兩年了,所以我想要的用戶名已經被註冊走了。我在各個平台上通常都用 mre 這個帳號,發現這個帳號竟然沒人用,我就直接寫信給客服問能不能給我,結果有個人回我「拿去吧」。那個人就是 Chris Wanstrath,帳號是 defunct,他是 GitHub 的前執行長,從那一刻起,我就被這個平台圈粉了。我真的很喜歡這個平台,也很喜歡他們親力親為投入開源的方式。我用它來放自己的一些專案,你可以在截圖中看到,我甚至把部落格也上傳上去了,因為他們提供免費代管。那是用 Jekyll 做的,只要推送到他們的網站,就會自動產生靜態網頁,完成。不用說,過去 10 年來幾乎沒什麼改變,因為我的部落格到現在看起來還是差不多。只是不再是用 jQuery 和 Jekyll 做的,而是改用 zola 和 Cloudflare Worker Sites,但本質上是同一回事。為了準備這場演講,我想回頭看看自己從哪裡來、現在在哪裡,而最好的方法大概就是查一些數據,看看歷年來的儲存庫數量能否給我一些啟示。所以我去查了 GitHub API。
你可以看到,從 2010 到 2020 年,這幾乎是一條直線成長的圖。除了 2018 年,看起來是我的生產力巔峰,不過算了。整體來說,基本上是線性的,你可能會想,投入多少就得到多少回饋,但實際上不是這樣。這裡有複利效應。如果我們來看我隨時間累積的星星數,你會發現一開始成長非常緩慢,現在則有點像指數型成長,目前所有專案加起來大約有 25,000 顆星。另一種觀察方式是追蹤人數。這對我來說是個比較新的指標,但我從 archive.org 查了一些資料(因為 GitHub 的 API 沒有提供這項資訊),同樣呈現出近乎指數型的成長。
你投入一些心力,卻能得到工作成果加上利息的複利效果。這不是運氣,是努力。這代表你知道自己在做什麼。但同時,有個房間裡的大象不得不面對,那就是這些都只是拍拍背的鼓勵而已。到目前為止,我們一毛錢都沒賺到,而你可能會問的問題是,該如何將這些努力變現。
首先,這算得上是一種付出嗎?
我不知道你怎麼樣,但我平均每天大概花兩到三個小時在開源上:思考開源、建立新專案,還有維護與程式碼審查,所以這真的是一份工作,而且工作量很大,基本上你都是免費在做。
免費做一些事、當作嗜好本身沒有什麼不好,但在這種情況下,你照理說應該是做自己喜歡的事。開源不是這樣;有時候你會有義務,會覺得有責任要去幫忙別人,這是很大的一部分。你是在正職工作之餘做這些,所以真的可能成為一種負擔。如果你到現在還沒體會到,要讓這件事產生價值是很難的,真的很難。我想聊聊幾種為開源建立正當獲利模式的方式。不用說,如果你看過前面的圖表,這大概不該是你一開始就關注的重點,但一旦你到了想獲得一些收入的階段,你有幾個選項。我不想談把開源當作事業的一部分,也不想談大公司與更大規模的支援。我想聚焦在每個人都能做的幾件事上。在 GitHub 上的贊助就是其中之一。在原本的文件之外提供付費的學習教材,例如,你可以做一系列付費影片。像 Mozilla 那樣販售周邊商品。在開源事業之外提供顧問服務。服務與外掛,像是撰寫 ADFS 外掛或高可用性功能,都是針對企業的付費功能的常見例子。
但讓我們從基礎開始。先從第一點,贊助,開始。贊助有兩種類型:第一種是個人捐款。個人贊助就是 GitHub Sponsors 的核心。如果你想靠這種模式賺錢,你得思考漏斗,你得思考如何抓住人們的注意力,以及如何將其變現。一切從產品開始,產品可以是任何東西。接著,你產生關注,這些關注會形成受眾,而這些受眾最終可能會為你的服務付費,這其實就是全部的祕訣。這就是靠任何產品賺錢的方式,而在開源中,如果你想吸引贊助者,你就得打造人們想要的產品。
如果把這套套用到開源,建立專案或許就是建立一個儲存庫,而星星代表受眾的關注。受眾本身則由追蹤者組成(個人追蹤者或公司的追蹤者),而這些追蹤者最終可能會、也可能不會成為贊助者。我知道星星是個很爛的熱門度指標,因為每個人使用星星的方式不同。例如,有些人把它當書籤,之後再回來看專案,有些人則是想感謝開發者付出的大量心力等等,但它仍是一個不錯的初步估算。
現在,想想以下這件事。想想我擁有的星星數、追蹤人數和贊助人數。想想我現在的「漏斗」。我剛說過,我有 25,000 顆星和大約 1,000 位追蹤者,其中只有三位贊助者,所以星星數與贊助者之間的比例是 0.01%。看起來相當慘淡。這意味著你需要大約 8,000 顆星才能吸引到一位贊助者。我曾想:「會不會只是我的問題?」或許前 1,000 名 GitHub 維護者沒有這個問題。結果發現,情況完全一樣。如果你把前 1,000 名 GitHub 維護者拿出來看他們的贊助者,畫面同樣相當慘淡。舉例來說,看中位數,每人有 3,421 位追蹤者,中位數的贊助者卻是零。如果我的數學沒錯,那就是 0%,而如果看平均數,甚至有 5,430 位追蹤者(因為 Linus Torvalds 把這個數字拉高了)。平均每人有 2.8 位贊助者,那是 0.5%,比我的情況好一點,但大致上在同一個範圍。現在想想這個:GitHub 有 4,000 萬名使用者,所以前 1,000 名維護者只占整個社群的 0.0025%。這些維護者在 GitHub 上的收入中位數基本上是零。
光是這一點本身或許還不是最大的問題,但別忘了,GitHub 在 2019 年的營收是 3 億美元。我昨天在 Hacker News 上看到這則留言:
我在 GitHub 上有贊助者,每個月可以爽賺兩美元。扣稅後當然更少,所以我還是得有一份正職工作。
所以這顯然是行不通的。你得想想其他讓開源變現的方式,或者就等到 GitHub Sponsors 變得更普及——看哪個先發生。我想快速提一下的一個方式是 sponsorware 這個概念。這算是個蠻新的概念,有些人還沒聽過。老實說我還蠻喜歡的。一般來說,你建立一個專案,然後保持私有。不過你在 Twitter 或其他任何平台上談論它,你說:「嘿,我正在做這個,但如果你想搶先體驗,就得成為贊助者」,而一旦你達到某個贊助人數或收入門檻,不管是什麼,然後你就把專案公開。我一開始給你們看的那個靠開源賺 10 萬的例子,就是有人這樣做的。他打造產品與服務,談論它們,最後再開放給所有人使用。
這麼做有一些好處:第一,你能從真正相信你理念的人那裡得到早期回饋。第二,你不必一直免費工作,第三,你也可能為專案創造受眾與話題。缺點是,如果你是個硬派的開源或自由軟體信奉者,這違背了你的理念。你希望軟體從一開始就是開放的,沒有任何額外條件。所以你真的得自己做決定。我有試過,我有一個搶先體驗計畫,只分享給贊助者。[我的第一個 sponsorware 是]一個用來取得 GitHub 統計數據的工具。[這場演講中的統計數據]就是用那個工具產生的。我覺得要做到這點,你需要很大的受眾。問題在於,你是否想投入那麼多心力,還是你一開始就想直接開源,再去想其他的獲利模式。不過,我還是覺得這是個非常有趣的概念,未來我們可能會看到更多,所以你現在知道它長什麼樣子,也有個名字可以稱呼它了。
另一個是企業贊助。這是一把雙面刃,因為企業贊助意味著公司給你錢,有時會想要一些回報。他們可能想要額外的支援,或希望某個錯誤被修復,多少會讓你覺得自己好像開始為他們工作了,但儘管如此,這些公司如今確實投入了不少資金到開源中。以兩家大公司為例,Facebook 和 Google 在 Open Collective 這個募款平台上,累計分別投入了 17.7 萬和 84.5 萬美元到開源。這真的很棒。我們需要更多公司這樣做,不過,順帶一提,也算是小小的抱怨,我覺得這些公司做得還遠遠不夠。
Facebook 去年的營收是 700 億美元,Google 則是 1,600 億美元,這可不是什麼丟臉的數字,所以我真的很懷疑這就是他們能做到的極限。當然,Google 例如也捐款給其他專案如 Mozilla,也會舉辦聚會等等。但你真的覺得,如果當年沒有 Python、網頁伺服器或 Linux,當兩個史丹佛學生試圖打造搜尋引擎時,Facebook 和 Google 今天還會存在嗎?有時候我覺得,財星 500 大企業真的不了解他們有多依賴開源,以及有多少人依賴著那少數幾個維護關鍵基礎設施的人。
我認為他們對開源的投入遠遠不夠。很多人以為開源的運作方式像左邊那張圖那樣,有一整間工程師在絞盡腦汁想出打造專案的最佳方式,而現實中,比較像是某個人在深夜修 bug,只因為他相信這件事。大眾的認知可能是錯的,實際上是極少數的人在維護關鍵基礎設施。有時這會導致非常棘手的情況。我的兩位兒時偶像就曾公開談過這件事:Kenneth Reitz 是 Python 的 requests 套件的核心維護者,而 antirez 是鍵值資料庫 Redis 的創造者。一個是前端開發,一個是後端。他們都在談論倦怠,因為大規模成為開源維護者的負擔,很容易、也很快就會導致倦怠。網路從不睡覺。你永遠無法入睡。你總是會收到工單、功能請求、pull request、issue。你永遠有做不完的事,除此之外,你還得處理其他所有責任,所以很快就會倦怠。還有一位我非常尊敬的人,名叫 Mark Pilgrim。他是 Dive Into Python 的作者,曾經上演了一場 410,把網路上關於他的一切全部刪除。甚至有個專有名詞叫 infocide,意思是「資訊自殺」。他對整個生態系感到厭倦,如果你想到 Ruby 社群,你可能會記得《Poignant Guide to Ruby》的作者 _why,他也做了類似的事。聚焦在 antirez 說過的話:「一旦我開始收錢來做 Redis,以我的道德就再也不可能維持過去的模式,所以我開始強迫自己照正常工時工作。對我來說,這好幾年來都是巨大的掙扎。再者,到了這個階段,我確定自己做得比原本能做的還少,但事情就是這樣運作的」,所以感覺他因為被迫接受那種工作時程、也許表現不夠好而感到愧疚。對我來說,這裡面多少有些倦怠的跡象,而這就是開源與金錢那種又愛又恨的關係。如果你接受了錢,它就變成一份工作,但你大多數時間不是在寫程式。你在寫演講稿、審查 pull request、查看 issue、在 StackOverflow 上回答問題、在 Discord 上討論、在 YouTube 或研討會上行銷。當你靠開源變得受歡迎時,感覺就像只能在兩個選項中選一個:一個是憂鬱,另一個是倦怠。如果你的專案沒有成功,你就會突然覺得自己是個失敗者、是個錯誤。它有零顆星;沒人喜歡它。但如果它成功了,每個人都喜歡它,你會被熱情給「抱死」。這真的是個很不幸的處境,而你會想不再被這些責任壓垮。你必須設定清楚的界線,並選擇你要承受哪一種痛苦。如果你接受企業作為贊助者,就必須小心。我想給你們看一個可行的例子,並[指出]一些風險。今年稍早,我開始做一個已經拖延多年的真正專案。
你看,2015 年 12 月,我在 GitHub 上開始整理一份靜態分析工具的清單。靜態分析工具就是幫助你改善程式碼的工具,結果發現這類工具真的很多。光是開始收集它們就是第一步。我當時沒想太多,但久而久之它變得非常受歡迎。你可以看到,這張圖呈現出星星數隨時間近乎線性的成長。2018 年,我開始認真思考,這裡是否不只是一個 GitHub 專案而已。我跟很多人聊過這個想把它做得更大的想法。真的需要另一個人把我推過終點線、說服我這是值得的,那個人就是 Jakub。他說:「何不拿它來做個網站?」於是在大概兩個週末的時間裡,我們就把網站做出來了。它是用 Gatsby 做的,但其實用什麼並不重要。我們就直接做了,然後看看會發生什麼事。我們現在呈現了 500 個工具,最初的回饋非常好。大家似乎真的很喜歡。第一天我們就獲得了 72 萬次請求,接下來一週左右,總數更達到了 150 萬。這很棒,因為突然間人們開始對這個專案感興趣。所以我們開始找到一些贊助者。這些公司很特別,因為它們相信你的理念,但也了解開源是如何運作的。它們並不真的期待你幫它們打廣告。它們想賣東西給開發者,所以想留在開發者的腦海中,說:「嘿!你是開發者。我們打造了一個很棒的工具,你可能會想來看看!」但同時它們也被視為一家友善開源的公司。我覺得這是雙贏。我得說,事情並不總是這麼順利,有時公司會期待你只是提供便宜的廣告版位。一旦發現點擊數沒有那麼多,他們馬上就跳船了,但也有其他公司了解,它們投資的是可能在一兩年後才會回收的東西。所以我真的很感謝有些公司能理解這個理念。然而,公司想要的跟個人想要的不同。公司想要發票。公司想要可以抵稅的東西。公司想要有人能維持運作、能透過電子郵件即時回應,所以你真的會有這些義務,而能幫上忙的一個平台就是 Open Collective。他們有一個針對開源專案的 501c6 計畫,擔任財務代管,這表示他們會處理所有發票事宜,並在名義上成為維護者。如果你身為開源維護者或專案貢獻者,想要[為你的工作獲得報酬],就必須向 Open Collective 寄送發票。
我覺得這是兩全其美的方式。同樣地,因為整個流程非常透明,公司能掌握狀況,也不用處理所有財務上的瑣事。但這也意味著你必須好好打磨你在外界的形象。公司真的很想知道贊助你能得到什麼,而你必須把這點講得非常清楚。或許你最重要的頁面不是你的網站,而是你在 GitHub 上的贊助頁面,你在那裡描述不同的級別以及每個級別代表什麼,所以我們有三個級別:一個是針對小公司與自由工作者。他們能獲得曝光,並被視為友善開源的科技公司。費用是一個月 100 美元。我們有一個中階的公司贊助,或許是規模更大的公司。它們也能獲得徽章,但還會得到一篇關於它們想推廣的靜態分析工具的部落格文章,不過我們會透明地標示這確實是贊助內容。最後,如果你想做到最頂級,就是完整內容創作,可能是影片工作坊,但我們目前還沒有影片工作坊的贊助者,所以還沒辦法談這個。我得說我真的很想試試看,而且以你得到的東西來說真的很便宜。
總之,這些都是你今天就能做的事。不用真的改變你做開源的方式,你就可以把它架設起來,然後看看情況如何。也許沒人有反應,那也沒關係。清單上的其他項目都算是進階的。你需要受眾,所以你應該從那裡開始。
付費學習教材是我們未來要透過影片課程在 analysis tools 上做的事。有些公司像 tailwind 就做得非常出色,所以你可以向他們學習。至於周邊商品,你得先有品牌。所以,這不是我能做的事,但像 Mozilla 或 YouTube 上的 Coding Train 就絕對可以做到。顧問服務永遠是一個選項。不過,那也意味著更多工作,而且可能會讓你遠離真正熱愛的事,所以它真的會變成一份工作。你得想想自己是否想那樣做。企業服務是非常進階的[而且有趣的]選項,或許只適用於那 1% 能在商業環境中運行且有特殊需求的專案。我得說,從最上面開始往下做。先開始建立受眾。在 Twitter 上建立受眾再導流回 GitHub,可能比反過來做還容易。喔,對了,我有說過這很難嗎?我真的不想在低氣壓中收尾。我真的想強調,如果今天重新開始,我還是會再做一次,全部再做一次。我覺得沒有比現在更好的時機來貢獻開源了。或許明天會是更好的時機,因為突然間,有更多人感興趣,建立專案變得容易多了,你有各種免費工具像 VSCode 和 GitHub Actions、免費代管。能在幾乎不花什麼錢的情況下完成這麼多事,真的很驚人。所以你可以試試看。最糟會發生什麼事?沒人在乎?好吧,那樣的話,你就跟我一樣了。但如果你想今天就開始,我有一些建議給你。我的第一個建議是:「做好功課。」很多人從學習開始,然後打造東西,接著把這個循環封閉起來,但這裡缺少了一個關鍵環節。有些人討厭這個詞,但你最終會學會愛上它。它叫做行銷。行銷對不同的人有不同的意義,但對我來說,它的意思是把消息傳出去,因為如果你不做,別人會做,而你是很棒的;你只是得意識到這一點。也許不是每個人馬上就[知道你的專案],所以你真的應該多談談它。也許在研討會上,也許在 Twitter 上,也許你可以直接告訴朋友。也許你可以請人來貢獻、來支持你。不知為何,在社群裡做行銷會有點被看不起,好像你不是玩真的,但我覺得那不是真的。我覺得如果聰明、有耐心且充滿熱情的人來做行銷,世界會變得更好;因為我很確定那些壞傢伙可是有在做行銷的。所以,做好功課,但請放心,成為開源維護者就意味著經營一門生意,而你就是產品。你得思考為什麼有人會想贊助你,因為如果你自己都想不出答案,他們又怎麼會知道。還有,想想漏斗。舉例來說,人們要如何找到你?讓人們找到你的最好方法,或許就是開一個 YouTube 頻道。
不過,還是有比較簡單的方法。
[首先,]你可以隨時去幫忙別的專案,而且你甚至不必是個程式設計師。如果你擅長設計,那我可以告訴你,有超多開源專案需要設計師。多到誇張。或許可以先為一個小專案設計 logo,開始獲得一些能見度。另一個就是保持好玩的心態。如果你知道在開源中賺錢很難,那反而也能讓你感到解放,因為這代表你可以實驗、可以發揮創意,對,玩得開心才是最重要的,我想。
第二,打造你熱愛的東西,因為歸根究柢這是你的空閒時間。有人會發現你的專案的機率本來就很低,所以它最好是你真正感興趣的東西。如果你不再相信它,就直接換下一個吧。如果你放棄一個不再相信的專案,完全沒關係。沒有人會為此追究你的責任,除非他們是混蛋,而你不會想被混蛋包圍。
第三,找到友善的人,因為你真的會和社群一起成長。你會希望有人支持你的專案,甚至最終成為維護者來分擔負擔,而這需要很長時間,有時甚至要好幾年才能找到一位維護者,所以永遠要保持友善,試著站在對方的角度思考。能力所及就多做一點。例如,幫他們把 master 分支重新整合到他們的 pull request 中。就幫他們做吧。如果你不確定,就多說一次謝謝。
第四是建立受眾。
激進的行銷是一種方式,但平易近人、包容開放是另一種方式。你會想成為那個當人們有難題時會去找的人,或是想了解如何踏入開源時會去請教的人。你會想成為那個在他們第一次發 pull request 時伸出援手的人。他們會以千倍回報。迄今為止我遇過最棒的人,都是願意回答問題、而且不求任何回報的人。你會把他們放在心上、非常珍惜。當時機到來時,你會記得這些人。我們會說,像是「這是個超棒的合作對象;我非常推薦他」,這就叫做一個潛在機會。
最後,要做長期的打算。好事需要時間。你看,我花了 10 年。也許你只要五年,甚至更少,但它大概不會是一夜成功。這真的是一項長期投資。
隨機一篇部落格
留言
登入後參與討論