開(kāi)發(fā)了世界上最流行的軟件,開(kāi)源太可怕了...
瑞典程序員丹尼爾花了28年時(shí)間,開(kāi)發(fā)了世界上最流行的軟件:cURL。
cURL提供了一個(gè)庫(kù)(liburl)和一個(gè)命令行工具,讓大家可以輕松地來(lái)傳輸數(shù)據(jù)。
它支持幾乎所有的傳輸協(xié)議,除了最知名的HTTP、HTTPS之外,還支持 FTP, FTPS, Gopher IMAP, Kerberos, LDAP, MQTT, POP3, RTSP, SCP, SMTP, SMB。
可以說(shuō),在數(shù)據(jù)傳輸領(lǐng)域,只有你想不到,沒(méi)有它做不到。
正是由于這個(gè)特點(diǎn),它被廣泛地安裝在這些設(shè)備和軟件中:
Linux、Windows、iOS、Android、MacOS 等主流操作系統(tǒng)。
Nintendo Switch, Xbox and Sony PS5等游戲機(jī)。
圖片
幾乎所有現(xiàn)有的物聯(lián)網(wǎng)設(shè)備如智能廚房和醫(yī)療設(shè)備、打印機(jī)、智能手表、智能汽車(chē)。
圖片
丹尼爾自己估計(jì),curl以及l(fā)iburl被安裝于全球超過(guò)200億臺(tái)設(shè)備中!
圖片
但是,開(kāi)發(fā)了世界上最流行的軟件,丹尼爾卻收到了死亡威脅:
圖片
這是怎么回事呢?
2024年,在FOSDEM會(huì)議上,丹尼爾講述了cURL的發(fā)展歷程,在過(guò)去的28年里,他是如何把一個(gè)不起眼的小工具,打磨成世界上最流行的軟件的,中間的酸甜苦辣,投入與堅(jiān)持,非常值得一看。
1從小項(xiàng)目開(kāi)始
cURL也是從一個(gè)不知名的小項(xiàng)目開(kāi)始的。
圖片
在最早的時(shí)候,丹尼爾就是想從一個(gè)網(wǎng)站上自動(dòng)下載匯率數(shù)據(jù),像大家一樣,他一開(kāi)始先在網(wǎng)上找了一個(gè)開(kāi)源的項(xiàng)目叫httpget,用得不亦樂(lè)乎。
但和大多數(shù)人不同的是,他后來(lái)成為了httpget的維護(hù)者,開(kāi)始進(jìn)一步擴(kuò)展功能,增加了對(duì)Gopher和FTP的支持。
這時(shí)候再叫做httpget已經(jīng)不合適了,丹尼爾把它改名為cURL。
1998年,軟件僅有300次下載,但丹尼爾覺(jué)得這已經(jīng)很酷了,因?yàn)檫@已經(jīng)比自己的朋友數(shù)多多了!
圖片
丹尼爾沒(méi)有什么野心,他覺(jué)得2年有300用戶,那再過(guò)20年,豈不就有3000個(gè)用戶了?
(這不由得讓我想起了我剛寫(xiě)公眾號(hào)的時(shí)候,我當(dāng)時(shí)想,一年內(nèi)有一萬(wàn)粉絲就行,沒(méi)想到后來(lái)一年就達(dá)到了10萬(wàn)。)
2堅(jiān)持和努力
很少有項(xiàng)目能立刻取得成功,這世界上不缺開(kāi)源軟件,不缺好創(chuàng)意,市面上有成千上萬(wàn)的同類(lèi)型軟件,你有什么特殊的?成功的憑什么是你呢?
圖片
當(dāng)cURL獲得巨大成功后,很多人問(wèn)丹尼爾究竟做了什么,丹尼爾說(shuō):我投入了更多的時(shí)間。
每個(gè)人都有自己的家庭和生活,在開(kāi)源軟件上投入了更多時(shí)間,那勢(shì)必要減少其他方面的時(shí)間。
比如丹尼爾從來(lái)不玩兒電腦游戲,他把節(jié)省的時(shí)間都花在了cURL上。
在cURL還不出名的時(shí)候,大部分時(shí)間只有丹尼爾一個(gè)人在默默地開(kāi)發(fā),如同在黑夜中獨(dú)自走路一樣,孤獨(dú)不可避免。
圖片
為了“增加人氣”,他甚至假裝其他用戶,對(duì)自己的項(xiàng)目做pull request,期待有其他用戶來(lái)評(píng)論,但大部分時(shí)間都無(wú)人問(wèn)津,丹尼爾也只好默默合并請(qǐng)求,然后繼續(xù)前進(jìn)。
(這有點(diǎn)兒像早期的QQ,馬化騰假扮美女陪人聊天)
開(kāi)源軟件開(kāi)發(fā)沒(méi)什么靈丹妙藥,你要做的就是忍受孤獨(dú),努力工作。
3安全和責(zé)任
任何軟件都有漏洞,尤其對(duì)一個(gè)安裝量達(dá)到200億次的軟件來(lái)說(shuō),出現(xiàn)了安全漏洞可能對(duì)用戶造成非常糟糕的影響。
丹尼爾說(shuō)嚴(yán)重的漏洞出現(xiàn)時(shí),他晚上都難以入睡,但是沒(méi)有辦法,這是屬于自己的軟件,自己必須承擔(dān)責(zé)任。
圖片
每個(gè)人都會(huì)犯錯(cuò),但是如何應(yīng)對(duì)這些錯(cuò)誤是最重要的事情,丹尼爾能做的事情就是:
(1)編寫(xiě)可讀的代碼
(2)編寫(xiě)良好的文檔
(3)進(jìn)行大量的測(cè)試
(4)用各種工具進(jìn)行代碼分析
(5)模糊測(cè)試
(6)漏洞賞金 :用真金白銀對(duì)漏洞發(fā)現(xiàn)者進(jìn)行獎(jiǎng)勵(lì)
4人比代碼更難
圖片
寫(xiě)代碼很容易,你可以隨意修改,調(diào)試,換個(gè)算法重寫(xiě)。
但是和人打交道那真是一件極具挑戰(zhàn)的難事兒,在開(kāi)源中工作的時(shí)間越長(zhǎng),你遇到的挑戰(zhàn)就越大。
林子大了,什么鳥(niǎo)都有。
他們會(huì)說(shuō)你選擇了錯(cuò)誤的編程語(yǔ)言(無(wú)論哪種語(yǔ)言都可能是錯(cuò)誤的),選擇了錯(cuò)誤的技術(shù)(太老太笨太爛),無(wú)法解決他們的問(wèn)題(即使cURL根本不是為他的問(wèn)題設(shè)計(jì)的,或者他還不了解如何有效使用cURL)。
只要有讓他不滿意、不同意的地方,他們就會(huì)以咄咄逼人的方式進(jìn)行挑戰(zhàn)。
為了能維護(hù)一個(gè)友好的合作氛圍,丹尼爾在回復(fù)時(shí)比較小心,努力用一種平和的語(yǔ)氣,保持友好和禮貌。
“當(dāng)你回復(fù)時(shí),做個(gè)深呼吸,如果仍然感覺(jué)不安,暫時(shí)不要回復(fù)?!?/p>
開(kāi)源就是這樣,只要一切正常,不會(huì)有人說(shuō)一句夸獎(jiǎng)的話。
一旦出現(xiàn)一個(gè)小錯(cuò)誤,特別是比較愚蠢的Bug出現(xiàn)時(shí),馬上就有人瘋狂抱怨。
作為一名開(kāi)源項(xiàng)目維護(hù)者,你必須變得堅(jiān)強(qiáng),才能忍受相當(dāng)多的批評(píng)。
絕大部分人都是使用者,而非貢獻(xiàn)者,cURL有200億次安裝,但是只有1240名貢獻(xiàn)者,并且很多貢獻(xiàn)者都是修改一個(gè)注釋中的拼寫(xiě)錯(cuò)誤,提交以后再也不來(lái)了。
但是也有一些驚喜,一些開(kāi)發(fā)者突然出現(xiàn),帶著一個(gè)驚人的補(bǔ)丁,這個(gè)補(bǔ)丁的背后是他對(duì)cURL架構(gòu)和代碼的完整而精確的理解,這實(shí)在太酷了。
5有趣/可怕的事情
丹尼爾把自己的郵件地址留到了Copyright頁(yè)面:
圖片
讓人沒(méi)有想到的是,由于cURL用途極其廣泛,被用到了各種設(shè)備和軟件當(dāng)中,當(dāng)用戶在使用這些設(shè)備和軟件出問(wèn)題的時(shí)候,病急亂投醫(yī),翻到了cURL的 Copyright,看到了丹尼爾的郵件地址,立刻當(dāng)成了救命稻草,各種奇葩的事情就發(fā)生了。
圖片
圖片
圖片
看到這些讓人苦笑不得的求救,丹尼爾也大為感慨:Cool,沒(méi)想到到cURL還用在Instagram,Spotify,寶馬,卡羅拉中.....
cURL如此有用,也會(huì)被黑客利用來(lái)進(jìn)行攻擊,一些受害者會(huì)找到cURL的蹤跡,就會(huì)向無(wú)辜的丹尼爾發(fā)出威脅。
最瘋狂的一次,有人竟然要?dú)⒘怂?/p>
圖片
這個(gè)人被黑客攻擊,丟掉了價(jià)值數(shù)百萬(wàn)美元的項(xiàng)目,把怨氣撒到了丹尼爾的頭上。
丹尼爾感覺(jué)到了真正的威脅,只好報(bào)警.
幾個(gè)月后,這個(gè)人才意識(shí)到了自己的錯(cuò)誤,給丹尼爾發(fā)信道歉。
6總結(jié)
丹尼爾認(rèn)為自己并不是天才,他只是想開(kāi)發(fā)一個(gè)互聯(lián)網(wǎng)數(shù)據(jù)傳輸工具。
他在cURL上投入了大量的時(shí)間,打磨功能,建立社區(qū),吸引用戶,經(jīng)常長(zhǎng)期的努力達(dá)到了如今的成就。
圖片
我們很容易想到一個(gè)問(wèn)題,一個(gè)人怎么可能“辛辛苦苦”在一個(gè)項(xiàng)目上做了28年呢?
答案非常簡(jiǎn)單,丹尼爾多次強(qiáng)調(diào):Have Fun
Linux之父也告訴我們:Just for Fun
是的,一切源于興趣。
參考資料
丹尼爾的演講:https://archive.fosdem.org/2024/schedule/event/fosdem-2024-1931-you-too-could-have-made-curl-/