感谢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)的部份。
: 以上如果不清楚,欢迎讨论! 希望有点帮助