什麼是開源,當前中國公眾對開源有哪些常見的誤解?

看到知乎上很多關於產品的討論,不少人都提到了「開源」一詞。

但是似乎大家對於開源的理解又不大一樣。

那麼,國人對於開源,究竟有哪些最顯而易見的誤會呢?


非常好的問題!

首先,關於什麼是開源,這是一個很大的話題。一些人把它理解為是一種哲學,還有些人則認為這是一種實用主義,我個人傾向於認為這是一種文化。具體可以參考Open source,以及更多的史料。

目前,開源思想在計算機學科衍生出了軟體領域和硬體領域,也就是開源軟體和開源硬體。

我著重說一下國內對開源的誤解。

我所了解到的關於「開源」的常見誤解/盲區:

0.根本不知道「開源」,從未聽說過。

這當然是說學校里的一些計算機相關專業的學生,他們經常使用Notepad++、Eclipse等開發工具,還會使用git、svn等版本控制軟體,還會使用如jQuery、Java SSH之類的框架/庫;但很遺憾,他們從未聽說過「開源」一詞。

1.開源軟體必然免費,難以接受任何形式的與開源相關的收費活動。

從字面上理解,open source(也就是「開放源代碼」)跟是否收費沒有任何關係;國外也有如RedHat這樣的公司,創造了獨有的開源商業模式。絕大多數開源軟體產品確實是免費使用的,而且往往會告知用戶可以「捐贈」,也有類似RedHat這樣的「免費軟體,收費服務」的商業模式。但對在國內,開源文化相對落後,多數人們似乎只認識到開源「免費」這一點點好處,一旦提到收費,就會產生不滿。(老子給你提供免費的軟體以及分享源代碼的權力,你看著給還不行么!)

2.開源軟體與自由軟體的關係。

根據自由軟體基金會的定義,自由軟體(Free Software)是一種可以不受限制地自由使用、複製、研究、修改和分發的軟體。自由軟體與商業軟體的關係比較對立,而一些開源軟體則對商業軟體比較友好。

3.無視開源許可證。

只舉一個例子。記得2012年中國雲計算大會上,Cloudera公司去了人,在上面講話時就說到「希望中國的某些Hadoop用戶能回饋社區,一方面讓自己的智慧惠及全球,另一方面也不至於自家搞的東西與主版本出現偏差,導致更嚴重的生產問題」。是什麼公司大概大家都能猜到。。

4.搞不清楚各種開源許可證。

可以這樣劃分:

  • 自由軟體許可證:GPL, BSD。
  • 開放源碼許可證:MIT License, Apache License 2.0, LGPL。

在國內IT行業里,非常了解它們之間異同的人並不是很多(我目前並不能做到這一點)。

5.以為開源(軟體)和微軟的技術是衝突的。

這分明是兩回事。也許是Windows相對於Linux的絕對閉源,讓人們誤以為微軟跟開源社區勢不兩立。但是請看這裡CodePlex - Open Source Project Hosting,這上面全是微軟的開源項目。說到微軟的技術,舉幾個簡單的例子,比如Mono、大量的在.NET上使用的開源項目、大量的用C#構建的開源項目(去查GIthub)。

要真說誰和開源不友好,請回過頭看看Oracle公司。

6.開源和商業利益是衝突的。

國內大多公司都有這樣的想法(包括上面提到的用Hadoop的某公司):開源項目又不賺錢,幹嘛去做。可以看看國外的巨頭公司,如微軟、Google、Apple、Facebook、Twitter(這個也算吧),他們下面有不少重量級的開源項目,他們在世界範圍內對整個IT行業的影響並不單純是靠公司業績、股票價格,他們對世界的影響也並不限於公司的主線產品本身;他們那些開源技術的影響力,似乎超越了公司本身經營的產品/服務,以其他的形式為全人類的發展與進步提供了更多的可能。回頭看阿里,也是國內開源領域的佼佼者,在用自己的技術為國內IT的土壤施肥。

我想說的是,開源和商業利益可以相輔相成,並不衝突,但終究開源和商業利益是兩個層面的問題。

7.開源是「面子問題」。

有一個知乎回答中提到了這個問題,這是其中的一個回答「中國開源現狀如何?」。

除此之外,也會有人覺得:如果自己有一個開源項目,一定很酷。這本身是一件值的自豪的事情,但大可不必覺得「自己做得不好」就一點也不去做。說到底,開源是一種文化、一種思想,而不是「面子問題」。

8.鮮有人知的剛剛起步的開源硬體。

你在問題里只說了「開源」,所以我覺得有必要提一下新興的開源硬體。

開源硬體,指與自由及開放源代碼軟體相同方式設計的計算機和電子硬體。開源硬體開始考慮對軟體以外的領域開源,是開源文化的一部分。

從開源的角度看,它和開源硬體有些許不同:

  1. 可以使用現有的開源軟體許可證,也可以使用幾項專門用於開源硬體的許可證,見這裡Open Hardware License。
  2. 軟體許可、硬體許可證最根本不同是:其性質依靠專利法律,而不是版權法律。版權許可證可以控制分發的源代碼或設計文檔,專利許可證可以控制利用設計文檔製造的物理設備的用途和大量生產。這一區別在TAPR開放硬體許可證中明確提及。

我幾乎不與硬體打交道,所以也就了解到這麼多。

同時推薦看一下這個提問:中國開源現狀如何?

---

知乎新人,輕拍,歡迎補充、指正。


源代碼公開給人看不等於開源,如 Discuz。

開源軟體不等於自由軟體:自由軟體必要的一點是「任何人有以任何目的使用該軟體的自由」。

自由軟體不等於 Copyleft:Copyleft 是自由的終極概念,是最激進的自由,此外還有 BSD、Apache、MIT 等偏保守的哲學但它們也代表自由軟體。


轉一下之前我一篇博客:開源的那些事兒 (一)的內容作為回答,稍有修改。

Disclaimer:本文僅為個人意見,不代表我的僱主Hortonworks以及Apache Software Foundation的觀點。轉載請保留此段聲明,也可以加我的微博:@leftnoteasy

1. 什麼是開源呢?

相信很多人對於開源這個概念很模糊,我在之前的一篇博客裡面也略微談了一下,這裡想展開說一下。

1.1 開源心態

首先要清楚的是,開源是一種精神,這種精神是,我希望把我的東西能夠分享出去讓更多的人去使用它。對於開源者來說,能夠從中獲得什麼東西各有不同,有些人為了金錢利益,有些人為了興趣。但是清楚的第一點是,一旦你開源出去,別人怎麼用它就跟你沒有任何關係了。

所以有在我之前的博客上有評論說,我不想開源主要是不希望別人拿我的代碼出去賣錢,對於這種心態我只能說可能開源未必適合你。

1.2 開源協議

對於開源軟體來說,需要選擇一個合適的協議(License),不同的協議之間差別很大,具體可以參考:如何選擇開源許可證。如果上面的這些開源許可證都不適合你,那麼你也可以寫一個自己的許可證。

這裡拿一個比較流行的協議,MIT協議來舉個例子來說裡面要求了什麼東西,由於協議的英文比較冗長,這裡摘錄部分已經加上了注釋

…including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software

你拿我的代碼去怎麼改,怎麼打包賣掉都可以!

…THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED…

代碼就這樣了,不提供任何的質量保證!

…IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY…

用壞了我不負責!

MIT協議屬於比較寬鬆的協議,也會有些更嚴格的協議比如說GPL:如果你程序用了我定義的介面,那麼你也必須用GPL協議開源,之前小米就捲入了一些關於GPL協議的糾紛。所以根據不同的情況選擇不同的協議比較重要,同時當你引用了別人的開源程序的時候,也要注意是否違反了作者的開源協議。

1.3 開源社區

開源社區是開源軟體賴以生存的生態系統,所謂社區是由用戶和開發者組成了。

1.3.1 開源社區用戶

用戶一般會來自於五湖四海,他們會使用、抱怨(可能會非常尖酸刻薄)和貢獻開源軟體,比如說Hadoop社區裡面就有很多的用戶會把自己碰到的問題發布到用戶開發者郵件列表以及JIRA(bug資料庫)中,這樣的話,社區的開發者就能夠有機會看到並且修復這個問題了。有些對於開源軟體理解深刻的用戶會嘗試從代碼裡面看到到底是哪裡出了Bug並且能夠提出解決方案,這種用戶是最受歡迎的用戶了。

1.3.2 開源社區開發者

開發者可能來自於不同的公司也可能來自於同一個公司,取決於不同的目的。比如說Hadoop的核心開發者都是來自於不同的深度使用或者賣Hadoop相關產品的公司,比如說Yahoo、微軟、Hortonworks、Cloudera之類的。也有一些開源軟體不希望別的公司的人來參與,比如說Google開源的產品一般很少有來自其他公司的貢獻。比如說Tensorflow、Android。

一個良好的開源社區裡面會非常的良性循環:用戶用軟體,找到Bug和提出改進的方案;開發者通過用戶的反饋來不斷的改進產品;不斷有新的開發者來加入到社區裡面進行開發,這樣就算是有老的開發者不做了項目也能夠繼續往前發展。

而相對的,一個壞的開源社區會很少有人參與,對於用戶的反饋置之不理,沒有辦法發布新的版本,最後徹底成為一個死掉的項目。

2. 開源社區的開發者都是哪些人?

開源社區的開發者都是不拿工資的嗎?

對於開源開發者來說,有很多人的認識是:開源社區裡面的人都是技術大牛,視技術如生命,視金錢如糞土,上班干著公司的活,下班干著開源項目的活。

其實這個是一個很大的誤解,其實開源社區裡面絕大部分的開發者是在工作的時候貢獻代碼的,因為這些開源項目就是公司IT的基礎架構之一。當然裡面有很多大大牛是能夠憑著自己的興趣就可以創立最牛的軟體,個人最佩服Linus,完全憑著自己的技術、經驗和興趣創立了Linux和Git。

開源社區是一片技術的凈土嗎?

另外一個普遍的誤解是認為開源社區就是一片凈土,裡面的程序員都活在自己的技術世界裡,兩耳不聞窗外事,一心只會碼程序。其實有人的地方就有江湖,朋友志傑寫過一篇關於Hadoop兩黨制的文章,非常值得讀一下。

跟一般的公司一樣,開源社區的開發者有著一些不那麼好的個體:

  • 幹活不行只會去搶別人的功勞的
  • 愛拉幫結派搞政治,在各個不同的討論主題上面嚼舌根的
  • 對於自己不同意的意見出口成臟人身攻擊的

但是不得不說,好的開源社區裡面還有有著比一般公司更多的技術大牛和更好的氛圍,所以希望上面的言論不要把你給嚇到:雖然它不是一片凈土,但是它比一般的地方乾淨純粹得多。

3. 開源項目怎麼掙錢呢?

開源項目的掙錢方式也很多,不是因為開放了源代碼你就變成了一無所有為別人做嫁衣裳了(當然有時候還是有點這種感覺)。對於公司而言(除開純粹個人興趣開源的),開源最主要的原因是沒辦法繼續賣閉源的產品了。

舉個例子來說,如果沒有IOS,Android會開源嗎?沒有Unix、Windows,也很難說Linux是否會開源。所以作為老二,如果要打敗老大,最好的方式就是把老大的最重要的技術開源出去。

一旦開源出去,掙錢的門路就多了,比如說:

  • 賣技術支持,你用我的開源軟體,但是裡面出了問題我可以幫你解決,我也可以幫你把你需要的功能給加進去。這個是最普遍的盈利方式,但是最大的問題是利潤率相對低,因為技術支持的人力成本比較大。
  • 賣培訓,跟上面差不多,因為只有我最懂這個開源軟體了,你想要學習當然得找我了。
  • 賣高級功能,一些開源軟體會在開源的基礎之上提供更多的高級功能,這些功能往往是閉源的。這方面做得比較成功的是Redhat,但是問題主要有幾個
    • 1)用戶可能會擔心被你給困住(lock-in),對於選擇開源軟體的企業用戶而言,很多情況是希望不要困在某一個軟體提供商的軟體裡面,以防這個軟體提供商倒閉或者漫天要價。
    • 2)這個高級的功能帶來的價值是多少,有沒有類似的開源免費的軟體能夠做到這些功能。
  • 賣雲服務:現在很多的公司也會把開源的軟體作為雲服務提供,比如說Tensorflow就能夠在Google Cloud Platform上面,Docker也能在Docker自己的雲上跑。這個也是現在比較火的開源軟體盈利方向。

不管怎麼說,開源項目相關的產品比之前的相似的閉源產品一般會便宜很多,如果有一個健康的社區,在幾年之類就會越來越少有人去用那些閉源的軟體了。舉個例子來說:Teradata由於各種開源項目的衝擊,在這個上一個季度的收入比全年同期下降了不少,見Teradata Reports 2016 First Quarter Results。

4. 開源項目代表著最高的代碼質量嗎?

簡單來說不是。

這種事情經常發生在大部分的開源社區:有些開發者更新了代碼後發現」我擦居然這個東西都能夠被提交進代碼庫「,然後就發起一個新的討論主題開啟罵戰模式。

開源社區的代碼質量主要是由下面的幾個原因導致的:

1)雖然說好的開源項目都有非常嚴格的代碼檢查(Code review)政策,所有進到版本庫裡面的代碼都需要有相關領域的負責人來檢查通過後才能夠被Commit,但是很多時候,一些開發者的經驗不足和Code reviewer的疏忽會導致一些不那麼好的代碼被提交。

2)此外開源社區有時會進行很多低效的討論,在不同的需求情況下,有時做出最後的決策是妥協了的結果。

所以如果看現在的IT領域,一般來說開源的項目並不是最好的,比如說分散式系統裡面Google的內部GFS應該遠遠領先Hadoop HDFS;Google Borg比YARN、Mesos、K8S領先了好多年。

但是還是得說一下,有些東西不能只看點,如果你能夠在Hadoop裡面找到一些弱雞的問題並不代表所有的代碼都是一坨狗屎,裡面大的代碼架構設計、用戶介面設計和那些很核心的代碼都是由大牛主導,通過很多的思維碰撞而得到的。

另外由於在開源社區裡面,由於你的每一行代碼都會經過別人的眼睛,從個人的名譽來說,一般人會更加重視進入了開源社區的代碼;同時,那些老是把低質量代碼提交進去的開發者來說,會被打上」不靠譜「的標籤,之後就很難在社區裡面混了。

所以總的來說:

雖然開源項目代碼質量不是最好的,但是也是相當不錯的,而且由於開源社區是由眾人拾材火焰高,所以好的項目會活得更久,因為就算是之前做這個項目的負責人、公司不做了,項目還是能夠繼續活下去的。


還是沒有看懂,或者說沒有加深或重塑我對「開源」一詞的認識。說一下我自己對「開源」的理解(我不懂編程,輕拍),安卓平台是「開源」,iOS是「閉源),就是說安卓建立一個平台,允許所有軟體公司在平台上表演,但IOS只允許自己也就是「iPhone」表演。因為這個平台不是所有公司都有能力搭建的,但這個平台又是所有公司渴求的,做個不恰當的比喻,好像台灣所有明星都想上「小巨蛋」,香港所有明星都想進「紅磡」一樣。而且「開源」和眾多軟體公司應該是互相依存的關係,就是共榮,就像安卓的做法,iOS就算再牛,就是屬於那種「老子世界第一」,但不和別人合作也難以長久,我說的長久是指和iOS匹配的那種本來應該更長久的長久。自從有了智能機,我用的就是iOS系統,因為確實打動我,(其實不能說系統吧,我並不懂,應該說第一是因為優質APP很多,第二界面很精緻,第三機器外形很不錯),但未來我肯定會再買一部安卓系統的手機,因為安卓後來居上了,或者說安卓的進步速度要大於iOS的進步速度。一個明顯變化是,以前很多APP只有iOS有,後來發展成安卓也有一部分,後來好像差不多了,到現在變成APP首發或者更關注安卓版本了。我很喜歡iPhone,也希望這種世界級公司能一直輝煌下去,但我也覺得只有開源(我理解的開源)才是主流,畢竟蘋果的程序員就算再牛,比如全公司1000人,就佔據世界程序員排行榜前1000名(但這並不可能),就算這種情況存在,那其他所有公司那麼多優秀的程序員難道就比不過你們嗎?不可能。蘋果一定不要再重蹈諾基亞的覆轍,諾基亞是我到現在都不明白的,那麼強大的公司怎麼會在一夜之間倒下,在智能機之前我用的都是諾基亞,基本大部分機型我全知道,用過的也有好幾部,本來我準備買LUMIA系列,後來沒買的原因是沒有APP在這個平台上,智能機沒有APP那就不能叫智能機,我不明白諾基亞難道靠非智能機,就是自家的傳統產品難道就生存不了了嗎?非智能機有智能機無法替代的優勢,不掉電,不中毒,安全性好,舉個不恰當的例子,就好像家裡的老婆一樣。說的太長了,以上是我對開源的小理解和小思考。


中國人均收入低,生活條件艱苦,所以沒人去搞開源。

國內環境這麼惡劣,無數人只好在麻將和網遊中消耗大把時間和金錢。

老外人均收入高,福利好,不需要沉淪於麻將和網遊,所以老外很多人做開源。


推薦閱讀:

如何開發並維護一個開源的 React 組件?
Google 編程之夏(GSoC)中的Vert.x子項目
開源中國的無恥行徑
Github 本周最有趣的 10 款「機器學習」開源項目 | PaperDaily #32

TAG:開源 | 開源項目 | 對X工作的誤解 |