各種開源協議


Posted by Kled on 2021-12-09

參考此篇文章
避免無謂的商業授權費,搞懂LGPL與GPL的不同
**那些 GitHub 所聲明的開源協議都是什麼意思

如果自己想開源, 不知道怎麼寫協議, 可以去opensource, 去參考別人協議怎麼寫的

這篇文章一開始其實主要是想要了解QT跨平台UI的授權模式 (Javascript的跨平台Ui是Electron)
但後面會介紹其他常見的協議

PyQt 與 PySide

PyQtPySide 是不同的開發團隊所組成的,所以在選擇上,就有相當大的差別,其中 PyQt商業授權以及 GPL 的並行,也就是要馬你付授權金(550美元/1個開發者),要馬就是你使用後就要套用 GPL 全部開源

在 QT 4.7版以前,也是複合型的授權。你可以使用免費的 GPL,或者是”每月“459美元的授權費
但是在 QT 4.7版以後改成了現在的 LGPL 授權(因為 GPL 感染性,所以不是所有人都可以改,只有撰寫的那個團隊才行)

GNU General Public License (GNU GPL)

保障了所有用戶端的自由使用權利,包含共享、修改及合法的自由運用,簡單來說若是 GPL,你可以自由地使用如複製、修改、發布服務等,並且沒有流量及數量上的限制,這樣自由的權利是以「copyleft」為依據,如開發的產品中使用copyleft 條款之後,該產品可允許使用者自由使用、散布、改作,但依據了copyleft 條款,一但你使用了跟 GPL 有關的套件做開發,你也被必須要求改作後的衍生作品,也需要以同等的授權方式釋出以回饋社群,以著作權法來創造出創作自由

雖然共享是當初創作團隊的美意, 但反而會使更多開發者望之卻步
因此延伸出了LGPL

GNU Lesser General Public License (LGPL)

由於 GPL 過於嚴格,也間接影響到了程式碼的被採用率,畢竟開發的目的就是為了營利,相信這對很多人來說都是共通的目標,而這個 LGPL,從字面上來看其實就是所謂的鬆綁版的GPL啦,目前也出到了第三版了,儘管這個 License 仍受到 「copyleft」的規範,但定義上來看即為「較寬鬆的 GPL」

多半句有函式庫類型的程式,本身就很容易透過連結(Link)的方式來做呼叫以及取用,並提供各種類別的儲存資訊及運算結果給其他軟體或是原件給利用,但若是這樣的函式庫本身是屬於 GPL 的規範的話,也意味著這樣只要使用到函式庫的程式也必須使用 GPL 來做 License

若是用了 LGPL,單純的函式庫乎叫本身並不需要被 LGPL 的拘束性給規範,來做為推廣函式庫的一大利器,也讓這樣更符合開源及應用的初衷, 但當然 GPL 畢竟仍然屬於 Licence 的一種,本身也包含著所謂的"必須" 或 "但是"囉

LGPL的必須

若今天使用者參考了 LGPL License 的軟體(包含函式庫),進行任何改動、和/或再次開發並予以發佈,則您的產品必須一樣被感染上了 LGPL 協定,並且開源,並於 LGPL 協議內提供修正處的文字檔,來提示各位我們這一次引用了什麼,修改了什麼,並且仍然必須無私的奉獻給大家,所以 LGPL 還是具備著所為的病毒性和擴散性

LGPL的但是

但是如果僅是針對 LGPL 的軟體進行任何調用、連接而非包含、修改後再利用,則可以不需開源,也就是可以封閉並做商業利用啦。這個"可是"不僅僅是針對了函式庫,本身其實也對 LGPL 內的應用方式做出了鬆綁。也就是所謂的「 LGPL 約束性不包含在僅透過定式介面或流程呼叫具 LGPL 性質的函式庫」,因為通常透過這種方式來呼叫的動態連結裏面,並不會涉及到被呼叫的程式碼。

下面再簡介一下其他常見的License

Apache License

使用這個協議可以進行商用
你可以對其修改、分發
但是你要聲明作者來源和你的修改以及協議
很多大型項目都使用這個協議

比如 tensorflow、puppeteer

MIT License

這是個人用得比較多的協議
因爲比較寬鬆精簡
只要聲明版權和協議就可以了
可以商用、修改、複製、重新發布等操作
使用這個協議的就有 vue、react

BSD License

這個和 MIT 協議類似
除了聲明協議和來源
其它基本操作都可以使用
flask 用的就是這個協議

GNU License

前面介紹過了, Linux 就是使用這個協議

NO License

也就是什麼都不聲明
但是並不意味著就可以亂來
這比聲明了協議還嚴格
你可以使用、商用
但是你需要聲明協議和來源
而且你不能對代碼進行修改、複製、再次發布
不過你在 GitHub 使用了這個協議
還是可以被別人觀看代碼,fork 操作

Eclipse License

這個協議允許你商用、複製、修改、再次發布等
需要聲明來源和協議
java 中的 junit4 就是使用這個協議


如果喜歡文章, 不妨按下喜歡訂閱支持

如果真的想支持我進行創作與實踐計畫, 也可以進行打賞
BTC (BTC) : 1LFRBqvWR9GGizBzoFddkb5xRpAzKRVoDC
BTC (BSC) : 0xe1cda3eb778d1751af17feac796a4bbe4dbca815
BTC (ERC20) : 0xe1cda3eb778d1751af17feac796a4bbe4dbca815
USDT (TRC20) : TT7wgKuYoHwfRy3vCr38Qy3gnS3JJ1aKvn

如果想使用幣安, 可以使用我的推薦連結可以節省手續費10%
或使用推薦碼 : A5YRMD2T


#opensource #gnu







Related Posts

Why you should or shouldn't use Google DNS?

Why you should or shouldn't use Google DNS?

Redux SPA blog 加強版

Redux SPA blog 加強版

Angular 9 SCSS Global Variable

Angular 9 SCSS Global Variable


Comments