全世界下載量超100億,curl怎樣成爲影響世界的開源項目?

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文最初發佈於DANIEL STENBERG的個人博客,遵循"},{"type":"link","attrs":{"href":"https:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"CC BY-SA 4.0許可"}]},{"type":"text","text":",由InfoQ中文站翻譯並分享。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"作爲當今用途最廣的開源項目之一,curl在全世界有超過100億的安裝。從紅帽Linux、Debian再到Mac OS、Windows 10、iOS和Android,甚至包括任天堂Switch、Xbox和索尼PS5以及電腦遊戲、媒體播放器和機頂盒等,都不乏curl的身影。本文作者回顧了curl過去23年的發展歷程,揭示了一個小型開源項目怎樣保持生命力,發展成一個影響世界的存在。"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"curl的官方生日是1998年3月20日,這一天,第一個可構建出工具名爲curl的tar包發佈。之所以將其命名爲curl 4.0,因爲我保留了之前那個名字的版本號。準確的說,它是從3.12的基礎上過來的,而3.12是是舊名urlget的最後一個版本。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/b1\/b11bdd2cad7f1677a17f47a58e036867.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然,curl並非那天憑空產生的。其歷史可追溯到一年多以前:1996年11月11日發佈的名爲httpget的工具。它由Rafael Sagula開發,我發現這個項目並開始做貢獻。httpget 0.1是一個不到300行代碼的C文件。(對於這個項目,我現在擁有最早的源代碼是httpget 1.3,可以在"},{"type":"link","attrs":{"href":"http:\/\/curl.se\/download\/archeology\/httpget-1.3.c?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"這裏"}]},{"type":"text","text":"找到)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"之所以關注這個項目,是因爲我想有一個小工具可以定期從網站上下載貨幣匯率,這樣我就能在我的IRC bot貨幣兌換中提供它們。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當時迅速做出的那些小決定,後來在很大程度上影響和塑造了我的生活。從那以後,curl一直是我的主要愛好之一——當然,從幾年前開始,它成了我的全職工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"就在1996年11月的同一天,"},{"type":"link","attrs":{"href":"https:\/\/ftp.sunet.se\/mirror\/archive\/ftp.sunet.se\/pub\/www\/utilities\/wget\/old-versions\/?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"Wget的第一個版本"}]},{"type":"text","text":"發佈(1.4.0)。在發佈前,這個項目也以另一個名字存在——回想起來,我都不知道它,我使用httpget來完成任務。也可能我發現它了,然後因爲它太小又忽略了它。Wget 1.4.0的tar包只有171 KB。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不久後,我承擔起httpget維護者一職,並進一步擴展它的功能。後來,我添加了Gopher和FTP支持,並將其重命名爲urlget(這是由於我發現貨幣匯率也託管在這些服務器上)。1998年春天,我還添加了對FTP上傳的支持,這個工具的名稱又一次產生誤導性,我需要重新給它命名。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"起名真的很難。我想要一個經典Unix風格的簡短名字。我沒有花太多時間,因爲我很快就想到了一個有趣的詞。該工具作用在URL上,而且是一個互聯網客戶端工具。' c '(客戶端)和URL使' cURL '看起來非常貼切有趣,而且簡短,還非常“unixy”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那時,我就已經希望curl成爲Unix中使用管道和標準輸出這一傳統的一部分。我希望curl的工作方式像cat命令,但是針對URL,在默認情況下,它會將URL發送到終端的stdout。就像cat一樣。然後,我們就可以“看到”該URL的內容。字母C的發音是see,所以可以讀作“see URL”。我喜歡雙關語,這樣就很好了。(但我還是會把它讀成“kurl”!)"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/af\/affb916bbbb25492dc9ddf91dad909a0.jpeg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"這是最初的Logo,由Henrik Hellerstedt在1998年創建"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我打包了curl 4.0,並在那個週五進行發佈。那時,它有2200行代碼。在我幾個月後發佈的curl 4.8版本中,感謝文件中提到7位貢獻者。我們花了將近7年的時間纔將貢獻者發展到100位。現如今,該文件列出了超過2300個名字,每年還要增加幾百個。這不是一個人的項目!"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"沒有什麼特別的事情發生"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"curl並沒有取得巨大的成功。一些人發現了它,在第一個版本發佈14天后,我上傳了4.1版本,其中有一些Bug修復,一個延續幾十年的傳統開始了:不斷髮布更新,修復Bug。“儘早且經常發佈”是我們一直堅持的口號。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1998年年底,當發佈超過15個版本時,我們在網站上發佈了這樣一段精彩的聲明:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/29\/29c137b4e90ebefea71f3d7c0bfdf359.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"curl網站1998年12月的截圖"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"下載量300!"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於這個項目和工具,我從來沒有任何征服世界的想法或宏大願景。我只是希望它能有效、快速、可靠地進行互聯網傳輸,這就是我正在努力實現的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了更好地向世人提供良好的互聯網傳輸體驗,我們引入了libcurl庫,它在2000年夏天首次發佈,使項目躍升了一個層次。隨着時間的推移,libcurl已經發展成爲事實上的互聯網傳輸API。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"今天,在它23歲生日之際,這仍然是curl的重點,也是我在這裏所做的。我相信,如果curl取得了一定程度的成功,那主要是因爲一個特殊的品質。一個詞:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/50\/5036a2919782a81f67d4d4d359395338.jpeg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"堅持"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們堅持、忍耐,不斷打磨。我們在這裏是爲了長遠利益。我花了2年時間,它才達到300次下載量。又過了10年左右,它才真正被廣泛使用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2008年,curl網站每月的下載數據量約爲100GB。這個月,它的下載數據量爲15600GB——有趣的是,156個月的時間裏數據量增加了156倍!當然,大多數用戶不會從我們的網站上下載任何東西,他們是從他們的發行版或操作系統提供商那裏獲得curl。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"curl在1998年底被紅帽Linux採用,在1999年5月成爲Debian的一個軟件包,2001年8月,Mac OS X 10.1也提供了這個工具。如今,Windows 10、iOS和Android設備也默認安裝了這款軟件。不用說還有遊戲機,包括任天堂Switch、Xbox和索尼PS5。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有趣的是,兩大主流的移動操作系統都在使用libcurl,但它們並沒有提供API,所以很多應用程序,包括很多非常大的應用程序都捆綁了自己的libcurl構建,包括YouTube、Skype、Instagram、Spotif、谷歌Photos、Netflix等。這意味着,如今大多數智能手機用戶的手機中都有許多不同的curl安裝。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,libcurl還被許多電腦遊戲所使用:《俠盜飛車5》、《堡壘之夜》、《絕地求生》、《荒野大鏢客:救贖2》等等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"libcurl還被用在了媒體播放器和機頂盒中,如Roku、Apple TV。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"curl和libcurl在幾乎所有的互聯網服務器上都可以使用,並且是PHP默認的傳輸引擎,而在全球近20億個網站中,有近80%使用了PHP。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"汽車現在已經聯網了。如今,libcurl幾乎被用於每一輛"},{"type":"link","attrs":{"href":"https:\/\/daniel.haxx.se\/blog\/2018\/08\/12\/a-hundred-million-cars-run-curl\/?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"現代汽車"}]},{"type":"text","text":"之間的數據傳輸。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然後還有媒體播放器、廚房和醫療設備、打印機、智能手錶和許多“智能”的物聯網的東西。實際上,幾乎所有的連接互聯網的設備都在運行curl。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果我說,curl在全世界超過100億個裝置中存在時,我並沒有誇大其詞。"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/85\/8552a4d04ae2c9c35d810add20900cec.jpeg","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"孤獨的強者"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在過去幾年裏,我嘗試了幾次,看看curl是否可以加入一個管理組織,但沒有一個人接受我們,我認爲這是最好的結果。我們是完全獨立的,獨立於任何組織和公司。我們想怎麼做就怎麼做,不用按別人的規矩來。在過去的幾年裏,"},{"type":"link","attrs":{"href":"https:\/\/curl.se\/sponsors.html?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"贊助"}]},{"type":"text","text":"和捐贈的速度確實加快了,我們的狀況很好,可以爲Bug Bounty計劃提供豐厚的獎勵。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我相信,我和wolfSSL合作提供的"},{"type":"link","attrs":{"href":"https:\/\/curl.se\/support.html?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"curl商業支持"}]},{"type":"text","text":"只會讓curl變得更強大:它讓我可以花更多的時間在curl上,讓更多的公司覺得使用curl更有保障,最終讓我們所有人都受益。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1996年底的"},{"type":"text","marks":[{"type":"strong"}],"text":"300"},{"type":"text","text":"行代碼到2021年3月已經增長到"},{"type":"text","marks":[{"type":"strong"}],"text":"17.2"},{"type":"text","text":"萬行。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"未來展望"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們最重要的工作是“不要惹是生非”。在儘可能多的平臺上提供你能找到的最好、最可靠的互聯網傳輸庫。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但爲了保持吸引力,我們也需要與時俱進,適應新出現的協議和使用習慣。支持新的協議版本,支持更好的做事方式,並隨着時間的推移,以負責任的方式棄用不好的東西,同時避免對用戶造成傷害。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我認爲,在短期內,我們希望"},{"type":"link","attrs":{"href":"https:\/\/http3-explained.haxx.se\/?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"確保HTTP\/3能夠正常工作"}]},{"type":"text","text":",讓"},{"type":"link","attrs":{"href":"https:\/\/daniel.haxx.se\/blog\/2020\/10\/09\/rust-in-curl-with-hyper\/?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"Hyper後端"}]},{"type":"text","text":"變得非常出色,看看"},{"type":"link","attrs":{"href":"https:\/\/daniel.haxx.se\/blog\/2021\/02\/09\/curl-supports-rustls\/?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"rustls後端"}]},{"type":"text","text":"會如何發展。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"23年過去了,我們還是沒有任何宏大的願景或路線圖作爲指導。我們以互聯網和用戶爲引領。不斷向前,不斷攀登!"}]},{"type":"image","attrs":{"src":"https:\/\/static001.geekbang.org\/infoq\/fb\/fb24e617cd30988ef0a303a358281ab1.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","text":"curl 路線圖"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"關於23歲的curl,有這樣23個數值"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這個生日的前幾天,我用"},{"type":"link","attrs":{"href":"https:\/\/twitter.com\/hashtag\/curl23?fileGuid=VTYjN8XNNQsJxEFc","title":"","type":null},"content":[{"type":"text","text":"#curl23"}]},{"type":"text","text":"標籤發佈了該項目的23個“curl數值”。以下是這23個數字和事實:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"代碼從1998年3月的2200行增長到2021年的17萬行;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"14個不同的TLS庫獲得了curl的支持;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"2348名貢獻者讓curl成了今天的樣子;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","text":"至今已經發布了197個版本;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":5,"align":null,"origin":null},"content":[{"type":"text","text":"有6787項Bug修復記錄在案;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":6,"align":null,"origin":null},"content":[{"type":"text","text":"全世界100億安裝,讓curl成爲全世界使用最廣泛的分發;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":7,"align":null,"origin":null},"content":[{"type":"text","text":"有871名提交者提供過代碼;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":8,"align":null,"origin":null},"content":[{"type":"text","text":"curl docker官方鏡像拉取數爲9.35億(每秒83次拉取);"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":9,"align":null,"origin":null},"content":[{"type":"text","text":"至少有22個汽車品牌在它們的車輛中運行curl;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":10,"align":null,"origin":null},"content":[{"type":"text","text":"每次提交和拉取請求都要運行100個CI作業;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":11,"align":null,"origin":null},"content":[{"type":"text","text":"Daniel已經在這個項目上花了15000個小時的業務時間;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":12,"align":null,"origin":null},"content":[{"type":"text","text":"前2大移動操作系統都在它們設備的操作系統中使用了curl;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":13,"align":null,"origin":null},"content":[{"type":"text","text":"已知有86種不同的操作系統在運行curl;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":14,"align":null,"origin":null},"content":[{"type":"text","text":"2.5億臺電視在運行curl;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":15,"align":null,"origin":null},"content":[{"type":"text","text":"curl支持26種不同的傳輸協議;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":16,"align":null,"origin":null},"content":[{"type":"text","text":"有36種不同的第三方庫可以根據需要構建,供curl使用;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":17,"align":null,"origin":null},"content":[{"type":"text","text":"有22種不同的CPU體系結構運行curl;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":18,"align":null,"origin":null},"content":[{"type":"text","text":"已爲Bug Bounty支付了4400美元;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":19,"align":null,"origin":null},"content":[{"type":"text","text":"curl有240個命令行選項;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":20,"align":null,"origin":null},"content":[{"type":"text","text":"curl網站每月有15600GB的數據下載量;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":21,"align":null,"origin":null},"content":[{"type":"text","text":"有60種libcurl綁定,讓程序員可以使用任何語言輕鬆地傳輸數據;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":22,"align":null,"origin":null},"content":[{"type":"text","text":"與curl操作相關的RFC總計有1327449個單詞;"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":23,"align":null,"origin":null},"content":[{"type":"text","text":"一位創始人兼首席開發者一直留在這個項目中。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/daniel.haxx.se\/blog\/2021\/03\/20\/curl-is-23-years-old-today\/?fileGuid=VTYjN8XNNQsJxEFc"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章