標籤:

修改基於GPL協議的軟體,不公開源代碼,如何規避那個協議??

單獨開發獨立程序,然後調用主體,這樣會被GPL束縛嗎


遵守協議就行,比如不隨你的程序發布,不鏈接到同一個地址空間內,作為外部進程調用是沒有問題的。


不可以!詳細介紹 GPL 協議

確保軟體自始至終都以開放源代碼形式發布,保護開發成果不被竊取用作商業發售。任何一套軟 件,只要其中使用了受 GPL 協議保護的第三方軟體的源程序,並向非開發人員發布時,軟體本身也就自動成為受 GPL 保護並且約束的實體。也就是說,此時它必須開放源代碼。

你提的這個問題就相當於:我搶劫了,觸犯了刑法,如何規避刑法的處罰?

GPL出現的原因就是為了解決這個問題,你悄悄的用別人不知道,那就沒事。要是被別人發現,就有很高的法律風險!


你可以用socket通信模仿RPC調用,不需要開源你自己的代碼。


go bee 呢?


確實可以規避的。GPL的漏洞就是後台服務進程不算分發。所以後來有了MongoDB這種使用AGPL的


看你是怎麼調用的。如果你的代碼中使用了GPL約束的代碼,那麼就肯定是受到GPL污染的,這個地方不好鑽空子,可以換個思路,把調用部分與GPL部分分開作為兩個program,然後讓其相互通信即可。但GPL有考慮到過這種情況,如果你將它們一起發布,則會出現新的限制,這個問題GNU官方有解釋過:

What is the difference between an 「aggregate」 and other kinds of 「modified versions」? (#MereAggregation)

An 「aggregate」 consists of a number of separate programs, distributed together on the same CD-ROM or other media. The GPL permits you to create and distribute an aggregate, even when the licenses of the other software are non-free or GPL-incompatible. The only condition is that you cannot release the aggregate under a license that prohibits users from exercising rights that each program"s individual license would grant them.

Where"s the line between two separate programs, and one program with two parts? This is a legal question, which ultimately judges will decide. We believe that a proper criterion depends both on the mechanism of communication (exec, pipes, rpc, function calls within a shared address space, etc.) and the semantics of the communication (what kinds of information are interchanged).If the modules are included in the same executable file, they are definitely combined in one program.

If modules are designed to run linked together in a shared address space, that almost surely means combining them into one program.

By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.

如果你把一個GPL下的程序與一個使用受其他協議約束的程序一起發布,會被視為一個aggregate program,GPL對aggregate program的唯一約束就是不允許發布。如果你自己那部分代碼沒有受其他協議約束,並且是沒有版權的,那麼就不受GPL此項約束。但是沒有版權肯定是沒有意義的,可以考慮只發布你自己具有版權的那部分,然後提供GPL組件的下載地址,讓用戶自行下載安裝。因此,關鍵點就是要使你自己的代碼與GPL的代碼被視為兩個不同的程序。如何界定它們是否是兩個程序?根據GNU的上述回答,這是個法律問題,而他們自己的解釋是依據命令行、管道、RPC、是否在同一地址空間和交互的語義來判斷,所以從這些途徑入手即可規避GPL污染。

要注意的是,如果你自己具有版權的代碼與GPL的代碼語義上的聯繫太緊密,也是會被視為同一個程序的。


不發布/出售修改過的二進位代碼就可以規避了。


問題沒有想像的那麼簡單,參照我的博客文章 http://www.unclekevin.org/?p=137


即所謂二進位復用,而不是源代碼復用。


推薦閱讀:

閱讀離職程序員遺留下來的垃圾源代碼是怎樣一種體驗?
哪些源碼下載網站比較可靠?
如何獲取華為、中興、烽火這些廠家 發布的嵌入式設備 GPL源碼(包括工具鏈、kernel等相關代碼)?
請問,閱讀源碼時,已有的代碼注釋究竟是促進學習還是阻礙學習?
源代碼怎麼編寫的?

TAG:源代碼 |