1. 程式人生 > >瞭解這些,才算真正知道開源!

瞭解這些,才算真正知道開源!

640?wx_fmt=gif

640?wx_fmt=jpeg

作者 | 老曹

責編 | 沭七

封圖付費下載自視覺中國

沒有開源軟體,現在的網際網路根本無法存在,開源的歷史可以追溯到 ARPANET 建立。開源在今天已經不再是一個時髦的詞了,對於網際網路的開發者來說,它現在就像空氣和水一樣,就在我們的生活中。

640?wx_fmt=png

來自 https://octoverse.github.com

如今的主流開源參與者,不再只是個人愛好者,更多的是著名 IT 企業的員工,商業公司也紛紛支援。IT 企業投入了大量人力在各個開源社群和專案上,包括開發測試、專案協調、運營推廣等。


640?wx_fmt=png

什麼是開源?


從軟體的版權屬性和釋出方式上看,軟體的分類如下:

640?wx_fmt=png

開源軟體被定義為描述其原始碼可以被公眾使用的軟體,並且此軟體的使用,修改和分發也不受許可證的限制。開放原始碼軟體通常是有 copyright 的,它的許可證可能包含這樣一些限制:蓄意的保護它的開放原始碼狀態,著者身份的公告,或者開發的控制。

簡單的說,開源就是原始碼開放和開源許可協議的選擇。開源意味著使用者可以免費執行、自由學習、免費二次分發以及自由修改改進。


640?wx_fmt=png

開源許可協議及選擇


開源許可協議大概有上百種,例如:

  • Apache License 2.0 (Apache-2.0)

  • 3-clause BSD license (BSD-3-Clause)

  • GNU General Public License (GPL)

  • GNU Lesser General Public License (LGPL)

  • MIT license (MIT)

  • Mozilla Public License 2.0 (MPL-2.0)

  • Eclipse Public License (EPL-1.0)

  • ……

但是,常見的開源許可大約 10 種,主要有類似 GPL,類似 BSDL 和類似 MPL 等。

  • GPL

GPL 給軟體以版權保護,使用 GPL,可以獲得複製、釋出和修改這些軟體的法律許可。

GPL 的特殊性是 copyleft 與自由的病毒式傳播。在所有開源許可證中,GPL 的最大特色在於它的“copyleft”規則。 它嚴格地控制基於自由軟體的集合作品或者衍生作品,GPL 第 1 條將其稱為“基於程式的作品”,釋出規則很簡單,只要使用了 GPL 下的自由軟體,那麼衍生作品以及集合作品的釋出都要基於 GPL 之下。

類似的開源許可證 AGPL、LGPL 等等,是一種相對理想的是實用主義。

  • BSDL

BSDL 主要適用於 Apache 伺服器和基於 BSD 的作業系統專案(FreeBSD、 OpenBSD、 NetBSD),不排斥對開源軟體的商業利用,有實用主義的觀點。

BSDL 的特殊性是被許可人的絕對自由,對被許可人做了最少的限制,只要尊重原作者, 合理恰當地標明瞭原始碼的出處,被許可人將不受限制於將這些原始碼用在自己的程式中而按自己的要求進行程式的釋出和軟體的許可、產生衍生作品後僅以目標碼的形式釋出,等等。這意味著可以從 BSDL 的開源軟體中衍生出私有軟體。

類似的開源許可證有 Apache、MIT 等等。

  • MPL

MPL 是 1998 年初 Netscape 的 Mozilla 專案組為其開放原始碼軟體專案設計的開源許可證。

MPL 的特殊性是在開源軟體許可證譜系中接近於 BSDL,但它帶有強烈的商業化特徵,為公司保留了相當的權利,相當於集開源之力,都為我所用。

類似的開源許可證 Apple 公共程式碼許可證(1.2)、Sun 公司的 SISSL 和 Sun 公共許可證 (1.0)、Nokia 開放原始碼許可證(1.0a)、 IBM 公共許可證(1.0)等等。

如果選擇一個開源協議呢?烏克蘭程式設計師 Paul Bagwell 給出了一張分析圖,如下:

640?wx_fmt=png

國內的阮一峰在部落格上給出了簡化的版本:

640?wx_fmt=png

除了 Linux 作業系統外,一個可能是最成功的複雜開源系統體系可能對理解開源許可協議有幫助。


640?wx_fmt=png

Android 的開源許可體系


Android 有關 Linux 核心部分採用 GPLv2 協議開源,有關 userspace 採用 ASLv2(Apache 協議版本 2 )協議開源。

640?wx_fmt=png

GPL 和非 GPL 的分界線在於一個 Bionic Libc 的庫。標頭檔案由 Linux 核心的同名標頭檔案自動生成,用來獲取完成使用者空間系統呼叫的必要資訊。它只包含原標頭檔案中的常數、結構和巨集定義,因此,不包含版權資訊。讓 GPL 止步於核心空間被 Linux 核心的作者 Linus Torvalds 以及其他的核心開發人員多次澄清,普通系統呼叫為非 GPL 的作用範圍。

Android 在使用者空間與核心空間之間存在著硬體抽象層 HAL,HAL 類庫本質上一種使用者空間的驅動,其中的主要用途之一就是規避 GPL。硬體廠家把需要保護的商業機密以及智慧財產權相關的邏輯放在 HAL 層,以二進位制包的方式釋出,不需要公開原始碼。

PAX 專利聯盟是 Google 加強它對 Android 控制力 的另一種手段。手機廠商想要採用這些免費的專利,就不得不預裝 Play 商店及一系列 Google 應用。


640?wx_fmt=png

開源與專利


將開原始碼修改後,自己申請軟體專利是可能的,這取決於具體的開源許可證。MPL 禁止將開放原始碼以許可證形式許可後再去申請與這些原始碼有關的專利的行為。BSD、Apache 等對於專利申請沒有限制。

就 Ricoh、SISSL、NOKOS、AFL、Artistic、APSL 等開源許可而言,貢獻者將自己享有實質專利權的技術加入開源軟體的,視為原始碼的專利權人將該專有權利向公眾許可。

使用程式碼掃描工具如 Black DUCK 或 Openlogic 等,能夠對程式碼進行合規性檢查,通過掃描原始碼,發現並確認其中存在的開原始碼,及其版本、許可證(License)信 息等,形成“材料清單”,讓使用者瞭解其程式碼。


640?wx_fmt=png

開源中的法律問題


開源軟體,雖然理念上違反傳統的智慧財產權法,但是行動上卻尋求包括著作權法、商標法、專利法在內的綜合保護,進而形成了一個類似於商業軟體智慧財產權綜合保護的體系。開源後,侵權證據極易獲得。

640?wx_fmt=png

關於開源軟體的著作權,主要有兩個維度的風險:

  • 複製、分發或修改他人軟體時,要求按照協議規定附上版權說明,若不履行該義務,將可能面臨著作權侵權(例如 Apache-2.0\BSD-3-Clause\GPL-3.0\MIT 等);

  • 對修改而言,有的協議明確要求對修改的部分進行明示,標明修改人資訊(例如 Apache-2.0\GPL-3.0\LGPL 等)。

開源軟體的專利權也存在風險,協議中授權被許可人專利申請的權利,以及專利再許可的授權。若在協議中未明確專利的再授權,將會存在一定的專利侵權風險,如 BSD-3-Clause\MIT,未有明確的專利授權,專利侵權風險較大;GPL-3.0\LGPL-3.0,要求專利以免費的、非獨佔的許可方式分發給使用者,這就將一些授權風險排除,從協議來看風險反而會小一些。

開源軟體的商標權風險,未依據協議要求正確使用商標 在部分協議中,針對商標權的使用,予以明確授權 GPL-3.0\LGPL-3.0,未明確規定不能使用商標; Apache-2.0\BSD-3-Clause 明確不允許使用其商標,若使用將會存在商標侵權風險。在商業行為中,在開源程式中刪除原有商標,更換為自己的商標後釋出,構成商標法意義上的反向假冒,侵犯商標權。


640?wx_fmt=png

那些開源的大公司


在 2016 年,微軟是 Linux 基金會的白金會員和董事,微軟雲 Azure 支援 Redhat,Ubuntu, Suse 等 Linux 版本。SQL Server 也推出了 Linux 版本,開源了.Net, Visual Studio 等核心產品,在 github 上貢獻排名一度超過了 facebook 和 google,內部人士宣稱除了 Window 和 Office,其他產品都已經開源或者在開源的路上。Azure 是微軟最重要的未來,事實上有 1/3 虛擬機器是 Linux 系統,不支援 Linux,微軟雲沒法跟 AWS 和 Google 競爭。

Google 的核心業務場景是抓取網頁資料,建索引,最後響應使用者需求。Google 做了全產業鏈的佈局,而且全部以開源開放的方式,例如:

  • 瀏覽器 – Chrome & Blink

  • Webapp - PWA

  • 網頁加速- AMP

  • 前端框架 - AngularJS

  • ......

還有前面提到的 Android。以 Google 開源的圖片格式 Webp 為例,相對於 PNG 和 JPG,在檔案長度上有 28%到 45%的減少,可以減少大量的儲存空間,頻寬以及頁面的平均載入時間。

在國內,華為的開源影響力很高,是 Linux 基金會,OpenStack 基金會,CNTF(k8s)的白金會員,且到目前為止都是國內唯一,貢獻排名均居前列。作為 Apache 基金會的金牌會員,捐獻的 CarbonData 成為了 Apache 的頂級專案。 華為的主張是“源於開源,強於開源,回饋開源”,通過參與開源,積極投入到雲端計算的相關開源技術領域,引領並主導技術標準的演進,促進華為在雲端計算基礎設施上的技術能夠領先。

百度有自己的對外開源規範,echarts 早在 2013 年就在 github 上開源了。2016 年 9 月,PaddlePaddle 在百度世界大會上宣佈開源,這是是一個易用、高效、靈活、可擴充套件的深度學習框架,相容多種異構硬體,具有優異的訓練&預測效能,官方支援多種領先模型,提供全流程的深度學習模組和元件,適合不同層次開發需求。百度在 github 上有數十個開源專案,2017 年 4 月,百度宣佈阿波羅計劃,無人車系統開源。

阿里知名專案 Weex、fastjson、Dubbo、RocketMQ、druid、jstorm 等等等。阿里通過使用者的意見反饋,bug 報告,patch 提交,促進了開源軟體本身的質量提高,技術能力和開放精神獲得了業內的認可,阿里技術工程師又了強烈的認同感,同時吸引了更多有能力的工程師加入。通過開源軟體和自主開發相結合,實現了更好可控性和更高可擴充套件性,阿里的技術品牌通過得到了加強。


640?wx_fmt=png

開源的商業模式


開源的商業模式有很多,有點跟產品強關聯,例如微軟和 Azure;有的利用開源構建生態,從生態裡面掙錢,例如 Google Android。在維基百科上列出林林總總 18 種方式,主要包括:

  • 通過服務來收費,例如 RedHat,IBM 等;

  • 通過雙 License 來收費,例如 MongoDB、Neo4J 等;

  • 通過商業版本提供高階功能,例如 Cloudera(Hortonworks 已經併入 Cloudera 抱團取暖)等;

  • 通過雲來收費,例如 AWS、Azure 等等;

  • 通過生態來收益,例如 Google 等等。

一個好的開源專案需要有價值,這是前提。同時需要降低使用者貢獻的門檻,還需要提供合理的使用者激勵。

參考資料:

  • https://en.wikipedia.org/wiki/Business_models_for_open-source_software

  • http://opensource.org/osd

  • https://linuxfoundation.cn/resources/open-source-guides/starting-open-source-project/

  • https://about.gitlab.com/20-years-open-source

  • http://github.com/baidu/paddle

  • https://www.oschina.net/news/74999/how-to-choose-a-license

  • http://www.gnu.org/licenses/license-list.html

作者簡介:老曹,CSDN 部落格專家,一個半吊子全棧工匠,二十多年的老碼農,三次世界 500 強企業的從業經歷,四家創業公司的投入,五篇鉛字短文,六次會議分享,七年時間見證一個生態系統的興衰,八種程式語言入門,九項國內外專利的署名,(《深入分散式快取》一書)十位作者之一。

部落格地址:https://blog.csdn.net/wireless_com

【完】


CSDN 開源開發者交流群

立即掃小編的微信二維碼加入吧!

加好友時請備註#開源+公司+職位#

如無備註,不會通過哦

640?wx_fmt=jpeg

 熱 文 推 薦 

☞ Facebook 十五年,扎克伯格回到了工程師的原點

☞ iPhone 大降價;谷歌再爆醜聞;京東雲金山雲迴應合併傳聞 | 極客頭條

☞ 從 C++98 到 C++17,超程式設計是如何演進的? | 技術頭條

☞ 剛剛!程式設計師集體榮獲2個冠軍,這份2018 IT報告還說這些!

☞ 程式碼“大換血”,以太坊能耗將減少99%背後的故事

☞ “微信之父”張小龍:我沒去過龍泉寺!

☞ Spark+Alluxio效能調優十大技巧

☞ 春運搶票靠加速包?試試這個Python開源專案吧



  

print_r('點個好看吧!');
var_dump('點個好看吧!');
NSLog(@"點個好看吧!");
System.out.println("點個好看吧!");
console.log("點個好看吧!");
print("點個好看吧!");
printf("點個好看吧!\n");
cout << "點個好看吧!" << endl;
Console.WriteLine("點個好看吧!");
fmt.Println("點個好看吧!");
Response.Write("點個好看吧!");
alert("點個好看吧!")
echo "點個好看吧!"

640?wx_fmt=gif點選“閱讀原文”,開啟 CSDN App 閱讀更貼心!

640?wx_fmt=png 喜歡就點選“好看”吧!