開源軟件 | 一文徹底搞懂許可證的定義、起源、分類及八大主流許可證,讓你選型不再頭疼

為什么開源軟件會存在許可證,許可證的起源與產生目的是為了解決什么問題?許可證的定義又是怎樣的?什么是Copyleft,與Copyright有何區別?開源軟件常見的許可證有哪些?這些許可證都有什么特點?接下來博主就逐一介紹。

1. 開源許可證的定義

開源許可證是一種法律協議,它規定了軟件代碼可以被如何使用、修改和分發。其中,著作權是指對于軟件代碼的創作者所擁有的法律權利,包括復制、發布、演繹等權利。分發是指分發指軟件作者向他人提供軟件源代碼或二進制代碼或二者的副本。

著作權法默認禁止共享,沒有許可證的軟件就不能免費地使用、修改、共享。

在開源許可證中,通常會涉及到著作權許可授權的問題。這些許可協議可以分為兩大類:強制性許可證和非強制性許可證。強制性許可證要求使用該軟件的用戶必須遵守特定的協議,否則將面臨訴訟風險。而非強制性許可證則允許用戶根據自己的需要使用、修改和分發軟件。

開源許可證存在的法律特性:合同性質和知識產權性質(著作權、專利權、商標權)

常見的開源許可證包括GNU通用公共許可證(GPL)、MIT許可證、Apache許可證等。每種許可證都有自己的特點和適用范圍,使用者需要根據自己的需求選擇合適的許可證。

2. 開源許可證的起源

開源許可證的起源可以追溯到20世紀90年代早期,當時自由軟件運動和Linux系統的興起促進了開源軟件的發展。1991年,GNU通用公共許可證(GPL)首次發布,這是第一個被廣泛采用的開源許可證之一。GPL被設計為保障軟件自由和開放性,它要求任何使用或修改受保護軟件的人必須在其發布時公開代碼,并且不得限制代碼的再分發。

1998年,開源軟件運動的領袖Eric Raymond和Bruce Perens共同創立了Open Source Initiative(OSI),以推廣和支持開源軟件的發展。OSI創建了一個開源定義(Open Source Definition),并認證了符合該定義的許可證。這些許可證包括GPL、BSD、MIT、Apache等。

在自由軟件運動之后,出現了大量優秀的開源軟件,而商業軟件開發商無情的竊取著革命的果實,商業軟件在開源軟件的基礎上開發新的軟件,實際上基于著作權法其開發的軟件屬于衍生作品,該作品依然為著作權法所保護,不同的是,商業軟件開發商所開發的衍生軟件一般不會再以開源軟件的形式出現。于是就產生了接下來的著佐權

3. 著佐權(Copyleft)

著佐權是一個由自由軟件運動所發展的概念,是一種利用現有著作權體制來保護所有用戶和二次開發者的自由的授權方式。在自由軟件授權方式中增加著佐權條款之后,該自由軟件除了允許使用者自由使用、散布、修改之外,著佐權許可證更要求使用者修改后的衍生作品必須要以同等的授權方式釋出以回饋社會。

著佐權(Copyleft)機制與著作權(Copyright)相對應

著佐權,是彌補著作權(Copyright,復制傳播的權利)不足的版權授權。它的授權方式與常用的版權授權方式并不相同。另有譯為反版權”、版權屬左”、左版”、版權所無”、版權左派”,或版責”,這些譯名可能有其意義上的偏差,比較貼切的翻譯應該是版責”或者左版”,使用版責”(即:傳播的責任)因為 Copyleft 雖然與常見的著作權模式不同,但不反對著作權的基本體制。

4. 開源許可證兩大目的

  • 保護開源軟件貢獻者: 規范受著作權保護的軟件的使用或者分發行為;
  • 保護開源軟件使用者:使用者按照許可證條款使用開源軟件,避免因侵犯貢獻者的利益產生糾紛。

5. 開源許可證認證機構及分類

5.1. 認證機構

  • OSI: OSI(Open Source Initiative,開放源代碼促進會)是一個旨在推廣開源軟件的非營利組織,它制定了一套開源軟件的定義和準則,像BSD、MIT和Apache協議就被OSI收錄。

    OSI根據OSD(開放源代碼定義)對開源許可證進行審核。

  • FSF:FSF(Free Software Foundation)也是一個非營利組織,致力于推廣自由軟件理念,并維護用戶權益;

    FSF根據FSD(自由軟件定義)對開源許可證進行審核

  • SPDX:SPDX(Software Package Data Exchange)是一個旨在標準化軟件組件和許可證信息的組織。

5.2. 分類

  • 著佐權型許可證:著佐權許可證更要求使用者修改后的衍生作品必須要以同等的授權方式(除非許可證或者版權聲明里面例外條款所規定的外)釋出以回饋社會。

    • 強著佐權型許可證:GPL(General Public License)衍生作品也需要以GPL許可證發布,不允許修改后和衍生的代碼作為閉源商業軟件發布和銷售
    • 弱著佐權型許可證:LGPL(Lesser General Public License)比GPL許可證寬松,允許商業軟件通過類庫引用方式使用LGPL類庫而不需要開源商業軟件的代碼,但是如果修改LGPL許可證的代碼或者衍生,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須采用LGPL許可證。

    一般將使用著佐權型許可證的開源軟件稱之為Copyleft軟件

  • 寬松型許可證:寬松型許可證是一種保證使用、修改、再分發的自由,同時授權將衍生軟件專有化的許可證。

    寬松型許可證限制較少,通常僅要求開源軟件使用者保留指定的聲明信息。Apache許可證和BSD許可證就是寬松型許可證,允許使用者在開源代碼基礎上進行二次開發并閉源銷售,對商業十分友好。

6. 八大主流開源許可證

6.1. 強著佐權型許可證 GPL 2.0(GNU General Public License 2.0)

  • 分發GPLv2軟件或其衍生作品時,必須提供源代碼或者提供獲取源代碼的途徑;
  • 任何基于GPLv2軟件的衍生作品必須在GPLv2下發布,確保衍生作品也保持開源;
  • GPLv2具有較強的copyleft特性,與其他許可證的兼容性有限。例如,它與后來的GPLv3在某些條款上不兼容,除非明確指出“GPLv2或任何后來的版本”。

涉及侵權GPL 2.0許可證的案件

6.2. 強著佐權型許可證 GPL 3.0(GNU General Public License 3.0)

  • 在分發GPLv3許可的軟件時,必須提供源代碼或者提供獲取源代碼的途徑;
  • GPLv3明確禁止任何嘗試使用軟件專利來限制其他用戶運行和分發軟件的行為;
  • GPLv3包含特定的條款來防止“數字版權管理”(DRM)技術限制GPLv3軟件的使用。要求分發有硬件限制的GPL軟件時,必須提供必要的“安裝信息”,以便用戶能夠運行軟件的修改版本。

6.3. 著佐權型許可證 AGPL 3.0(Affero General Public License 3.0)

  • 為了Copyleft條款能應用于在網絡上運行的應用程式(如Web應用),從而避免有人以應用服務提供商方式逃避GNU通用公眾特許條款;
  • 如果軟件通過網絡作為服務提供給用戶,服務提供者必須提供軟件的源代碼。

6.4. 弱著佐權型許可證 LGPL 3.0(Lesser General Public License LGPL 3.0)

  • 是GNU為了得到更多的甚至是商用軟件開發商的支持而提出的;
  • 允許商業軟件通過類庫引用方式使用LGPL類庫而不需要開源商業軟件的代碼。這使得采用LGPL協議的開源代碼可以被商業軟件作為類庫引用并發布和銷售;
  • 但是如果修改LGPL下的軟件代碼或者衍生,則所有修改的代碼,涉及修改部分的額外代碼和衍生的代碼都必須采用LGPL許可證。

6.5. 弱著佐權型許可證 MPL(The Mozilla Public License)

Netscape公司認為GPL許可證沒有很好地平衡開發者對源代碼的需求和他們利用源代碼獲得的利益,于是申請了MPL許可證:

  • MPL允許免費重發布、免費修改,但要求修改后的代碼著作權權歸軟件的創建者;
  • 對于經MPL許可證發布的源代碼的修改也要以MPL許可證的方式再許可出來,以保證其他人可以在MPL的條款下共享源代碼。

6.6. 寬松型型許可證 Apache License

由Apache軟件基金會發布,主要特點如下:

  • 復制或發布衍生作品時,需要提供許可證副本,修改聲明,先前作品的著作權、專利、商標的權屬聲明等文件。對修改過的文件進行聲明;
  • 使用者也可以在需要的時候修改代碼來滿足需要并作為開源或商業產品發布/銷售。

6.7. 寬松型型許可證 BSD(Berkly Software Distribution)

  • BSD由于允許使用者修改和重新發布代碼,也允許使用或在BSD代碼上開發商業軟件發布和銷售;
  • 二次發布時需要保留原來代碼的著作權聲明和許可證原文以及免責聲明;
  • 不可以用開源代碼的作者/機構名字和原來產品的名字做市場推廣。

6.8. 寬松型型許可證 MIT(Massachusetts Institute of Technology)

  • 作者只想保留著作權,無其他任何限制。
  • 必須在你的發行版里包含原許可證的聲明,無論你是以二進制發布的還是以源代碼發布的。

見到使用了 Apache、BSD、MIT協議類型的開源軟件,閉上眼選就對了!(哈哈,當然是開玩笑了:也要考慮下軟件的活躍度,以及有無公開高危漏洞因素)

7. 參考

[1] 邁向開源世界:如何正確看待開源軟件,避免六大誤區
[2] 最高人民法院知識產權法庭裁判要旨摘要(2023)


推薦閱讀:

  • 邁向開源世界:如何正確看待開源軟件,避免六大誤區
  • 供應鏈安全項目in-toto開源框架詳解
  • 從SLSA看軟件供應鏈面臨哪些威脅及對應解決方案
  • 解讀 | Synopsys發布2024年開源安全和風險分析報告OSSRA
  • 剖析Google SLSA供應鏈完整性框架
  • 「 網絡安全常用術語解讀 」軟件物料清單SBOM詳解
  • 「 網絡安全常用術語解讀 」SBOM主流格式CycloneDX詳解
  • 「 網絡安全常用術語解讀 」SBOM主流格式SPDX詳解
  • 「 網絡安全常用術語解讀 」SBOM主流格式CycloneDX詳解
  • 「 網絡安全常用術語解讀 」軟件物料清單SBOM詳解
  • 「 網絡安全常用術語解讀 」軟件成分分析SCA詳解:從發展背景到技術原理再到業界常用檢測工具推薦

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14561.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14561.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14561.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[c++] 小游戲 能量1.0.1 版本 zty出品

大家好 緊急修改&#xff0c;發現判斷游戲是否結束部分有問題&#xff0c;緊急修改bug&#xff0c;對大家造成的不便我深感歉意&#xff0c;對不起 先贊后看 養成習慣 code&#xff1a; #include<bits/stdc.h> #include<windows.h> using namespace std; int rg…

Zabbix實現7x24小時架構監控

上篇&#xff1a;https://blog.csdn.net/Lzcsfg/article/details/138774511 文章目錄 Zabbix功能介紹Zabbix平臺選擇安裝Zabbix監控端部署MySQL數據庫Zabbix參數介紹登錄Zabbix WEBWEB界面概覽修改WEB界面語言添加被控主機導入監控模板主機綁定模板查看主機狀態查看監控數據解…

6.封裝讀寫游戲數據的功能

前置知識&#xff1a;5.模仿CheatEngine實現鎖血無敵功能&#xff08;封裝它的代碼&#xff09; 封裝功能.cpp文件 #include "封裝功能.h"GAMECheat::GAMECheat(unsigned pid, unsigned _baseAdr, unsigned _readTime) {readTime _readTime;baseAdr _baseAdr;hPr…

代碼隨想錄算法訓練營第三十四天 | 理論基礎、455.分發餅干、376、擺動序列、53.最大子序和

目錄 理論基礎 455.分發餅干 思路 代碼 376.擺動序列 思路 代碼 53.最大子序和 思路 代碼 理論基礎 代碼隨想錄 455.分發餅干 代碼隨想錄 思路 可以是大餅干優先滿足大胃口&#xff0c;也可以是小餅干優先滿足小胃口。 代碼 class Solution:def findContentChildre…

ArkUI-X開發指南:【SDK配置和構建說明】

ArkUI-X SDK配置和構建說明 ArkUI-X SDK是ArkUI-X開源項目的編譯產物&#xff0c;可將ArkUI-X SDK集成到現有Android和iOS應用工程中&#xff0c;使開發者基于一套ArkTS主代碼&#xff0c;就可以構建支持多平臺的精美、高性能應用。SDK內容包含ArkUI跨平臺運行時&#xff0c;組…

安裝SSL證書能提高網站訪客嗎?

在當今互聯網時代&#xff0c;網站的安全性和用戶體驗至關重要。隨著網絡攻擊和數據泄露事件的不斷增加&#xff0c;用戶對網站的信任也變得越來越重要。SSL證書是一種數字證書&#xff0c;可以在Web服務器和網頁瀏覽器之間建立加密鏈接&#xff0c;確保網站傳輸的數據安全&…

【HarmonyOS嘗鮮課】- 前言

面向人群 本課程適用于HarmonyOS應用開發的初學者。 有無經驗的開發者都可以輕松掌握ArkTS語言聲明式開發范式&#xff0c;體驗更簡潔、更友好的HarmonyOS應用開發旅程。 什么是HarmonyOS HarmonyOS&#xff08;鴻蒙操作系統&#xff09;是由華為技術有限公司開發的全場景分…

B站自動回復插件_無需千粉,輕松適配引流拉新資源分享

項目介紹 B站關鍵詞自動回復插件&#xff0c;無需千粉&#xff0c; 很適合做流量做引流做私欲的朋友&#xff0c; 前期沒有千粉是無法開啟官方自動回復的&#xff0c; 適當的情況下可以用這個插件頂一下&#xff0c; 三聯好評領取資源的打法真的超級漲粉&#xff0c; 感謝插件…

【OceanBase診斷調優】—— KVCache 排查手冊

原文鏈接&#xff1a;OceanBase分布式數據庫-海量數據 筆筆算數 本文介紹 KVcache 相關問題的排查方法。 KVCache 相關概念 在進行排查前&#xff0c;需要了解幾個概念。 pin 一個 cache 塊 ( memblock ) 被 pin 住&#xff0c;表示它正在被引用。 cache 的由多個定長的塊組成…

HAL庫點LED燈

文章目錄 一、創建CubeMX項目操作步驟1.STM32CubeMX創建工程2.選擇芯片3.Pinout & Configuration配置4.Clock Configuration配置5.Project Manager配置 二、實驗&#xff08;一&#xff09;LED流水燈1.Keil修改代碼2.實驗現象3.keil波形仿真 &#xff08;二&#xff09;2只…

代碼隨想錄(棧和隊列)

用棧實現隊列&#xff08;Leetcode232&#xff09; package 棧和隊列;import java.util.ArrayList; import java.util.Stack; 思路&#xff1a;1、用一個棧stack2來存壓入的數&#xff0c;當要pop或peek操作時再壓入stack中&#xff0c;實現隊列順序2、不是每次pop都從stack2中…

沒有CAN硬件,在Linux下模擬使用Socket CAN

即使沒有實際的CAN硬件,我們仍然可以在Linux下使用socketcan進行模擬。這可以通過使用虛擬的CAN接口(vcan)來實現。vcan接口是Linux內核提供的虛擬CAN總線接口,適用于開發和測試socketcan應用。 以下是如何設置和使用vcan接口的步驟: 1. 加載vcan模塊 首先,你需要確保…

變量命名的藝術:讓你的代碼更具可讀性

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、引言&#xff1a;為何變量命名如此重要&#xff1f; 二、變量命名的基本規則 1. 避免數…

卷爆短劇出海:五大關鍵,由AIGC重構

短劇高溫下&#xff0c;談談AIGC的助攻路線。 短劇&#xff0c;一個席卷全球的高溫賽道。 以往只是踏著霸總題材&#xff0c;如今&#xff0c;內容循著精品化、IP化的自然發展風向&#xff0c;給內容、制作、平臺等產業全鏈都帶來新機&#xff0c;也讓短劇消費走向文化深處&am…

Docker僅需3步搭建免費私有化的AI搜索引擎-FreeAskInternet!

簡介 FreeAskInternet 是一個完全免費、私有且本地運行的搜索引擎&#xff0c;并使用 LLM 生成答案&#xff0c;無需 GPU。用戶可以提出問題&#xff0c;系統會進行多引擎搜索&#xff0c;并將搜索結果合并到ChatGPT3.5 LLM中&#xff0c;并根據搜索結果生成答案。 什么是 Fr…

重學java 39.多線程 — 線程安全

逐漸成為一個情緒穩定且安靜成長的人 ——24.5.24 線程安全 什么時候發生&#xff1f; 當多個線程訪問同一個資源時&#xff0c;導致了數據有問題&#xff0c;出現并發問題&#xff0c;數據不能及時更新&#xff0c;導致數據發生錯誤&#xff0c;出現線程安全問題 多線程安全問…

紋理映射技術在AI去衣中的藝術與科技融合

引言&#xff1a; 在數字圖像處理的世界里&#xff0c;AI去衣技術正逐步揭開其神秘的面紗。這門技術結合了深度學習的智能算法與圖形學的先進手段&#xff0c;以實現對圖像中衣物的智能識別與處理。在這一過程中&#xff0c;紋理映射技術發揮著至關重要的作用。本篇博客將深入探…

變量命名的藝術:從蛇形到駝峰

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、蛇形命名法的魅力 二、類名和模塊名的特殊規則 三、駝峰命名法的魅力與挑戰 四、保持…

【kubernetes】探索k8s集群中kubectl的陳述式資源管理

目錄 一、k8s集群資源管理方式分類 1.1陳述式資源管理方式&#xff1a;增刪查比較方便&#xff0c;但是改非常不方便 1.2聲明式資源管理方式&#xff1a;yaml文件管理 二、陳述式資源管理方法 2.1查看版本信息 2.2查看資源對象簡寫 2.3配置kubectl自動補全 2.4node節點…

初始Java篇(JavaSE基礎語法)—— 內部類

找往期文章包括但不限于本期文章中不懂的知識點&#xff1a; 個人主頁&#xff1a;我要學編程(?_?)-CSDN博客 所屬專欄&#xff1a;JavaSE 目錄 內部類的概念 內部類的種類 使用舉例&#xff1a; 1. 靜態內部類&#xff1a; 2. 實例內部類 3. 局部內部類 4. 匿名內部…