感謝PCMan耐心仔細回復,
首先這份專案只是我一個人下班時候寫的,背後並沒有公司或組織,當然也不可能營利
沒有法務可以諮詢只好求助網路
因為我還不確定、沒搞懂動態連結的東西,所以以下是我對於我的程式的想像
可能奇怪或不可行的地方,請見諒
在我的想像中,我的程式不提供dll,
但我會去搜尋看我程式的資料夾下面有沒有某個特定的dll
如果有的話我就去連結,提供使用者該dll的功能
如果沒有,程式依然可以跑,只是就無法提供使用者該dll的功能
當然如果可以的話我也希望我的專案裡面不要包括那些要使用dll所需要的標頭檔
但好像是不可能的
(雖然原篇底下推聞有人提到套件管理,但大略搜尋一下,我還是沒開竅,
不太清楚使用套件管理跟專案可以不用包含標頭檔的關係是什麼)。
以我的想像來說,我應該是
1.「非改寫」,甚至沒有直接copy一整份原始檔(cpp)在我的專案裡編譯。
(但是需要標頭檔)
2.純粹想在 runtime的時候使用dll,像呼叫函式一樣,給參數然後得到想要的結果。
3.「非複製並散布dll」,我並不提供dll,使用者如果想要「解鎖」一些不是我寫的功能
,要自己想辦法生出dll,我才會去執行
以上只是我的想像
這種情況可以閉源嗎?
如果開源的話可以掛MIT而不是用原本LICENSE裡的 LGPL、unRAR、BSD 3-clause的授權嗎?
因為我目前還不確定如果我實現了我想像中的動態連結之後,需要掛哪些授權
掛MIT這種全開的授權只是圖個方便而已
感謝閱讀
※ 引述《HZYSoft (PCMan)》之銘言:
: 這問題很複雜,如果是你公司的 code,還牽扯著作權歸屬,建議諮詢公司法務
: 以下講的是一般原則,不一定適合你的狀況
: 首先看你如何「使用」別人的 library,和對方的 license 如何規定
: 如果你是拿別人的程式來「改寫」,這算衍生著作,要看對方的 library
: 是否允許改作以及再散佈,如果不能,那你的也連帶不能 open
: 如果你只是 runtime 動態 link 他的 dll,你是「呼叫」他提供的 API,
: 那你並沒有「改寫」他的程式,單純只是執行的時候需要他的檔案,這一般不算
: 「衍生著作」,所以你的程式碼是你自己的,你要用什麼授權開放都可以。
: 舉個例子,你的程式呼叫微軟 .NET 的 dll 提供的系統服務,很顯然你的程式
: 只是呼叫他,但並不是微軟 .NET 的「衍生著作」,所以你的程式想怎樣授權隨你高興
: 不用跟原本 dll 一樣,就算他是 GPL 也一樣。
: 但有爭議的是如果你「靜態連結」成單一 exe,則別人的 lib 包進你程式的一部分了
: 這時候就可能會受到「衍生著作」的規範 (有爭議)
: 再舉個例子,你軟體用到某個 GPL 的 lib,但你的使用方式是「複製他的 code」
: 然後做了一些修改,那你的程式就成為衍生著作,要遵守 GPL 規範,所以你的程式
: 也自動變成要 GPL open source,再散佈也要遵守 GPL 規範。
: 例外狀況是(這有爭議),如果你修改的程式架在 server 上,是 web server 後端
: 那使用者連上你的「網頁」算「使用者」嗎?一般認定是不算,所以連上網站的人
: 並不能根據 GPL 要求要你網站的程式碼 (否則我們就可以跟很多電商要程式碼了...)。
: 但如果你的網站系統賣給別人架站使用,那架站的人是「使用者」,根據GPL他可以跟你
: 要求 server 程式碼。
: 以上是 code 的授權,但使用別人的 dll 問題不是只有 source code 授權
: 如果你是 link dll 不會有程式碼衍生問題,但對方的 dll 不一定允許「複製再散佈」
: 也就是你可以 open 你的程式碼,但使用者拿來編譯需要 library 的 dll,
: 但那個 dll 不是你的版權,你不一定有權利提供,使用者要自己去買這個 dll
: 但如果這 dll 是 LGPL 授權,那他是允許再散佈的(但要遵守 LGPL)
: 另外補充,license 的「授權」跟「著作權」不一樣
: 你寫的 code 就算用 LGPL 發出來 open,大家有權使用以及改寫再散佈
: 但原始的「著作權」還是你的,所以「你寫的那部份」code 改天你想改用
: 別種授權,或是想改回私有,都是可以的,但如果專案摻入別人的 code
: 那你不能改變別人 open 的部份的授權,只能改你自己寫(擁有 copyright)的部份。
: 以上如果不清楚,歡迎討論! 希望有點幫助