1. 程式人生 > >如何選擇開源許可協議(一):瞭解協議

如何選擇開源許可協議(一):瞭解協議

目前國內開源專案正在逐漸升溫,中國也開始有不少優秀的開源專案突顯出來。在大家摩拳擦掌準備加入開源大軍時,也要知道這個圈子裡的規則。技術人員不能只是研究技術,任何圈子都有規則,要知道了才能玩得好。前段時間有件關於開源軟體的事情挺熱鬧的,關於國內一個開發者把自己作品開源出來被別的公司的人拿去包裝成自己的產品高價賣出去。大部分做開源軟體的開發者都不太怎麼關注版權這些,具體微博如下:

hoowa_sun:
做開源後,發現大部分都被別人拿去學習,然後copy,然後自己閉源賣出去。這裡不缺乏大公司,有一家公司拿我的開源系統修改後賣給了一個國內的運營商,賣的還非常貴至少幾十萬一套。所以我鄭重的建議大家,做軟體還是要英文版開源,中文版封閉不要開源。

在國內大家習慣了使用盜版、破解,看到這種免費的軟體也覺得是理所當然的拿來主義,甚至直接封裝到自己的商業元件賣出去。如果你正在這樣做,馬上停下來研究一下使用的這些開源元件的許可協議,不然某一天你會意外收到一封法院的傳票。如果你在開發或者準備開發開源軟體,但尚對開源許可協議不瞭解,也看下這篇文章,選擇一種開源許可協議保護你的開源軟體。

常見的開源許可協議有:GPL、LGPL、BSD、Apache Licence vesion 2.0、MIT。這些協議有什麼區別呢?

GPL,全稱 GNU General Public License。它的主要內容為:只要在一個軟體中使用(“使用”指類庫引用或者修改後的程式碼) GPL 協議的產品,則該軟體產品必須也採用GPL協議,既必須也是開源和免費。這個協議就不太適合商用軟體,或者準備使用GPL開源元件的商用專案。基於這個協議的專案,極大的提高了開源軟體的數量。上面那個微博的案例,如果作者使用了GPL協議,而使用方沒有公開原始碼就是違反了協議。目前用的多的是GPLV1,GPLV2。這兩個什麼區別看後面那張樹形圖。採用這個協議的開源軟體有:Linux、 MySQL.

LGPL,最初是Library GPL的縮寫,後來改稱作Lesser GPL。由於GPL太嚴格,限制了很多商用軟體使用GPL元件才推出了這個LGPL。LGPL允許商業軟體通過引用類庫的方式使用LGPL元件(不直接使用原始碼),這樣可以不需要開源商業軟體的程式碼。但是如果要修改原始元件的程式碼,則涉及修改部分的程式碼和基於原來程式碼衍生的程式碼都必須採用LGPL協議。LGPL不適合以LGPL協議為基礎的程式碼進行二次開發的商業軟體,但是商用軟體可以採用編譯後的類庫引用就不需要公開原始碼了。採用這個協議的開源軟體有: JBoss、 FCKeditor 、 Hibernate。之前extjs就因為從LGPL轉換到GPL帶來了不少的震動。

詳情點選

BSD,全稱 Berkeley Software Distribution。這個協議相對上面兩個協議寬鬆很多,允許使用者修改和重新發布程式碼,也允許使用或在BSD程式碼基礎上開發商業軟體釋出和銷售,因此是適用於商業軟體的。使用者別太高興,使用時還必須做到滿足三個條件:

  • 1)如果再發布的產品中包含原始碼,則在原始碼中必須帶有原來程式碼中的BSD協議。
  • 3)不可以用開原始碼的作者/機構名字和原來產品的名字做市場推廣。適用BSD協議的開源軟體有: nginx、CruiseControl、Redis。

apache Licence vesion 2.0,這個協議除了為使用者提供版權許可之外,還有專利許可。與BSD協議許可權類似, 允許程式碼修改,再發布,適用商業軟體。但是也需要滿足以下條件:

  • 1)需要給程式碼的使用者一份Apache Licence。
  • 2)如果你修改了程式碼,需要再被修改的檔案中說明。
  • 3)在延伸的程式碼中(修改和有原始碼衍生的程式碼中)需要帶有原來程式碼中的協議,商標,專利宣告和其他原來作者規定需要包含的說明。
  • 4)如果再發布的產品中包含一個Notice檔案,則在Notice檔案中需要帶有Apache Licence。你可以在Notice中增加自己的許可,但不可以表現為對Apache Licence構成更改。

除了這些條件它還有這些好處:

  • 1)永久權利 一旦被授權,永久擁有。
  • 2)全球範圍的權利 在一個國家獲得授權,適用於所有國家。假如你在美國,許可是從印度授權的,也沒有問題。
  • 3)授權免費 無版稅, 前期、後期均無任何費用。
  • 4)授權無排他性 任何人都可以獲得授權
  • 5)授權不可撤消 一旦獲得授權,沒有任何人可以取消。比如,你基於該產品程式碼開發了衍生產品,你不用擔心會在某一天被禁止使用該程式碼

使用apache Licence vesion 2.0協議的開源軟體有:Hadoop 、apache httpserver、Spring Framework、MongoDB 。

MIT,源自麻省理工學院(Massachusetts Institute of Technology, MIT),又稱X11協議。MIT與BSD類似,但是比BSD協議更加寬鬆,是目前最少限制的協議。這個協議唯一的條件就是在修改後的程式碼或者發行包包含原作者的許可資訊。適用商業軟體。使用MIT的軟體專案有:jquery、Node.js。

列出了常用協議,還有一些比較常用的大家就谷歌了,比如: Mozilla Public License、Creative Commons、Eclipse Public License 1.0等。

有一篇部落格的樹形圖很好闡述了當前主流許可協議的區別。

另附一張目前github上專案採用的許可協議比例圖:

相關推薦

如何選擇開源許可協議瞭解協議

目前國內開源專案正在逐漸升溫,中國也開始有不少優秀的開源專案突顯出來。在大家摩拳擦掌準備加入開源大軍時,也要知道這個圈子裡的規則。技術人員不能只是研究技術,任何圈子都有規則,要知道了才能玩得好。前段時間有件關於開源軟體的事情挺熱鬧的,關於國內一個開發者把自己作品開源

HTTP協議介紹

ans html 通過 www. cat hyper res lan 了解 HTTP協議(一):介紹 RFC 2616定義了今天普遍使用的一個版本——HTTP 1.1。HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)

UART0串列埠程式設計通訊協議設計;RS232標準

UART0串列埠程式設計(一) 嵌入式系統之間採用通訊方式交換資料,序列通訊是一種最基本的通訊手段。現在由於各類CPU均集成了UART部件。本節對串列埠程式設計時如何設計串列埠通訊協議,以及對RS232介面進行了說明。 1.    通訊協議設計 在進行通訊時,每次需要傳送的

SpringCloud瞭解SpringCloud

一、SpringCloud 簡介 首先看看SpringCloud官方的介紹。 Spring Cloud provides tools for developers to quickly build some of the common patterns in distrib

安卓學習日記瞭解安卓架構(linux核心層、系統執行庫層、應用框架層、應用層)

10)timed device: 提供了對裝置進行定時控制的功能,目前支援vibrator和LED裝置。原始碼位於drivers/staging/android /timed_output.c(timed_gpio.c)。 11)Yaffs2 :是檔案系統 Android採用Yaffs2作為MTD n

C++伺服器瞭解Linux下socket程式設計

最近想要用C++寫個socket的伺服器,用於日常的專案開發。 不過,我是新手,那就慢慢地學習一下吧。 Server #include<iostream> using namespace std; //head files of

網路協議篇之SNMP協議——SNMP報文協議

    (前言:最近工作中遇到大量的網路協議開發,現就其中一些網路協議的基礎知識進行整理,文中借鑑了一些大神的整理,後面會貼上鍊接,如侵刪)        簡單網路管理協議(SNMP)是TCP/IP協議簇的一個應用層協議。在1988年被制定,並被Internet體系結構委員

jQuery -- 光陰似箭初見 jQuery -- 基本用法,語法,選擇

jQuery -- 知識點回顧篇(一):初見jQuery -- 基本用法,語法,選擇器 1. 使用方法   jQuery 庫位於一個 JavaScript 檔案中,其中包含了所有的 jQuery 函式。   網頁需要使用到 jQuery 時,需要先在網頁中引入 jQuery 的 js檔案。

Windows網路程式設計TCP/IP協議

概述 這個協議是一個四層協議: 應用層,主要協議有HTTP、FTP等 傳輸層,主要協議有TCP、UDP等 網路層,主要協議有IP等 鏈路層,主要協議有ICMP等 下層中的協議總是為上層中的協議服務的,比如說應用層的HTTP、FTP協議都是基於T

pyspider 爬蟲教程HTML 和 CSS 選擇

    雖然以前寫過 如何抓取WEB頁面 和 如何從 WEB 頁面中提取資訊。但是感覺還是需要一篇 step by step 的教程,不然沒有一個總體的認識。不過,沒想到這個教程居然會變成一篇譯文,在這個爬蟲教程系列文章中,會以實際的例子,由淺入深討論爬取(抓取和解析)的一些關鍵

jmeter教程url、uri及協議初識

jmeter是用純java語言實現的一個,用於介面、及效能測試的工具。關於jmeter的誕生,純屬歪打正著,就像當初unix系統的誕生,也是屬於歪打正著。有關的故事,可以自己去網上查。jmeter教程,原先在公司也寫過一些,不過,原先也只是用於公司內部分享用的,教程裡面的例子,也是用的公司的專案。現

爬蟲入門系列快速理解HTTP協議

爬蟲入門系列目錄: 4月份給自己挖一個爬蟲系列的坑,主要涉及HTTP 協議、正則表示式、爬蟲框架 Scrapy、訊息佇列、資料庫等內容。 爬蟲的基本原理是模擬瀏覽器進行 HTTP 請求,理解 HTTP 協議是寫爬蟲的必備基礎,招聘網站的爬蟲崗位也赫然寫著熟練掌握HTTP協議規範,寫

Java常用的八種排序演算法與程式碼實現氣泡排序法、插入排序法、選擇排序法

這三種排序演算法適合小規模資料排序 ---   共同點:基於比較,時間複雜度均為O(n2),空間複雜度均為O(1)(原地排序演算法)   不同點:插入排序和氣泡排序是穩定的排序演算法,選擇排序不是 ---   穩定排序演算法:可以保持數值相等的兩個物件,在排序之

運維 如何選擇最合適的伺服器方案伺服器硬體配置

我們拋開 租用伺服器還是自行購買伺服器進行託管的問題,在這篇文章裡,我們討論的是無論租用或託管都要面臨的一個問題,那就是選擇伺服器的硬體配置。因為上帝不會給你一臺伺服器來滿足所有需求,解決所有的問題。尤其是我們身處在這樣一個飛速變化的時代,當你還在為最新款最強勁的CPU乍舌不

大學生學程式設計為什麼要選擇名程式設計師?

從這篇文章開始準備做一個大學生學程式設計系列文章,主要幫助一些還在程式設計路上徘徊的小夥伴,作為一個過來人的身份總結一些程式設計經驗以及心得,在自學的過程中走了很多的彎路,在此通過這個專欄分享給需要程式設計的小夥伴。 無數個人心中都有一個程式設計夢,想著自己能夠做在電腦旁邊敲程式碼,做出

機器學習 python三種特徵選擇方法

特徵選擇的三種方法介紹: 過濾型: 選擇與目標變數相關性較強的特徵。缺點:忽略了特徵之間的關聯性。 包裹型: 基於線性模型相關係數以及模型結果AUC逐步剔除特徵。如果剔除相關係數絕對值較小特徵後

開發開源爬蟲框架系列分析nutch,scrapy的爬蟲設計

1、Scrapy Engine(Scrapy引擎) Scrapy引擎是用來控制整個系統的資料處理流程,並進行事務處理的觸發。更多的詳細內容可以看下面的資料處理流程。 2、Scheduler(排程) 排程程式從Scrapy引擎接受請求並排序列入佇列,並在Scrapy引擎發出請求後返還給他們。 3、D

Pomelo網易開源基於 Node.js 的遊戲服務端框架

  Pomelo 是基於 Node.js 的高效能、分散式遊戲伺服器框架。它包括基礎的開發框架和相關的擴充套件元件(庫和工具包),可以幫助你省去遊戲開發枯燥中的重複勞動和底層邏輯的開發。Pomelo 不但適用於遊戲伺服器開發, 也可用於開發高實時 Web 應用,它的分散式架構可以使 Pomelo 比普通

聊聊Dubbox為何選擇

1. 前言 隨著現在網際網路行業的發展,越來越多的框架、中介軟體、容器等開源技術不斷地湧現,更好地來服務於業務,解決實現業務的問題。然而面對眾多的技術選擇,我們要如何甄別出適合自己團隊業務的技術呢?對於人來說,鞋子過大,可能影響奔跑的速度,鞋子過小,可能影響身體的成長。技術對於業務也是如此的關係。 所以,相

Mongoose為什麼選擇Mongoose

如果想要在NodeJS中連線MongoDB,可以選擇直接使用mongodb為NodeJS寫的驅動包,但我更推薦使用一個比較成熟的中介軟體:Mongoose。 官方定義 Mongoose: elegant mongodb object modelin