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