前幾天,在朋友圈看到轉來的原發于“界面“關于OpenSSL和開源項目的“隱形戰友”一文。開始覺得不過是炒冷飯,“心臟出血”這個OpenSSL嚴重漏洞,從去年(2014)4月初被公眾知道,到現在已有將近一年了,這件事已經算告一段落。盡管這篇文章充滿了誤解、硬傷和企業宣傳,我也沒太在意。結果,今天看到界面的網站上竟然還在用支付寶給OpenSSL募捐,這就荒唐了。之前有一些朋友說,無論怎么樣,多一些關注總是好的,從現在的結果看,界面的文章造成的壞影響更大,這篇文章扭曲了開源社區的本來狀況,對其他組織和企業也不公平。開源軟件、安全、隱私確實是大部分普通用戶不了解的領域,但記者要寫一篇文章,總應該對歷史有個基本了解。
界面網絡的創始人何力先生,曾經創建了經濟觀察報和第一財經,都是不錯的媒體,再次創業界面,也備受關注。可惜界面這篇文章,給我帶來的失望比較大。更好笑的是,當年羅永浩對戰王自如的時候,羅粉說王自如的公司是雷軍投資的,所以王自如一定是傾向小米的。而今天,界面,這個小米參與投資的媒體,登了一篇錘子的軟文。這兩者之間對比,實在讓人哭笑不得。
我想聊聊開源軟件的模式和OpenSSL存在的問題,以及到底誰在捍衛我們的隱私,這些都是界面的文章弄錯的地方。我也會寫到在“心臟出血“這個漏洞從發現到公布的過程中,驚心動魄和爭分奪秒的故事,這個過程暴露出OpenSSL嚴重的管理問題。
先從開源說起。
1 開源是一種商業模式
界面一文,把OpenSSL描述成沒有捐款就沒法生存的組織,但開源組織并不是這樣,開源和免費一樣,是一種商業模式,他們之間有諸多不同,但有一個基本的相同點,就是都希望盡量多的人免費使用它。大家已經免費使用了很多互聯網服務,對于免費模式應該非常理解,我們從未給Google付款,從未為我們每一次搜索買單。但我們搜索的行為,我們的注意力、數據,都會變成Google的廣告收入。我們每一次使用Google搜索,都是在幫助Google賺錢,盡管沒直接付錢給他們。
開源軟件也是如此。開源軟件的世界是激烈競爭的,任何一個組織,都可以從當前代碼分支一份繼續開發新的版本,這個行為叫做Fork。一個開源組織要想生存下去,最重要的基礎就是普遍被使用,不然很快就會被競爭者替代。一個軟件被普遍被使用之后,就會因此衍生出相關服務,團隊可以通過這些服務獲得比較好的收入,商業模式就成型了。最著名的例子應該算是Red Hat Linux,中文叫做紅帽,他們免費提供Linux發行版,企業可以通過付費訂閱獲得技術支持,他們收入相當不錯,現在已經是一家市值100多億美金的上市公司。
OpenSSL采用的也是同樣的開源和服務收費的方式運轉,OpenSSL基金會的負責人Steve說他們最多一年有將近100萬美金的商業咨詢項目(資金來源是美國國防部和美國國土安全部),這已經是相當不錯的狀況。開源軟件的全職工作人員都不會太多,大部分項目的核心貢獻者同時也都會承擔商業性項目,這是很正常的情況。在開源社區中,像Linux創始人Linus這樣全職為開源項目工作的程序員,反而不是普遍現象,Linus得以這么做,一方面是Linux基金會財力豐厚,另外一方面也是因為Linux衍生項目太多,影響力也太大,Linus本身又是精神領袖,他不得不全職為Linux工作。同時從事商業服務和開源項目,并不是界面那篇文章描述的那么悲情。
再來個例子,最好的開源UNIX操作系統FreeBSD,其核心開發者Poul-Henning Kamp(社區內叫他phk)到今天仍然承擔商業性項目。即使從1994年到現在,他的一直在FreeBSD代碼貢獻的排行榜上排第一,也仍然不是FreeBSD基金會的全職員工,他對自己的描述是“自雇”。phk在自己主頁上公開了最近正在做的一個商業項目,報酬每月3000美金。以OpenSSL的項目規模,有一個全職開發者已經是相當不錯的狀況了。
為什么有這么多人會放棄傳統的賣軟件的方式,轉向免費軟件和開源軟件?除了個人興趣和理想之外,開源軟件是一個成熟可靠的商業模式,這個商業模式有自己的收入方式和生態。界面這篇文章極力制造普通互聯網用戶對于OpenSSL的愧疚感,指責普通用戶從來沒付錢給他們,這是一種道德綁架。任何一個用戶,只要在使用OpenSSL,就是在幫助這個組織獲得市場份額,在競爭中獲得更大優勢,無論有沒有直接捐款給他們,用戶都已經做出了貢獻。
2 為什么OpenSSL之前只能收到很少捐款?——基金會、捐贈和募資
雖然開源組織可以通過商業服務來讓自己生存的不錯,但是一般也都很愿意接受捐款。有足夠的捐款,可以少做一些商業項目,把精力往開源軟件方面傾斜一些,這當然是好事。大部分軟件和IT企業,每年都有不小的一筆錢用來支持開源項目們,同時也爭取自己在開源社區的影響力和發言權,開源組織們每年接受的捐款按照各自項目狀況,都不算少。但為什么一年前,OpenSSL這個項目每年只能收到幾千美金的捐款呢?答案很簡單,因為他們從來沒有搞過募捐活動。
開源組織通常會設立一個注冊為非盈利機構的基金會,通過這個基金會募集資金、組織活動、推廣自己的開源產品,視項目情況給專職或者兼職開發者付報酬,其中募集資金是基金會相當重要的工作。如果經常使用維基百科的用戶,應該會有印象。維基百科每年都有一個固定時段,會在網站上放置非常明顯的籌資通告,設定好本年度預算目標,讓大家捐款。達到數額之后,捐款就停止,不再接受更多。幾乎所有開源組織,都會通過這種方式募集捐贈。
OpenSSL基金會從來沒公開募集過資金,如果沒有捐款目標,沒公開募捐,就很難有成批的捐款進入,畢竟,需要資金的項目實在太多了。對于OpenSSL這種項目,募資相當容易,他們只需公開發一份籌款通知,各大企業的錢就可以立刻到手。當“心臟出血“發生之后,諸多企業驚訝的不是只有一個全職開發者這件事,而是,為什么你們一直沒籌款。OpenSSL從來沒公布過自己的財務狀況,沒有設置過募款目標,這讓人們如何去捐款給他?
更有意思的是,OpenSSL基金會并沒有注冊為非盈利機構,而是一個盈利性企業。捐助OpenSSL的人和企業無法從美國政府獲得減稅。按照他們自己的說法,是他們沒有時間維護一個非盈利組織,這不是個好理由。對于一個開源項目,注冊一個非盈利組織比注冊公司難不了多少,再說,基金會之所以成立,不就是為了去做這些事嗎?盈利性企業已經定義了他們是希望靠商業活動獲得收入,而不是靠捐款生存。捐款給盈利性企業,錢的利用率就會變低很多,按照美國稅法粗算,最多的情況下要多交出30%~40%的稅,是巨大的浪費。這也解釋了為什么美國企業很少捐款給OpenSSL基金會。
不過,就算如此,事情也是在快速好轉的。“心臟出血“事件之后,Linux基金會在極短的時間內就成立了核心基礎架構聯盟(CII, Core Infrastructure Initiative),這個聯盟和以往最大的區別是,他們主動挑選缺乏資金的重要開源項目進行資助,無論對方是否募款,OpenSSL是他們資助的第一個項目。這個聯盟集結了世界各國的科技企業共同出資,其中包括了Google、Amazon、Facebook、思科、富士、惠普、IBM…目前已經有了10多家企業。其中中國企業只有一家,是華為。特別值得一提的是,除了給CII出資,華為也單獨資助了OpenSSL基金會每年5萬美金??上?,界面的文章似乎把華為忘了。參加CII聯盟的企業每年出至少10萬美金,按照2014年的數字,CII每年總共有170萬美金基金可以使用,第一期資金主要用來資助OpenSSL和OpenSSH,資金相當富裕。
上面這些事情都發生在去年5月,也就是“心臟出血“事件之后的一個多月時間里。無論是各大科技企業,還是Linux基金會,他們的行動都非常迅速,這是開源世界的做事方式和效率。到去年5月,OpenSSL的資金問題就算解決了。從這個結果看,之前OpenSSL沒有得到足夠捐款的直接原因就是其基金會失職。
做為對比,再看看去年OpenBSD募款的經歷。OpenBSD是最關注安全的開源Unix操作系統,他們同時也是OpenSSH的維護者(看到SS是不是覺得和加密也有關系?沒錯,這也是一種加密工具,只不過不是給客戶用的,是給服務器管理者和程序員用的),去年的募款目標僅僅是15萬加幣。相比起來,170萬美金實在已經是太多了,如果CII給的錢不夠讓OpenSSL變好,恐怕再多的錢也不會好了。
除了直接捐錢,各大企業支持開源項目的方式還有很多,比如捐獻自己員工的時間。任何一個開源項目中,都有來自各大公司工程師的貢獻,這些公司給自己員工發薪水,他們寫的代碼會回饋給開源項目,比起捐款,這是更直接的支持。比如去年發現“心臟出血”漏洞的工程師,是Google員工,他在上班時間全職對OpenSSL代碼做安全審計,找到了這個Bug。他確實不是OpenSSL基金會的直接雇員,但這份由Google買單的全職勞動成果是貢獻給了OpenSSL項目的,說所有大公司都沒支持過這個項目,未免太不公平。而這種錯誤言論,正是界面文章宣傳的論調,按照這篇文章的說法,一個中國小公司救了全世界互聯網用戶,這是何等荒唐。
說到這里,再說說捐款問題。我非常反對界面渲染的這種捐款情緒,這是利用人們的愧疚捐款。錢是非常寶貴的資源,需要用錢的地方太多了,正確的捐款是在捐款者對項目的充分了解后,基于對其價值觀和方向認同,按照自己的愿望進行長期而小額的固定捐助。在這個過程中,稅務問題也是必須要考慮的,這直接決定了資金利用率,比如美國稅務居民,捐贈給OpenSSL,資金的利用率就很低,而捐款給CII再由他們資助OpenSSL,就可以得到一部分免稅,利用率高了很多,如果是加拿大稅務居民,想對操作系統方面的項目捐款,應該首選OpenBSD,因為它是加拿大注冊的非盈利組織。捐款是一個非常理性的行為,隱藏部分信息,利用人們對開源項目的不了解,煽情,制造愧疚感,這是不可持續的,也是不公平的,這些都是界面的文章和之后的運營所做的事情。
3 OpenSSL的問題和未來
界面的文章中說基層程序員批評他們的代碼“令人作嘔”,實際上,說這句話的人是Theo de Raadt,是OpenBSD項目的創始人,他可不是“基層程序員”,而是操作系統領域最好的計算機科學家之一。OpenBSD開發者們并沒止步于批評,而是立刻決定從當前OpenSSL版本創建一個叫做LibreSSL的獨立項目,從清理OpenSSL的代碼重新開始。他們在第一周就刪除了9萬多行代碼,OpenSSL整個項目只有38萬行,相當于刪減了近1/4的代碼。可見Theo的批評并不是順口胡說。幾年來,OpenSSL出過各種漏洞,在“心臟出血“之后,仍然有隱藏了10年以上的漏洞被發現,很多熟悉這個項目的人看法都是“除了重寫別無辦法”。
OpenBSD有一份文檔說明了他們在清理過程中遇到的問題,去掉其中的技術細節,我把主要觀點列在這里,這些也基本是業內主流看法:
OpenSSL的代碼混亂不堪,難以閱讀。開源軟件一般通過讓更多人看到代碼來發現bug,如果代碼難以閱讀,這個辦法就失效了。
他們使用了大量自己的代碼封裝和編程風格,這些代碼有的有bug,有的不符合現代主流做法。這讓常見的檢測工具沒法應用于他們的項目,更難以發現Bug。
他們的開發者更關心增加功能,而不是維護和修補。
其他開發者提供的修改和貢獻,一般不會被合并到最終代碼里。
很多用戶指出的Bug,包括一些相當嚴重的,公開放在追蹤系統里面長達幾年,沒被修補。
其中存留了大量無用的舊代碼,比如給windows 2000之前的16位系統寫的兼容代碼,仍然包含在最新版本的OpenSSL中。
基于以上原因,OpenBSD認為這個項目已經沒法維護了,必須要重新開始。這就是他們創建一個分支,從清理代碼這種基礎工作開始的原因??梢?,這個項目根本不是錢的問題,而是管理方式和社區文化有問題。比起來其他項目,他們在有一個全職開發者和一個全職基金會主席的情況下還能響應如此緩慢,實在更令人沮喪。順便說一句,做清理代碼這件事的OpenBSD開發者,也不是全職工作,他還在這份文檔前面特別注明了“可以被雇傭”。一年之后的今天,LibreSSL已經基本算可用了,除了清理和改變了原有代碼風格,他們也增加了一些更先進的特性,看起來很有前途。另外,這個項目也很需要捐款,如果更認同他們的做法,可以捐款給他們。
除此之外,OpenSSL公布“心臟出血“漏洞的過程也非常有問題。一般出現嚴重漏洞的流程,是先不對公眾公布,立即通知主流操作系統維護者和相關廠商,讓大家先修改,之后一起發布安全公告和升級。之所以這樣做,是因為如果操作系統不去打補丁,很多普通用戶知道漏洞也沒辦法修補,反而讓黑客們更容易利用這些漏洞。OpenSSL不是這么做的,在Google告知了他們漏洞之后,OpenSSL沒有告知任何一家操作系統廠商,反而奇怪的被幾家主要CDN廠商知道了,也就是說,在不知道哪個環節發生了泄密。之后開源社區中開始有關于這個重大Bug的傳言,直到這個時候,幾大操作系統仍然沒得到正式通知。又過了3天,OpenSSL才告知了Red Hat,當天,參與處理這件事的一位Red Hat員工在一個私密郵件組里面把這個消息分享給了SuSE/Debian/FreeBSD等幾個重要操作系統相關負責人。多虧了他,因為此時OpenSSL仍然表示沒有任何細節提供,這是加州灣區的太平洋時間4月6日晚上,從Red Hat得到具體細節的幾大操作系統,連夜開始忙著打補丁,到這個時候,Red Hat提供的消息是OpenSSL將在9號,也就是3天之后公開這個漏洞。可惜,轉天,4月7日一大早,OpenSSL就直接發布了公告,媒體們知道了,全世界都知道了。如果沒有Red Hat提前放的消息,最后的影響恐怕還會大的多,就算如此,因為時差的原因(Red Hat那位員工在印度),很多在他夜里睡覺之后的郵件沒來得及回復,仍然有很多廠商沒能提前得知細節。關鍵廠商對于如此重大的漏洞比媒體知道消息還晚,近年來恐怕這是第一次。這造成了不少損失,比如加拿大國稅局CRA在漏洞被公開之后發現數據被盜,此時已經來不及打補丁了,所以干脆直接把電子報稅系統關掉了,當時是4月9號,加拿大2014年的報稅截至日期是4月30日,正是電子報稅系統最繁忙的日子,其間的尷尬可想而知。整個過程的時間線,在theage的一篇文章有完整記載,我列在最后,供參考。
針對這個反常的流程,社區中有不少陰謀論的看法,我不轉述這些看法,我只是想說,這是另外一個證據證明OpenSSL有嚴重的管理問題,而不是錢的問題,人們說他們把事情做的一團混亂絕對不是沒理由的指責。
另外,OpenSSL并不是憑空出現的項目,而是繼承了另一個項目SSLeay的代碼。在SSLeay的開發者去RSA公司工作,不能繼續這個開源項目之后,有好幾個項目繼承了它的代碼繼續開發,OpenSSL只是其中比較成功的一個。維基百科上列出了SSL庫的實現,包括OpenSSL,現在還在使用的也有10多個,其中開源的占了將近一半。
這也是我不贊成吹捧OpenSSL的原因,歷史的選擇往往存在偶然,具體到SSL軟件上,就更復雜,這是混合了技術,商業,歷史,政治復雜因素之后的偶然結果。現在OpenSSL暫時有最多的用戶,以后則未必會如此,我相信,早晚會有一個新的替代者出現。
4 誰是真正的人類隱私捍衛者?——電子前線基金會的故事
界面這篇文章認為OpenSSL是人類隱私的捍衛者,事實上,OpenSSL只是同類加密軟件中的一個,他們當不起隱私捍衛者這個頭銜。今天,我們可以不知不覺獲得加密軟件的保護,背后有一些曲折的故事,那是真正的隱私捍衛者的故事。
曾經,加密技術是被美國政府禁止出口的,就像很多武器禁止出口一樣,其他國家的人,想要使用這些加密算法,就像要從美國買導彈一樣,是不可能的。轉機發生在1995年,這一年,加州伯克利大學的研究生Bernstein在一個叫做電子前線基金會的律師幫助下,起訴美國政府。他的主張是自由發表加密算法,屬于言論自由的一部分,從而受美國憲法第一修正案保護,史稱 Bernstein v. United States。這個案子進行了4年,到1999年,美國聯邦第九巡回上訴法院出了判決,依據第一修正案,判決美國政府禁止公開密碼算法違憲。在這之后,各種密碼協議和開源算法才從美國流傳出來,被自由使用。
電子前線基金會EFF(Electronic Frontier Foundation),創建于1990年,是一個法律援助組織,他們的使命是捍衛隱私,自由表達和公民權利。這也是一個基金會,而且是一個完全靠捐款運作的非盈利組織。EFF創始人之一是Lotus公司創始人卡普爾,曾經是和比爾蓋茨齊名的軟件天才。80年代,Lotus是最大的獨立軟件公司,幾年之后微軟才超過它。卡普爾是一個極具前瞻精神的奇才,1990年,卡普爾意識到未來技術、隱私、法律和政治的沖突,自己出資創建了EFF,后來的資助者中還有著名的蘋果聯合創始人沃茲。當時,商業互聯網尚未成型,可見他們前瞻性之強。關于EFF的傳奇故事可以寫很多篇文章,這里我們先說和OpenSSL有關的部分。
曾經瀏覽器的領導者Netscape,于1995年開發了第一個SSL協議。SSLeay也在1995年完成了第一個實現,1998年SSLeay中止開發,由社區接手。直到1999年美國政府敗訴,加密技術終于可以自由流通。這才是人類隱私保護工程的歷史脈絡。在這個復雜的故事里面,OpenSSL是受益者之一,也是整個故事中的一小段,界面的文章把OpenSSL開發者捧為人類隱私的捍衛者,不僅過譽,而且顯得非常無知。
EFF及其創始人卡普爾,是真正的理想主義者,他們沒有商業收入,自己掏錢,做這一件事做了25年之久,通過一個又一個的訴訟案和對隱私相關案件的法律援助,他們成功推動了社會進步。這才是互聯網時代真正的隱私的捍衛者。
5 媒體的責任
有朋友說,寫寫文章,讓大家捐點錢,怎么也不會有害,不應該被批評。我不這么認為。媒體傳播是可以影響人群選擇的。這在開源領域有先例,比如,BSD是最正宗的UNIX繼承者,但曾經的一場訴訟,讓BSD應用廣泛程度至今不及Linux,媒體在這個過程中起了相當重要的作用。直到今天,談起開源軟件,媒體都更關注Linux,質量更可靠的BSD缺少關注,從而影響了人們的選擇。界面文章中說“如果一個開源項目在商業世界獲得了成功,那決不會是出于僥幸,決不會是因為其它競爭者恰好被規章制度所累、被知識產權法約束“,BSD的歷史正好是一個反例。(“決不會“ 此處錯字為界面原文引用)
所以,界面這篇文章的影響是很負面的。我在前面指出了不少他們在整體認知上的錯誤,其他的小錯和不合理之處更是多的說不完。比如,界面的文章說"有了錘子科技的那筆捐款"OpenSSL的開發者在德國Linux會議期間才終于有機會見了一次面。文章中有一張OpenSSL開發者的合影和人名,就算這些人你之前完全不知道,現在立刻Google一下就知道,這些人里面有Debian開發者,也有Google全職員工,這些人都不是OpenSSL付薪的,就憑這張照片,說大企業一分錢沒出過也實在說不過去。再說OpenSSL開發者大部分在英國和歐洲,從倫敦飛德國法蘭克福,往返機票也就300美元,硬要說這些有工作,有正常收入的工程師連300美金機票都要等這筆捐款,未免太過夸張。
我想問問界面編輯部,你們認為這篇文章到底是不是軟文。如果作者是在寫付費軟文,那么是職業道德問題,如果沒收費,而是作者出于對羅永浩的崇拜寫了一篇軟文,那么是公器私用,也是職業道德問題,如果作者沒收費又不是公器私用,仍然寫出了一篇如此軟,錯誤如此多的文章,那不僅僅是職業道德問題,還是能力問題。界面網絡的編審流程看起來也不那么靠譜,讓這么一篇文章發表出來,還四處推廣,恐怕編審團隊沒做什么背景調查,甚至都沒去搜索點相關文章讀讀。另外,整篇文章連一個觀點相反的平衡意見都沒有,完全是單方面的觀點闡述,這也違背了平衡報道準則。一篇好的報道,應該兼顧各方意見,給讀者展示各種觀點,提供多方面信息,界面沒能做到這一點。
互聯網的安全,不取決于一個特定的軟件,即使這個軟件是用來加密的。發現“心臟出血“漏洞的Google員工Mehta說過,libjpeg如果出問題,可能會有極大影響。libjpeg用來生成和顯示大部分網站和軟件的圖片,被普通人用到的范圍比OpenSSL更廣,威脅也會更嚴重。當人們被媒體把關注轉向OpenSSL上時,大量更重要的問題就會缺少關注。希望能有更多人關注更多的基礎項目,而不是和汶川地震一樣,盯著看各大企業誰給OpenSSL捐款更多。一年了,炒作也應該結束了。
界面的這篇文章對華為、諾基亞,Google這樣出錢出力,沒自我炒作的廠商不公平,對于其他開源組織也不公平。界面是一家有正規編審流程的機構,嚴謹程度還不如我這種完全靠個人愛好寫作的非專業人員,雖然不嚴謹,但他們的煽情技巧確實是出色而專業的,這篇文章被很多人稱為精彩,這令人失望,也非常遺憾.