五中常見開源協議整理

2022-07-17 10:27:12 字數 1774 閱讀 6661

** :  

開源軟體(open source software)對我們來說越來越不陌生,開源軟體一方面讓我們免費享用到了「免費的午餐」,另一方面有效的利用和學習開源軟體,也能促進我們開發軟體時的效率、提公升軟體質量。但是在使用和借鑑開源軟體的時候,我們不得不關心一下它對使用者的諸多限制,比較常見的方式即協議授權(licence),這些協議中明確說明了使用者應該遵循的原則。

現在開源協議眾多,通過open source initiative組織批准的開源協議有50多種,本文提到的五種常見協議也在其中,而且出現頻率非常頻繁,我們在使用開源**或者開放自己源**的時候,也應該盡量選擇這些協議。

bsd開源協議是乙個給予使用者很大自由的協議。開發者可以自由使用和修改源**,也可以講修改後的源**作為開源或者專有軟體再發布。但是有一下幾個要求:

bsd **鼓勵**共享,但需要尊重**作者的著作權。bsd由於允許使用者修改和重新發布**,也允許使用或在bsd**上開發商業軟體發布和銷售,因此是對商業整合很友好的協議。而很多的公司企業在選用開源產品的時候都首選bsd協議,因為可以完全控制這些第三方的**,在必要的時候可以修改或者二次開發。

apache licence是著名的非盈利開源組織apache採用的協議。該協議和bsd類似,同樣鼓勵**共享和最終原作者的著作權,同樣允許源**修改和再發布。但是也需要遵循以下條件:

apache licence也是對商業應用又好的許可。使用者也可以再需要的時候修改**來滿足並作為開源或商業產品發布/銷售。

我們很熟悉的linux就是採用了gpl。gpl協議和bsd, apache licence等鼓勵**重用的許可很不一樣。gpl的出發點是**的開源/免費使用和引用/修改/衍生**的開源/免費使用,但不允許修改後和衍生的**做為閉源的商業軟體發布和銷售。這也就是為什麼我們能用免費的各種linux,包括商業公司的linux和linux上各種各樣的由個人,組織,以及商業軟體公司開發的免費軟體了。

gpl協議的主要內容是只要在乙個軟體中使用(「使用」指類庫引用,修改後的**或者衍生**)gpl 協議的產品,則該軟體產品必須也採用gpl協議,既必須也是開源和免費。這就是所謂的」傳染性」。gpl協議的產品作為乙個單獨的產品使用沒有任何問題,還可以享受免費的優勢。

由於gpl嚴格要求使用了gpl類庫的軟體產品必須使用gpl協議,對於使用gpl協議的開源**,商業軟體或者對**有保密要求的部門就不適合整合/採用作為類庫和二次開發的基礎。

其它細節如再發布的時候需要伴隨gpl協議等和bsd/apache等類似。

lgpl是gpl的乙個為主要為類庫使用設計的開源協議。和gpl要求任何使用/修改/衍生之gpl類庫的的軟體必須採用gpl協議不同。lgpl允許商業軟體通過類庫引用(link)方式使用lgpl類庫而不需要開源商業軟體的**。這使得採用lgpl協議的開源**可以被商業軟體作為類庫引用並發布和銷售。

但是如果修改lgpl協議的**或者衍生,則所有修改的**,涉及修改部分的額外**和衍生的**都必須採用lgpl協議。因此lgpl協議的開源**很適合作為第三方類庫被商業軟體引用,但不適合希望以lgpl協議**為基礎,通過修改和衍生的方式做二次開發的商業軟體採用。

gpl/lgpl都保障原作者的智財權,避免有人利用開源**複製並開發類似的產品

mit是和bsd一樣寬範的許可協議,作者只想保留版權,而無任何其他了限制。也就是說,你必須在你的發行版裡包含原許可協議的宣告,無論你是以二進位制發布的還是以源**發布的.

烏克蘭程式設計師paul bagwell,畫了一張分析圖,說明應該怎麼選擇。阮一峰對圖進行了漢化,如下圖:

Nginx五中常用負負載,實用總結

ginx的upstream目前支援的5種方式的分配 1 輪詢 預設 每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。upstream backserver 2 指定權重 指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。upstream b...

matlab個人筆記(五 中)

繪圖 二 3月23日 補 二維高階繪圖 特殊圖形繪製 bar 柱狀圖 area 填充圖 pie 餅狀圖 errobar 圖形加上誤差範圍 hist 直方圖 stairs 階梯圖 stem 火柴桿圖 contour 等高線繪圖 fill 多邊形填充圖 feather 羽毛圖 comet 彗星圖 qui...

Androidbutton事件的五中寫法總結

button事件的五中寫法 1 匿名內部類 2 類實現view.onclicklistener介面 3 建立例項化介面物件 4 使用內部類 5 自己定義方法,配置android onclick屬性 import android.media.jetplayer.onjeteventlistener i...