So You Want To Earn Money With Open Source

Matthias Endler

所以,你想靠開源賺錢嗎

多年來維護 OSS 軟體,我一歐元都沒賺到,我也以為本來就該如此。去年我終於開始研究如何讓我的專案變現,在這場演講中,我想分享到目前為止所學到的一切。雖然還沒讓我致富(目前還沒!),但我已經透過 analysis-tools.dev 打造了第一個可永續經營的副業專案 ✨。

我會談談這個專案、其他專案,以及我在邁向永續經營的路上所犯的錯誤。

相關連結與資源:

下方為演講的完整逐字稿。(抱歉文字有點多。)


這是我在 2020 年底於亞琛 Web Engineering Meetup 亞琛網頁工程聚會發表的關於靠開源賺錢的演講。主辦單位很樂意讓我在自己的 YouTube 頻道上分享。我基本上是在試著回答這個問題:「為什麼我在 Github 上賺不到 10 萬?」我會談到如何為自己尋找企業贊助,以及讓開源維護走向永續的漫長道路。

你甚至可能根本不想開始。這場演講是獻給那些抱持著「如果要花這麼久才會成功,花這麼多心力在開源上可能不值得」心態的人。現在,這場演講的結果有點沉重。我原本想做一場非常激勵人心的演講,但現實是,這很難,而我所謂的很難,是真的非常非常難。

我只是想把這個重點傳達出來,或許仍能激勵你去嘗試,但首先:為什麼我有資格談這個?我從事開源已經超過 10 年了。這場演講是獻給大約 15 年前的我自己。我在 trivago 工作,這是一家總部位於杜塞道夫的飯店搜尋公司。我的部落格在 endler.dev。跟大家和他們的媽媽一樣,我也有一個 YouTube 頻道,叫做 Hello, Rust!,我非常活躍,每兩年發一部影片。因此,你絕對會想訂閱,才不會錯過任何更新。但今天,我想談的是開源,而我有一個非常精密的大綱,包含兩個重點:我的歷程與營收模式。

讓我們回到 2010 年。那時的世界看起來確實有些不同。

2010 年的 Github
2010 年的 Github

這就是當時的 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 的核心。如果你想靠這種模式賺錢,就必須思考 funnel(漏斗),思考如何吸引人們的注意力並將其變現。起點是一個產品,可以是任何東西。從產品出發,你產生關注,這些關注會形成受眾,而這些受眾最終可能會為你的服務付費,而這其實就是全部的祕訣。這就是靠任何產品賺錢的方式,而在開源中,如果你想吸引贊助者,就要打造一個人們想要的產品。

如果把這套套用到開源,建立專案或許就是一個儲存庫,而星星數代表了受眾的關注度。受眾本身則由追蹤者組成(個人追蹤者或公司的追蹤者),而這些追蹤者最終可能會、也可能不會成為贊助者。現在,我知道星星數是個很糟的熱門度指標,因為不同人使用星星的方式不同。例如,有些人把它當作書籤,之後再回來看專案,有些人則是想藉此感謝開發者付出的諸多努力,等等,但它仍是一個不錯的初步估算。

現在,請思考以下幾點。想想我擁有的星星數、追蹤者數與贊助者數。想想我目前的「漏斗」。我告訴過你,我有 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 上有贊助者,每個月爽賺 2 美元。扣稅後當然更少,所以我還是得有一份正職工作。

所以這顯然是行不通的。你必須思考其他讓開源變現的方式,或者就等到 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 大企業真的不了解他們對開源的依賴有多深,以及有多少人依賴著少數幾位維護我們基礎設施關鍵部分的人。

我認為他們對開源的投資遠遠不夠。許多人以為開源的運作方式就像左圖那樣,有一整間工程師在絞盡腦汁想出打造專案的最佳方式,而現實中,比較像是某個人深夜還在修錯誤,只因為他相信這件事。大眾的認知可能是錯的,實際上只有非常小的一群人在維護關鍵的基礎設施。有時這會導致非常棘手的情況。我的兩位童年偶像就曾公開談論此事:Kenneth Reitz(肯尼斯·瑞茨)是 Python 的 requests 的核心維護者,而 antirez 是鍵值儲存資料庫 Redis 的創造者。所以一位來自前端開發,另一位來自後端。他們都在這裡談論過勞,因為大規模成為開源維護者的負擔,很大程度且非常迅速地就會導致過勞。網路永不入眠。你永遠無法入睡。你總是會收到工單、功能請求、合併請求、議題。你永遠有做不完的事,除此之外,你還得處理其他所有責任,所以很快就會導致過勞。還有一位我也非常敬重的人,他的名字是 Mark Pilgrim(馬克·皮爾格林)。他是 Dive Into Python(《深入 Python》)的作者,他曾經做出 410 操作,把網路上所有關於他的資訊全部刪除。對此其實有個專門術語:infocide(資訊自殺),意指「資訊自殺」。他對整個生態系感到厭倦,如果你想到 Ruby 社群,你可能會記得《Poignant Guide to Ruby》的作者 _why。他也做了類似的事。聚焦於 antirez 所說的話:「一旦我開始收錢來從事 Redis 的工作,我的道德觀就不再允許我維持過去的模式,所以我開始強迫自己按照正常的作息工作。這對我來說,多年來一直是巨大的掙扎。而且,到目前為止,我確信我做得比我能做的還要少,就是因為這樣,但事情就是這樣運作的」,所以感覺他對於或許被迫進入那種工作時程、或許表現得不夠好而感到內疚。對我來說,這多少有些過勞的跡象,而這正是開源與金錢之間那種又愛又恨的關係。如果你接受金錢,它就變成了一份工作,但你大多數時間並不是在寫程式。你在寫演講稿、審查合併請求、查看議題、在 StackOverflow 上回答問題、在 Discord 上討論、在 YouTube 或研討會上行銷。當你靠開源變得受歡迎時,感覺就像只能在兩個選項中擇一:一個是憂鬱,另一個是過勞。如果你的專案沒有成功,你突然會覺得自己是個失敗者、是個錯誤。它有零顆星;沒人喜歡它。但如果它成功了,那麼每個人都喜歡它,而你會被熱情淹沒致死。要處於這種情況真的很不幸,而你會想不再被這些責任壓得喘不過氣。你必須設定明確的界線並做出取捨。如果你接受企業作為贊助者,就必須小心。我想展示一個可行的例子並指出一些風險。今年稍早,我開始投入一個我已經擱置多年的真正專案。

你看,2015 年 12 月,我在 Github 上開始整理一份靜態分析工具的清單。靜態分析工具只是幫助你改善程式碼的工具,結果發現這類工具非常多。光是開始收集它們就是第一步。我當時沒想太多,但隨著時間推移,它變得非常受歡迎。你可以看到這張圖表在星星數上大致呈線性成長。2018 年,我開始認真思考這裡是否不只有一個 Github 專案而已。我和許多人談過我有這個想把它做得更大的想法。真的需要另一個人來推我一把、說服我這是值得的,那個人就是 Jakub(雅庫布)。他說:「為什麼不據此打造一個網站呢?」在大約兩個週末的時間裡,我們就建好了一個網站。它是用 Gatsby 打造的,但那其實不重要。我們就這麼做了,然後看看會發生什麼。我們目前呈現了 500 個工具,而最初的回饋非常好。人們似乎真的很喜歡它。第一天我們就獲得了 72 萬次請求,而在接下來大約一週內,總數更達到了 150 萬次。這很棒,因為突然間人們開始對這個專案感興趣。所以我們開始找到一些贊助者。這些公司很特別,因為他們相信你的使命,但他們也了解開源的運作方式。他們並不真的期待你為他們的工具打廣告。他們想向開發者銷售,所以他們想留在開發者的腦海中,說:「嘿!你是開發者。我們打造了這個超棒的工具,你可能會想試試看!」但他們同時也被視為一家開源公司。我認為這是雙贏。我必須說,事情並不總是這麼順利。有時公司期望你只是提供便宜的廣告版位。然後他們一看到你沒有帶來那麼多點擊,就立刻跳船,但也有其他公司理解他們投資的是也許一兩年後才會回報的東西。所以我真的很感謝有些公司理解這個使命。然而,公司想要的東西和個人想要的不同。公司想要發票。公司想要可以抵稅的項目。公司想要有人能維持運作並透過電子郵件即時回應,所以你確實有那些義務,而有一個能幫上忙的平台就是 Open Collective。他們有一個針對開源專案的 501c6 計畫,擔任 fiscal host(財務代管),這表示他們會處理所有開票事宜並在正式上成為維護者。如果你身為開源維護者或專案貢獻者,想要獲得工作報酬的補償,就必須向 Open Collective 寄送發票。

我認為這是兩全其美。再次強調,因為這是一個非常透明的流程,公司能掌握狀況,也不必處理所有財務上的瑣事。但這也意味著你必須好好打磨你的公開形象。公司真的很想知道贊助你能得到什麼,而你必須把這點說得非常清楚。或許你最重要的頁面不是你的網站,而是你在 Github 上的贊助頁面,你在那裡描述不同的級別以及這些級別的意義,所以我們有三個級別:一個是針對較小的公司與自由接案者。他們只會獲得曝光,並被視為一家對開源友善的科技公司。費用是每月 100 美元。我們有一個中階,企業贊助,也許是規模較大的公司。他們同樣會獲得徽章,但也會獲得一篇關於他們想推廣的靜態分析工具的部落格文章,不過我們會透明地標示這確實是贊助內容。最後,如果你想做到最完整的程度,就選擇完整內容創作,這可能是影片工作坊,但我們目前還沒有影片工作坊的贊助者,所以還無法談論這部分。我必須說我真的很想嘗試看看,而且以你能得到的東西來說,其實很便宜。

總之,這些都是你今天就能做的事。不必真的改變你從事開源的方式,你就可以把它架設起來,然後看看情況如何。也許沒有人回應,那也沒關係。清單上的其他項目都算是進階的。你需要有受眾,所以你應該從那裡開始。

付費學習教材是我們未來要與 analysis-tools 一起做的事,會以影片課程的形式。有像 tailwind 這樣的公司在這方面做得非常出色,所以你可以向他們學習。至於周邊商品,你必須擁有一個品牌。因此,這不是我能做的事,但像 Mozilla 或 YouTube 上的 Coding Train 這樣的單位就絕對可以做到。顧問服務永遠是一個選項。不過,這也會帶來更多工作,而且可能會讓你遠離你真正熱愛的事,所以它真的就變成了一份工作。你必須思考自己是否想這麼做。企業服務則非常進階,對於可能只有 1% 能在商業環境中運行的專案來說才有趣,這些專案有特殊需求。我必須說,要從最上層開始往下做。先開始建立受眾。在 Twitter 上建立受眾再導回 Github,可能比反過來做更容易。喔,對了,我有告訴過你這很難嗎?我真的不想以低潮作結。我真的想強調,如果今天重新開始,我會把這一切再做一次。我認為沒有比今天更好的時機來貢獻開源了。或許明天會是更好的時機,因為突然間有更多人感興趣,架設專案變得容易得多,你擁有所有那些免費工具,像是 VSCode 和 Github Actions、免費託管。僅用很少的錢就能完成這麼多事,真的很驚人。所以你可以試試看。最糟會發生什麼事?沒人在乎?好吧,那樣的話,你就跟我一樣了。但如果你想今天就開始,我有一些建議給你。我的第一個建議是:「做好功課。」許多人從學習開始,然後打造東西,接著完成循環,但這裡缺少了一個關鍵環節。有些人討厭這個詞,但你最終會學會愛上它。它叫做行銷。行銷對不同的人有不同的意義,但對我而言,它意味著把消息傳出去,因為如果你不做,別人也會做,而你很棒;你只是必須意識到這一點。也許不是每個人馬上就知道你的專案,所以你真的應該多談論它。也許在研討會上,也許在 Twitter 上,也許你可以直接告訴朋友。也許你可以請人們貢獻並支持你。在社群中,不知為何如果你做行銷,就會被認為你不是玩真的,但我認為並非如此。我認為如果聰明、有耐心且充滿熱情的人來做行銷,世界會變得更美好;因為我很確定那些壞傢伙也在做行銷。所以要做好功課,但請放心,成為開源維護者就意味著經營一門生意,而你就是產品。你必須思考為什麼有人會想贊助你,因為如果你自己都想不出答案,他們又怎麼會知道。此外,也要思考漏斗。例如,人們將如何找到你?讓人們找到你的最佳方式,或許是開設一個 YouTube 頻道。

不過,也有一些更簡單的方式。

首先,你隨時可以在不同的專案中幫忙,而且你甚至不必是個程式設計師。如果你擅長設計,那我可以告訴你,有非常多開源專案需要設計師。多到不可思議。也許可以從為一個小專案設計標誌開始,並逐漸獲得一些能見度。另一點是保持樂趣。如果你知道在開源中賺錢很難,那反而也能讓人感到解脫,因為這代表你可以實驗、可以發揮創意,對,擁有樂趣才是最重要的,我想。

第二,打造你熱愛的東西,因為到頭來那是你的空閒時間。有人會發現這個專案的機率本來就很低,所以它最好是你真正感興趣的東西。如果你不再相信它,就轉向下一個專案。如果你放棄一個不再相信的專案,也完全沒關係。沒有人會為此追究你的責任,除非他們是混蛋,而你不會想被混蛋包圍。

第三,尋找友善的人,因為你真的會與社群一起成長。你會希望有人支持你的專案,並最終成為維護者來分擔負擔,而這需要很長時間,有時甚至要花數年才能找到一位維護者,所以要永遠保持友善,試著站在對方的角度思考。如果可以,就多做一點。例如,幫他們把主分支重新整合到他們的合併請求中。就幫他們做吧。如果你不確定,就多說一次謝謝。

第四是培養受眾。
激進的行銷是一種方式,但平易近人、包容開放是另一種方式。你會想成為那個當人們有難題時會去求助的人,或是他們想知道如何踏入開源時會去找的人。你會想成為在他們第一次提交合併請求時伸出援手的人。他們會以千倍回報。迄今為止我遇過最令人振奮的人,都是願意回答問題、而且不求任何回報的人。你會把他們深深放在心裡珍惜。當時機來臨,你會記得這些人。我們會說,像是:「這是一個非常棒的合作對象;我非常推薦他」,這就叫做 lead(潛在客戶)。

最後,要為長遠而堅持。好事需要時間。你看,我花了 10 年。也許你只需要 5 年,甚至更少,但很可能不會一夜成功。這真的是一項長期投資。

原文由 Matthias Endler 發布

本文章由 muse-spark-1.2-contributor 進行翻譯