2022年,你還要做開源軟件么?
不平凡的2021已經(jīng)悄悄走遠(yuǎn):依舊蔓延的疫情一直到年末的 Log4j 的重磅炸藥,基本上各個(gè)大廠都在連夜整修系統(tǒng)來填補(bǔ)安全漏洞。Log4j 目前使用在百萬臺(tái)機(jī)器當(dāng)中:它默默的記錄著系統(tǒng)日志,幫助開發(fā)者找到錯(cuò)誤原因,基本上是一個(gè)不可或缺的工具。
可是,作為使用量這么大的包,真正贊助它的只有3個(gè)人。維護(hù)基本上靠社區(qū)同學(xué)加班加點(diǎn)地在業(yè)余時(shí)間完成。你可能會(huì)好奇,既然這么多人用,為什么開源軟件仍舊沒有獲得資金?目前開源環(huán)境的生態(tài)是怎么樣的?從企業(yè)的角度出發(fā)來深度剖析下面兩個(gè)問題:
-
為什么企業(yè)要把程序開源?
-
為什么企業(yè)要繼續(xù)投入開源以及發(fā)展中的困境
企業(yè)中一切軟件的開發(fā)都是以營(yíng)利為根本目標(biāo)進(jìn)行的,無論開源與否。
許多難以理解的行為和結(jié)果,如果從這一點(diǎn)來出發(fā)那么也說的通。
為什么企業(yè)要把程序開源?
第一種原因便是因?yàn)闊o人維護(hù),同時(shí)感覺繼續(xù)投入也沒有太多意義,索性丟出來造福社區(qū)。比如大名鼎鼎的 Hadoop 當(dāng)年也是因?yàn)?bug 太多,做不下去了,索性交給社區(qū)看看有沒有大佬能修一修然后所有人一起用。然后它在一群開發(fā)者手里變成了現(xiàn)代分布式計(jì)算的基底。這樣做的好處是能夠給企業(yè)減少維護(hù)成本,同時(shí)也能夠給公司博得一個(gè)開源創(chuàng)新的好名聲。
第二種原因是為了減少維護(hù)成本。和第一種原因的區(qū)別是企業(yè)并沒有放棄這個(gè)軟件。這類軟件相對(duì)來說開發(fā)比較成熟,在企業(yè)中已被廣泛使用,但是因?yàn)闆]有太多可以開發(fā)的空間,索性讓社區(qū)來維護(hù)一起找 bug。這種也是目前很多公司選擇的模式,但是仍以大廠居多。它可以幫助公司發(fā)展一個(gè)生態(tài)圈,讓更多的開發(fā)者認(rèn)同公司理念,甚至變成一個(gè)信仰。
第三種原因是為了迅速占據(jù)市場(chǎng),利用開源軟件免費(fèi)的優(yōu)勢(shì)來發(fā)展商業(yè)。這一點(diǎn)在大廠和初創(chuàng)公司中都很常見,首先先以免費(fèi)的優(yōu)勢(shì)迅速打入市場(chǎng),擴(kuò)大用戶使用量。在后期以自己的架構(gòu)和平臺(tái)推出收費(fèi)版來幫助用戶減少開發(fā)和維護(hù)成本。這類軟件往往都還在開發(fā)之中,可以同時(shí)發(fā)展社區(qū)以及減少開發(fā)成本實(shí)現(xiàn)雙贏。但是這條路本身不是很好走,因?yàn)槌绦虮旧聿怀墒鞄淼木褪禽^高的學(xué)習(xí)以及開發(fā)成本。如果能夠堅(jiān)持下來做完,可以實(shí)現(xiàn)長(zhǎng)遠(yuǎn)的營(yíng)利。
第四種原因是因?yàn)楸旧黹_源軟件也是服務(wù)于公司的某個(gè)業(yè)務(wù)。推出一份官方的使用套件可以幫助用戶減少開發(fā)成本:通過集成各類軟件和代碼,方便使用的客戶來構(gòu)建自己的業(yè)務(wù)邏輯。嚴(yán)格意義上來說,這不算是真正的開源軟件,盡管代碼全部公開,實(shí)際上還是服務(wù)于公司可以賺錢的一系列服務(wù)。最常見的就是各類教程代碼 repo,以及工具接口 repo。
為什么企業(yè)要繼續(xù)投入開源?
其實(shí)在沒有 github 前,大家做程序一般就是做體驗(yàn)版和收費(fèi)版。比如 WinRAR, 有收費(fèi)版和體驗(yàn)版的區(qū)別。時(shí)至今日,依然有很多軟件選擇了這條路。后面公司發(fā)現(xiàn),如果把軟件開源,大家既能夠使用體驗(yàn)版的內(nèi)容,同時(shí)也可以幫忙一起修 bug。那何樂而不為呢?很多初創(chuàng)公司選擇了這條路,通過開源來不斷完善自己的產(chǎn)品。同時(shí)開發(fā)一條相對(duì)成熟的支線來完善自己的收費(fèi)版本。
很多大廠投入開源的軟件的原因是它可以幫公司賺錢,如果不投入人力在里面,自身的服務(wù)也會(huì)受影響。一個(gè)開源項(xiàng)目,往往很多公司都在積極投入在里面,畢竟是有付費(fèi)用戶在不斷使用的。但是帶來的問題就是,當(dāng)初開源的公司本身并沒有獲得大部分利潤(rùn)。利潤(rùn)都被本身自帶流量的平臺(tái)拿走了。
另一個(gè)做開源軟件的原因是為了能夠?qū)⒂脩粢鞯阶约旱纳鷳B(tài)圈。當(dāng)紅帽宣布自己不再出免費(fèi)的系統(tǒng)版本后,各個(gè)大廠紛紛跳出來說自己也能提供免費(fèi)的版本。這樣做最大的好處是減少用戶日后的遷移成本,同時(shí)自己可以在里面添加有利于自身生態(tài)的組件。比如一個(gè)用戶在使用一個(gè)大廠推出的 Linux OS 很久以后,如果以后考慮上云,肯定會(huì)首選對(duì)這個(gè) Linux 系統(tǒng)支持最好的大廠:因?yàn)樽约簾o需更改任何配置,直接開一個(gè)實(shí)例便可以完成。
在使用 TensorFlow 的時(shí)候,當(dāng)你在運(yùn)行訓(xùn)練和推理任務(wù)時(shí),會(huì)有 log 建議你使用 GCP 中的相關(guān)服務(wù)來實(shí)現(xiàn)加速。比如某些硬件廠商推出自己的開源深度學(xué)習(xí)框架以及系統(tǒng),也是為了讓用戶進(jìn)入自己的生態(tài)圈。這樣通過一系列的操作,讓用戶使用開源軟件的過程中逐步去購(gòu)買對(duì)應(yīng)的收費(fèi)服務(wù)以及產(chǎn)品。
開源的困境
開源永遠(yuǎn)都是一把雙刃劍。開源的好處是能夠擴(kuò)大使用量然后迅速占據(jù)市場(chǎng)。但是它會(huì)讓同行也很快切入市場(chǎng)并取得領(lǐng)導(dǎo)地位。
盡管可以通過一些 License 來限制公司商用的權(quán)利,但是依舊沒有辦法從根本上限制企業(yè)對(duì)于它的使用。如果收費(fèi)版本和開源版本的距離不大,很多小公司往往難以在這個(gè)過程中獲得很大的利潤(rùn)。但是沒法獲得很大利潤(rùn)不代表沒有利潤(rùn),畢竟用戶量多了,會(huì)有一些客戶選擇收費(fèi)版本來減少自己的維護(hù)成本。
其實(shí)本身把一款開源軟件做好做強(qiáng)也是很難的。公司本身可以作為生態(tài)的助推器。其他公司也可以為自己的開源產(chǎn)品投入大量廣告以及宣宣傳,花錢買活動(dòng),做教學(xué)和買 SEO 來吸引人群。甚至也可以嘗試加入一些知名社區(qū)來發(fā)展自己的生態(tài),比如 Apache Software Foundation,通過社區(qū)的知名度和企業(yè)聯(lián)系參與到開發(fā)中。有的同學(xué)可能會(huì)覺得,酒香不怕巷子深,真的厲害的軟件自己應(yīng)該就能火起來,不需要宣傳。
但是現(xiàn)實(shí)情況是,如果沒有一個(gè)群體在后面投入人力和宣傳,一款軟件真的很難進(jìn)入千家萬戶。畢竟沒有哪個(gè)企業(yè)愿意去使用一些沒有龐大用戶群的軟件,甚至都沒有聽說過這個(gè)軟件。
很多優(yōu)秀的開源軟件本卻因?yàn)楦鞣N原因停止在起步階段。例如,投資人信心不足導(dǎo)致的資金鏈斷裂,核心成員離職等都會(huì)擊垮團(tuán)隊(duì)。
在大廠中,如何定義一個(gè)開源軟件的投入其實(shí)很簡(jiǎn)單:如果把賺錢和構(gòu)建企業(yè)生態(tài)圈作為最終目的,那么用量就是核心 KPI。
像 ONNX,如果內(nèi)部使用的客戶量不斷增長(zhǎng),公司就有繼續(xù)維護(hù)它的理由。但是公司往往希望能夠在短時(shí)間的大量投入獲得大量回報(bào),即做出指數(shù)型的增長(zhǎng)。
事實(shí)上,任何事情都會(huì)有一個(gè)學(xué)習(xí)的過程,有的軟件學(xué)習(xí)門檻低,可以快速上手,那么它確實(shí)可以在短時(shí)間成為大家都在使用的軟件。
有的軟件本身作為一個(gè)中間件或者是工具,那么就很難在短時(shí)間內(nèi)積累大量的用戶。但是隨著時(shí)間推移,用戶量的增加會(huì)逐步在潛移默化中加速產(chǎn)品的使用量。這個(gè)過程中另一個(gè)痛點(diǎn)就來了,如何知道有多少用戶使用呢?只能通過來提問題的開發(fā)者來知道都有誰(shuí)在用。但是如果軟件做的太好了也不會(huì)有用戶來提問題。
這種情況下,大廠也沒有辦法做出準(zhǔn)確的判斷,這個(gè)軟件到底是成功還是不成功。當(dāng)然如果算公司內(nèi)部用戶也好,畢竟在公司內(nèi)部還是有一些方法來確認(rèn)是否有人使用的。但是如果公司內(nèi)部的用量并不算在 KPI 里面,其實(shí)開源開發(fā)團(tuán)隊(duì)真的會(huì)過的十分艱難:項(xiàng)目很有可能就切斷經(jīng)費(fèi)了。
目前如同 Log4j 的軟件不在少數(shù),作為開源軟件中的佼佼者,用量大到恐怖,但是鮮有人真的愿意去投入資金來支持項(xiàng)目本身發(fā)展。它們往往本身并不出彩,不能成為獨(dú)當(dāng)一面的一個(gè)服務(wù)或者前端。但是卻被用在了各個(gè)軟件和系統(tǒng)當(dāng)中。很多時(shí)候,都只是這個(gè)軟件的開發(fā)者們以自己的情懷在不斷維護(hù),但是這又能堅(jiān)持多久呢?
之前也有的軟件開發(fā)者發(fā)聲,說做開源產(chǎn)品養(yǎng)不活自己,只能去找工作來養(yǎng)活自己。所幸目前 GitHub 有了打賞機(jī)制,開源開發(fā)者總算還是有一些方式獲得支持和收入。
開源的級(jí)別
開源也是有級(jí)別的,區(qū)別開源級(jí)別最簡(jiǎn)單的方式就是看它的License。
GPL級(jí):GPL 證書是由 GNU 社區(qū)發(fā)起的,屬于目前最為極端的開源。大概的意思就是,用戶可以用這個(gè)軟件,但是用戶自己的軟件也必須開源,而且附帶有此軟件的所有其它軟件也必須一起開源。在這種情況下,基本上大家都得公開代碼。一般的商用軟件往往會(huì)避免涉及到GPL的開源軟件,因?yàn)樘^于極端了。當(dāng)然也出現(xiàn)過偷偷使用后來被發(fā)現(xiàn)舉報(bào)要求公開源代碼的案例。
Apache 2.0級(jí):Apache 2.0是ASF提出的新一代證書,與此級(jí)別類似的還有 BSD,MIT 系列?;径x就是你可以隨便使用,商用也可以,但是要求附帶軟件的證書在你自己發(fā)行的軟件里作為公示。相比于 GPL。Apache 系列證書比較溫和,也是主流開源軟件采用的證書。它也沒有強(qiáng)迫開發(fā)者必須開源自己的代碼。
公司自己的證書級(jí):每個(gè)公司也會(huì)有自己的證書來告知使用者的使用范圍。比如使用時(shí)需付費(fèi)給公司,或者可以學(xué)術(shù)開發(fā)用但不能商用... 這種往往只是公示代碼,但不代表著你可以隨意使用,這種情況需要仔細(xì)去研讀內(nèi)容和條款,確保用戶是以合理合法的方式使用這款軟件。
其他類型證書:當(dāng)開發(fā)者公開了一些圖集、著作、音頻和視頻等內(nèi)容,也會(huì)有對(duì)應(yīng)的證書來限制使用。
尾聲
開源軟件的開發(fā)與拓展往往都意味著大量的投入,無論是金錢還是經(jīng)歷。如果想要做好一款開源產(chǎn)品需要一支有毅力以及能堅(jiān)持下去的團(tuán)隊(duì)。
對(duì)于每一個(gè)開源開發(fā)者來說,這注定是一次不平凡的經(jīng)歷:當(dāng)開發(fā)者看著用戶量從0到1,從1到10,從10到50的過程,內(nèi)心的喜悅自然不用言語(yǔ)。想象下,有客戶于新年到來之際在 GitHub 發(fā)感謝信,感謝你的軟件幫助了他很多。有學(xué)??蒲袌F(tuán)隊(duì)用你的產(chǎn)品做了很多很有意思的研究并分享文章給你。有人用了你的軟件成功的讓自己謀得了一條生路。
拋開各種大環(huán)境因素,這也許是一名開源開發(fā)者愿意無私做下去的源動(dòng)力吧。