首頁 後端開發 Golang go語言是什麼開源協議

go語言是什麼開源協議

Jun 07, 2021 pm 02:20 PM
go語言 開源協議

go語言採用BSD開源協定。 BSD開源協議是給用戶很大自由的協議,可以自由的使用,修改原始碼,也可以將修改後的程式碼作為開源或專有軟體再發布。 BSD代碼鼓勵程式碼共享,但需要尊重代碼作者的著作權。

go語言是什麼開源協議

本教學操作環境:windows10系統、GO 1.11.2、Dell G3電腦。

go語言是什麼開源協定?

Go語言來自貝爾實驗室,由一門Limbo語言發展而來。 Limbo用於開發在小型電腦上的分散式應用,支援模組化程式設計、編譯期和運行時的強型別檢測,進程內基於有類型的通訊通道,原子性垃圾收集和簡單的抽象資料類型,其宗旨為:即使在沒有硬體保護的小型機上也能安全運作。 Go和Limbo是由同一批人開發的,具有同樣優秀的特性。 Go於2007年出生在谷歌,Google支持使用20%的自由時間發展實驗項目,與2009年問世。 Go語言是開源的,採用BSD協定。

BSD開源協定是給於使用者很大自由的協定。可以自由的使用,修改原始碼,也可以將修改後的程式碼作為開源或專有軟體再發布。當你發佈使用了BSD協定的程式碼,或是以BSD協定程式碼為基礎做二次開發自己的產品時,需要滿足三個條件:

  • 如果再發行的產品中包含原始碼,則在原始碼中必須帶有原始程式碼中的BSD協定。

  • 如果再發布的只是二進位類別庫/軟體,則需要在類別庫/軟體的文件和版權聲明中包含原始程式碼中的BSD協定。

  • 不可以用開源程式碼的作者/機構名字和原來產品的名字做市場推廣。

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

擴充資料:五種開源協定的比較(BSD,Apache,GPL,LGPL,MIT)

BSD開源協定(original BSD license、FreeBSD license、Original BSD license)

BSD開源協定是一個給於使用者很大自由的協定。基本上使用者可以」為所欲為」,可以自由的使用,修改原始碼,也可以將修改後的程式碼作為開源或專有軟體再發布。

但」為所欲為」的前提當你發佈使用了BSD協定的程式碼,或則以BSD協定程式碼為基礎做二次開發自己的產品時,需要滿足三個條件:

如果再發布的產品中包含原始碼,則在原始程式碼中必須帶有原始程式碼中的BSD協定。如果再發布的只是二進位類別庫/軟體,則需要在類別庫/軟體的文檔和版權聲明中包含原始程式碼中的BSD協定。不可以用開源程式碼的作者/機構名字和原來產品的名字做市場推廣。

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

Apache Licence 

Apache Licence是著名的非營利開源組織Apache所採用的協定。該協議和BSD類似,同樣鼓勵程式碼共享和尊重原作者的著作權,同樣允許程式碼修改,再發布(作為開源或商業軟體)。需要滿足的條件也和BSD類似:

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

Apache Licence也是對商業應用友善的授權。用戶也可以在需要的時候修改程式碼來滿足需求並作為開源或商業產品發布/銷售。

GPL(GNU General Public License)

我們很熟悉的Linux就是採用了GPL。 GPL協定和BSD, Apache Licence等鼓勵程式碼重用的授權很不一樣。 GPL的出發點是程式碼的開源/免費使用和引用/修改/衍生代碼的開源/免費使用,但不允許修改後和衍生的代 碼做為閉源的商業軟體發布和銷售。這也就是為什麼我們能用免費的各種linux,包括商業公司的linux和linux上各種各樣的由個人,組織,以及商 業軟體公司開發的免費軟體了。

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

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

其它細節如再發布的時候需要伴隨GPL協定等和BSD/Apache等類似。

LGPL(GNU Lesser General Public License)

#LGPL是GPL的一個為主要為類別庫使用設計的開源協定。且GPL要求任何使用/修改/衍生之GPL類別庫的的軟體必須採用GPL協定不同。 LGPL 讓商業軟體可以透過類別庫引用(link)方式使用LGPL類別庫而不需要開源商業軟體的程式碼。這使得採用LGPL協議的開源程式碼可以被商業軟體作為類庫引用並 發布和銷售。

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

GPL/LGPL都保障原作者的智慧財產權,避免有人利用開源程式碼複製並開發類似的產品

##MIT(MIT)

MIT是和BSD一樣寬範的許可協議,作者只想保留版權,而無任何其他了限制.也就是說,你必須在你的發行版裡包含原許可協議的聲明,無論你是以二進制發布的還是以原始碼發布的.

推薦學習:

Golang教程

以上是go語言是什麼開源協議的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go語言中用於浮點數運算的庫有哪些? Go語言中用於浮點數運算的庫有哪些? Apr 02, 2025 pm 02:06 PM

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

Go的爬蟲Colly中Queue線程的問題是什麼? Go的爬蟲Colly中Queue線程的問題是什麼? Apr 02, 2025 pm 02:09 PM

Go爬蟲Colly中的Queue線程問題探討在使用Go語言的Colly爬蟲庫時,開發者常常會遇到關於線程和請求隊列的問題。 �...

在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? 在 Go 語言中,為什麼使用 Println 和 string() 函數打印字符串會出現不同的效果? Apr 02, 2025 pm 02:03 PM

Go語言中字符串打印的區別:使用Println與string()函數的效果差異在Go...

GoLand中自定義結構體標籤不顯示怎麼辦? GoLand中自定義結構體標籤不顯示怎麼辦? Apr 02, 2025 pm 05:09 PM

GoLand中自定義結構體標籤不顯示怎麼辦?在使用GoLand進行Go語言開發時,很多開發者會遇到自定義結構體標籤在�...

在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? 在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? Apr 02, 2025 pm 04:54 PM

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

Go語言中`var`和`type`關鍵字定義結構體的區別是什麼? Go語言中`var`和`type`關鍵字定義結構體的區別是什麼? Apr 02, 2025 pm 12:57 PM

Go語言中結構體定義的兩種方式:var與type關鍵字的差異Go語言在定義結構體時,經常會看到兩種不同的寫法:一�...

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? 在Go編程中,如何正確管理Mysql和Redis的連接與釋放資源? Apr 02, 2025 pm 05:03 PM

Go編程中的資源管理:Mysql和Redis的連接與釋放在學習Go編程過程中,如何正確管理資源,特別是與數據庫和緩存�...

See all articles