關注開源的人一定對《大教堂與集市》非常熟悉,隨著這本書的中文版在國內發行,譯者衛劍釩逐漸被更多的人熟知,而今,開源圈的朋友們親切地稱他衛Sir。書中,原作Eric S. Raymond用許多抽象概念為大家講述了開源運動的理論與實際應用。這些“晦澀難懂”的英文也給衛劍釩的翻譯工作帶來諸多挑戰,但他一直信奉一句格言“麻煩的事中藏著珍寶”。歷經無數個週末斟酌字句“較真”地翻譯,他終於將《大教堂與集市》中文版完整、準確地展現給讀者,使許多中國熱愛開源的人跨越語言隔閡,領略到這本被稱為開源運動“聖經”的風采。
作為網路安全專家的衛劍釩因為工作性質並沒有機會過多參與到開源專案中,但他化身為“衛Sir”在個人的部落格和公眾號上為大家用“人話”來解讀諸多開源中抽象、“不明覺厲”的元素,例如開源理念,開源許可證,熱點開源事件等等…宛若一位世外高人。許多讀者在看完他的文章後對開源有了更接地氣的瞭解。
古人云:“當局者迷,旁觀者清”,本期《開源訪談錄》邀請到《大教堂與集市》譯者、資訊保安專家衛劍釩來分享他從一位“開源觀察者”的角度對開源協議、開源安全性以及開源發展的見解。
“麻煩的事中藏著珍寶”
CSDN:你曾將開源著作《大教堂與集市》翻譯成中文,也時常將晦澀難懂的開源協議解讀給大家聽,這兩件事不是易事,從你個人的成長經歷來看,為什麼會堅持做這類事情?
衛Sir:這兩件事有它的相通之處,都有翻譯的性質,而且都有難度。如果大家看過原版的《大教堂與集市》,就會知道它閱讀和理解起來是比較困難的。開源許可證也有這個特點,如果對開源不瞭解、對IT沒有了解、英文不好,直接閱讀會覺得非常吃力。而我正好從事IT領域工作,對開源有一定了解,掌握的英文也足以用來翻譯,因此決定做這件事。有一句格言我很喜歡,“麻煩的事中藏著珍寶”。一些簡單的事情,可能大家已經有很多途徑獲得解決方法。但比較難、比較有價值的知識,就需要有一個通俗的媒介,使得人們可以相對容易地去接觸、瞭解、掌握。如果我一個人費點功夫,可以讓更多人受益,這是我理解的一種開源精神。
CSDN:為什麼會鼓勵青少年和年輕的開發者去嘗試開源?
衛Sir:我主要基於兩個判斷。第一,這個世界終將走向數字化,大家應該能感受到這些年數字化趨勢越來越明顯,發展速度越來越快。這兩年大火的元宇宙,就是人類對於未來生活在數字化世界中的一種設想。
另外一方面,我認為未來的軟體終將被開源吞噬,大多數都走向了開源。如果閉源軟體和開源軟體在功能相差無幾,那麼開源軟體競爭力一定更強,因為大家會更傾向於原始碼開放的軟體。因此年輕人參與程式設計,參與開源專案,也是儘早為進入未來社會做準備。這方面能力越強,在未來就越有競爭力。
開源協議是一紙合同,也是創作者與使用者的預設契約
CSDN:開源圈中大家都知道你擅長解讀開源協議,為什麼理解開源協議對我們如此重要?
衛Sir:開源協議本質上是一紙合約,是開源專案的作者很認真、很鄭重其事地把他對使用者的要求以書面形式展現出來,為了提醒使用者要注要按照他的要求來使用。比如要保留作者版權資訊,使用導致的問題不要找作者等等。如果使用者不重視這些明文要求,在使用過程中違背了開源許可證,可能會給自己帶來麻煩。輕則引發作者本人的憤怒,產生一些糾紛,重則惹上訴訟、官司,因此作為開源使用者一定要重視開源協議中的要求。
CSDN:能否為開源新手介紹一下常用的幾種開源協議和它們的特點,區別是什麼?假如要開源一個專案,該如何在其中進行選擇?
衛Sir:最常用的開源協議包括BSD、MIT、Apache、GPL。
簡單地說,BSD和MIT是最簡單、最寬鬆的協議,對使用者要求也是最少的。Apache許可證不像MIT和BSD那麼簡單,它包含了一條關於專利的描述,這是它比較創新的地方,風格也相對嚴謹,考慮的因素會更加全面。GPL最主要的特點是它具有“傳染性”,使用附帶GPL協議的開原始碼,其專案也必須要開源。
使用者需要注意不同開源協議的特點,結合自己的情況挑選適合的協議。如果是自己寫寫玩票性質的小軟體,用MIT、BSD就可以,不用那麼講究。如果是個有一定規模和考慮商業化的開源軟體,可以考慮使用Apache協議,會比較周全,它會考慮專利的授權問題;如果比較崇尚自由軟體的精神和理念,則可以用GPL系列的協議。
我個人比較喜歡寬鬆的協議,比如MIT簡單、隨意,既然都選擇了開源,不如開放得更徹底一些,有些東西放到公共空間(Public Domain)也很不錯。
CSDN:目前國內還沒有以開源軟體為主題的法律,開源軟體的協議是否具有法律效應?它怎麼約束開源作者和使用者?
衛Sir:國內雖然沒有直接和開源相關的法律,但開源協議可以看作是個合同,受《合同法》的保護。雖然創造者與使用者雙方並沒有在協議上面簽字,但是作者在軟體釋出時是附帶著“合同”一併釋出的。開發者一旦使用作者釋出的軟體就預設接受了合同的規定,如果不接受就不要使用。此外,開源軟體本身是有版權的,所以它也受《著作權法》保護。國內去年就有兩起與GPL協議相關的著名案件,經法院審判後的判決書我們也能看到,我就此寫了兩篇文章,大家有興趣可以看看。
CSDN:最近地緣政治衝突已經蔓延到了開源世界,甚至像GitHub這種開源平臺和一些開源社群,在本國政府要求或呼籲下已經向俄羅斯停止部分服務,這個舉措是否意味著法律政策凌駕於一切開源協議之上?開源是否存在國界?
衛Sir:開源協議只是一個合同,顯然法律的效力大於開源協議,尤其是當開源協議與法律所規定的內容衝突時,法律的效力更高。GitHub的這次限制,是這麼說的“在我們努力確保所有國家的開發者都能使用GitHub的同時,我們也在繼續確保所有人都能獲得免費的開源服務,包括俄羅斯的開發者。我們的法律團隊對此類許可權進行了徹底審查,而且我們正在遵守不斷髮展的出口管制和貿易法規。這包括實施嚴格的新出口管制,旨在嚴格限制俄羅斯獲得其維持侵略性軍事能力所需的技術和其他物品。”我們需要認識到的一點,GitHub是一家被微軟收購的公司,它的所有行為僅僅代表這個美國公司的行為,而美國公司是受美國法律管控的。因此,我們可以說,開源程式、開源精神、開源社群是無國界的,但每一個開源開發者,每一家開源公司,都是有所屬國家的。
維護開源安全需要多方共同努力
CSDN:一般企業使用開源軟體會存在哪些風險?
衛Sir:企業使用開源主要存在兩大類風險。
第一大類風險是能否用好開源。要想用好開源其實不太容易,一個企業的程式碼可能是自己開發的,或是從供應商購買的軟體和程式碼。對企業來說,如果技術能力不強,即便成功部署了開源軟體,出現安全漏洞時,可能還得等待社群出了補丁才能把漏洞補上。但如果社群短期內無法給予支援,企業自身是沒有能力修復的(除非是一家有很強技術實力的IT企業),這對企業來說是一個風險。
第二類是合規性問題,主要存在於在那些有輸出能力的企業中。輸出產品、程式碼都需要檢查其是否違背開源許可證中要求的內容。假設程式碼中使用了含有GPL協議的開原始碼,企業是否做到了將原始碼開放出去?如果沒有就會出問題,這就是合規風險。
CSDN:開源技術,因為它開放和不設門檻的特點,很容易受到駭客攻擊。之前發生過多起開源技術漏洞導致的安全事故,你從網路安全專家的角度如何看待開源安全性?
衛Sir:開源的安全性和任何軟體的安全性沒有本質區別,只要是人寫的軟體,都會有安全問題,和它是否開源關係不大。業界有個廣泛流傳的說法:“只要眼球多,bug容易捉”。由於開源天然的協作特性,開源的安全性應該更高,但事實上,很多安全漏洞隱藏得很深,不是眼球多就能看出來的,想要發現這種漏洞,獨特的安全技術和安全專業能力是必不可少的。而且找功能Bug和找安全Bug的思路是完全不同的。
開發人員的思維和安全人員的思維完全是反著來的。開發人員更在意實現功能和提升效能,而安全人員考慮的是如何用各種意想不到的手段獲取資料和許可權。如何理解這兩種思維的差異?可以從最簡單的使用者名稱和密碼的功能為例。傳統測試只會測試不同長度、不同型別的字元輸入是否會導致程式崩潰和異常;而安全測試人員會構造精巧的資料作為輸入,比如構造SQL注入語句,或者導致緩衝區溢位執行惡意程式碼的資料,這是傳統測試不會考慮的。安全人員更多是要用一種在開發人員看起來匪夷所思的角度和路徑去找到那些隱藏很深的安全Bug,這些不是常規的測試,這是安全性測試。
當然,我們建議開發人員應當具備一定的安全思維和安全能力,但看上去困難重重,開發人員對安全往往是不太關心的。專業的培訓會有一定幫助,再有就是在整個軟體生命週期嵌入安全流程,比如DevSecOps等,讓人們做出更安全的軟體。
要想防範甚至消滅開源軟體的安全漏洞,除了提升開發者安全能力和加強流程管控外,還可以在更多技術領域發力,從CPU、硬體體系架構、作業系統、程式語言、安全工具等方面,都可以有更多的安全創新和改進。
總的來說,經過20多年的發展,不論是安全法規、安全理念、安全意識,還是安全技術、安全產品、安全生態,整個環境比我剛接觸這個領域時(2000年左右)要好得太多了。
我想看到開源吞噬世界的那一天
CSDN:如今國內的一些開源產品和開源文化的發展情況如何?是否存在瓶頸?
衛Sir:我所瞭解到的國內比較出名的開源產品目前都發展得很好,但有更多無法脫穎而出的開源專案沒有進入大家的視野。
談到開源文化,我能感受到如今大家對開源的態度比原來要友好很多。10年前左右,很多人對開源甚至會有一些錯誤的認識,認為開源是“壞”東西,是“別有用心”的,這在現在看來簡直不可思議。
現在大家逐漸以一種實用主義的眼光來看待開源,發現開源軟體不僅可以解決自己的問題,還能獲取原始碼、甚至商業化。我認為只要不違反開源許可證,這些想法都是自然的、正常的,是理性思考的結果。
另一進步是如今大家普遍意識到了開源可能帶來的風險,和開源的合規問題。有經濟實力的公司會購買商業版本的開源軟體,並且會購買開源相關服務。一些IT企業也開始貢獻上游,開源內部軟體,促進開源生態發展,這些都值得讚賞。
總的來說,我認為國內開源目前沒有瓶頸,也無需突破。大家自由發展、自由競爭、自由使用,只要合規就好。
CSDN:你曾專門撰文探討 faker.js 和 colors.js 的專案作者毀庫跑路的故事,這裡著重探討了開源程式設計師在“如何用開源獲得收益”的困境,除此之外,您認為開源開發者還面臨著哪些困境?
衛Sir:在很長一段時間內(對於個人專案,現在我也這麼認為),我都認為開源是有錢有閒的人玩的遊戲,你可以將它作為一種興趣或者樂趣。
如果你還面臨溫飽問題,我建議還是先務實一點,找一份被僱傭、可以拿薪水的工作,不要試圖快速從開源之中變現。玩開源可以為了樂趣,為了提高能力、獲得名聲,為了滿足存在感,但不管怎樣,現階段個人玩開源,不要指望能直接賺到錢。開源本身更多是一種奉獻精神,對個人來說,這是開源最主要的困境。
此外,很多人搞創作還是希望得到他人的認同,發揮自己的價值,給社會帶來一些有益的影響。但你開源的程式碼可能未必有人關注,也未必有人下載、使用它,也未必產生你預期的效果和影響力。創作者的普遍困境就是,當你的作品並沒有人關注,沒有人用的,一定會感到很失落,也很容易放棄。所以你做的東西,必須足夠優秀,解決足夠有趣、有價值的問題,你必須擁有足夠的能力,甚至包括程式設計師所稀缺的營銷能力,才能獲得更多的關注和認可。
CSDN:你曾經說“免費”、“搭便車”等話題已經失去了討論的意義,那麼開源圈內還有哪些問題是您長期比較最關心的?
衛Sir:我比較關心的是,什麼時候每個人都能用上開源的桌面作業系統、開源的office軟體,甚至於人們使用的軟體全都是開源的?也即開源何時能夠真正地吞噬世界?
這大概需要很長時間,甚至在有的領域永遠不會實現,比如可以直接盈利的消費型軟體一般都不會開源。不過,以後的世界真的很難想象,也許開源會以一種現在無法想象的方式,吞噬世界。
此外,前面談到一個程式設計師因為無法獲得收入憤然刪庫跑路的例子,我們是否可以找到一種方式,讓程式設計師進入一種自由編碼的狀態,不再需要考慮生計問題,且不用被僱傭,僅僅透過寫程式碼,參與開源專案或是自創專案,就可以輕鬆獲得回報?這也是我長期關心的問題。
開源開發者因為賺不到錢而刪庫跑路不是個例,他們的程式碼使用量很大,但因為是免費的,沒有任何經濟回報的機制,開發者就無法因此致富。假如能有一種方式,只要程式碼被人使用了,產生價值了,就能得到收益,這對開源開發者而言就是非常理想的狀態。目前看來Web3似乎是一條比較可行的道路,但也有人覺得Web3並不靠譜。
一切尚不明朗,不過我很期待。
END