LGPL與閉源程式

2021-06-21 21:05:49 字數 1812 閱讀 4651

現在我們是來說一下版權的問題。lgpl 是乙個開源協議,因此,有人會擔心 lgpl 能否用於開發閉源程式,能夠拿來賣錢。儘管現在國內有些公司不是很重視這方面的問題,不過,如果你違反了協議,某一天被別人發來一紙律師函的時候,真的是欲哭無淚了哦。所以,我們還是先來研究一下這個協議,lgpl 究竟能不能用於開發閉源程式。

以下內容是我查詢了 n 多**總結出來的,因為豆子不是律師,所以 lgpl 協議基本看不懂。究竟怎樣去理解這個協議,還是希望能夠有專業人士說出來。這裡就算做是一種拋磚引玉吧!儘管沒有十分的確定,但是這裡所說的理解基本也是**不離十的了。

至於什麼是 lgpl 協議,這裡就不再多說了,我們關心的是,如果使用 lgpl 協議開發商業程式。請注意,這裡所說的閉源程式,是指不以某種形式開放源**,也就是說,使用者(包括其他開發者)不能獲取其源**的程式。首先說明一點,lgpl協議是乙個商業友好的協議。這裡的含義是,你可以用 lgpl協議開發商業程式,當然也可以是非商業的閉源程式。但是,它是有一些限制的。這就是我們要討論的重點。

你必須在你的文件中說明,你的程式中使用了 lgpl 庫,並且說明這個庫是基於 lgpl 發布的;

你必須在你的應用程式發布中包含乙份 lgpl協議,通常就是那個文字檔案;

你必須開放使用了 lgpl 庫**的所有**,例如某些封裝器。但是,其他使用這些封裝器的**就不需要開放了;

你必須包含你的應用程式的餘下部分的目標檔案(通常就是我們所說的 .o 等等),或者是其他等價的檔案。源**並不是必須的。

是不是很難理解呢?我們詳細的說一下。

你很奇怪,為什麼 lgpl協議要這樣規定呢?lgpl 所做的工作是,它保證了使用者能夠有這樣一種能力:修改你使用 lgpl 庫函式的方式(那些封裝器就是你使用 lgpl庫的方式,那些已經開源了),重新編譯這些**,然後重新對程式進行連線(連線所需要的目標檔案也是包含了的,這是第四條規定的),就可以得到乙個新的可執行程式。

好了,如果你還不明白如何使用,我們來看乙個例子。

假設我們使用乙個名為 lib 的庫,這個庫是基於 lgpl協議發布的。如果你使用 lib.dll 做動態鏈結(windows 下),好,一切 ok。無論你的程式怎麼樣,你都可以做你所做的事情。

[cpp]view plain

copy

print?

// main.cpp 

int main()   

[cpp]view plain

copy

print?

void my_lib_init()   

void my_lib_do_something()   

void my_lib_done()   

void my_lib_close()   

在 main.cpp 中,我們做相應的修改:

[cpp]view plain

copy

print?

int main()   

好,編譯一下我們的程式,你會得到 main.o(windows 下)這個目標檔案。

在最終程式的發布中,你需要包含一下檔案:

乙份宣告:這個程式使用了 lib庫,這個庫是基於 lgpl 協議發布的;

lgpl.txt;

main.o

[cpp]view plain

copy

print?

void my_lib_done()   

void my_lib_close()   

好了,這就是在使用 lgpl庫開發閉源程式所需要遵守的東西了。還是建議大家能夠遵守協議,尊重作者的勞動成果哦~

源程式與目標程式

源程式也叫原始碼,就是最開始編寫的程式,計算機並不能識別,需要經過編譯生成目標程式。軟體都是目標程式,都是經過編譯的,商業公司一般不會發布原始碼,原始碼涉及到商業機密。1 源程式,是指未經編譯的,按照一定的程式語言規範書寫的,人類可讀的文字檔案。通常由高階語言編寫。源程式可以是以書籍或者磁帶或者其他...

QT源程式與編譯方式

1 源程式 1 純 在qt creator中建立乙個empty qmake project,然後 pro檔案中新增widget模組的語句如下 greaterthan qt major version,4 qt widgets然後新增乙個main.cpp 工程的結構如圖所示 執行結果如圖所示 2 使用...

GPL協議 與 LGPL協議

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