作者HZYSoft (PCMan)
看板Soft_Job
标题Re: [请益] 使用LGPL但打算公开原始码
时间Wed Dec 15 23:56:21 2021
※ 引述《liu2007 (薯)》之铭言:
: 感谢PCMan耐心仔细回复,
: 首先这份专案只是我一个人下班时候写的,背後并没有公司或组织,当然也不可能营利
: 没有法务可以谘询只好求助网路
很多外商公司聘雇合约有明定条款,下班时间所写,着作权依旧属於公司。
合约没特别规定的话,小心跟公司做的东西有没有重叠,才不会踩到法律问题。
: 因为我还不确定、没搞懂动态连结的东西,所以以下是我对於我的程式的想像
: 可能奇怪或不可行的地方,请见谅
: 在我的想像中,我的程式不提供dll,
: 但我会去搜寻看我程式的资料夹下面有没有某个特定的dll
: 如果有的话我就去连结,提供使用者该dll的功能
: 如果没有,程式依然可以跑,只是就无法提供使用者该dll的功能
这是很合理的作法,这样一般不会有问题,类似是外挂程式的作法。
你的主程式着作权属於你,open source 你可选你想要的授权方式,
但释出的程式里面不要包涵别人的 dll 就行。
不过,如果对方的 dll 有允许你再散布,就可以一起释出
例如如果那个 dll 是来自 LGPL 的专案,你是可以再散布那个 dll 的,唯一要注意
是一般你提供 LGPL dll 给使用者,你也要能够提供 dll 的 source code
补充一下,但如果这个 dll 是 GPL,即使是 dynamic linking 也可能算衍生着作
https://en.wikipedia.org/wiki/GNU_General_Public_License#Libraries
LGPL 则是可以动态 link dll
: 当然如果可以的话我也希望我的专案里面不要包括那些要使用dll所需要的标头档
: 但好像是不可能的
一个常见规避的方法是用 dlopen() 或 LoadLibrary() (win32 API)
在 runtime 动态才去开启 dll 档案,这样的话你的程式没有直接衍生自 library
你只是写了一段 code 当存在某个 dll,你会 dlopen 他,动态载入里面的某个
function,这是某种外挂,但你没有直接衍生自这个 library
这样即使 dll 是 GPL,你也没有直接使用或衍生自这个 library (但这作法存在争议)
Header file 不一定需要,如果你 dlopen() / dlsym() 或 GetProcAddress()
这种动态载入的方法,不用 header 也能存取。
另外的作法就是你自己重写那些 header,不要复制 dll 本来的 .h (但不能直接照抄)
这样你重新写的就变成你的着作权,也是一个规避的方法
: (虽然原篇底下推闻有人提到套件管理,但大略搜寻一下,我还是没开窍,
: 不太清楚使用套件管理跟专案可以不用包含标头档的关系是什麽)。
: 以我的想像来说,我应该是
: 1.「非改写」,甚至没有直接copy一整份原始档(cpp)在我的专案里编译。
: (但是需要标头档)
: 2.纯粹想在 runtime的时候使用dll,像呼叫函式一样,给参数然後得到想要的结果。
: 3.「非复制并散布dll」,我并不提供dll,使用者如果想要「解锁」一些不是我写的功能
: ,要自己想办法生出dll,我才会去执行
: 以上只是我的想像
: 这种情况可以闭源吗?
用 dlopen 动态载入方式,compile time 没有直接连结这 library 的话,
一般是不会受到 library 授权方式的规范。
但如果你是 compile-time 就直接跟他 link,并且没有这个 lib 就不能运作
那视情况可能就会构成衍生着作
GPL 授权就是如此,你就被迫一定要跟着 GPL,所以之前才会有些厂商被告
但 LGPL 就允许只是 link 没改作的话不一定要用 LGPL
所以还是要看原本授权条款他怎样写
: 如果开源的话可以挂MIT而不是用原本LICENSE里的 LGPL、unRAR、BSD 3-clause的授权吗?
: 因为我目前还不确定如果我实现了我想像中的动态连结之後,需要挂哪些授权
: 挂MIT这种全开的授权只是图个方便而已
MIT 非常宽松也很方便,他允许 re-license,也就是更改授权。
但是他也允许别人拿你的 code 去改之後,不再 open 变成私有软体
你如果不介意的话 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)的部份。
: : 以上如果不清楚,欢迎讨论! 希望有点帮助
--
Sent from PCMan on PCMan's PC
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.115.97.45 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1639583786.A.A6A.html
1F:推 YYYero: 推 12/16 02:46
2F:推 YYYero: pcman只能跪着看了 12/16 02:50
3F:推 jobintan: 确实有些外商的劳动合约里有如此规定,不过公司要怎麽举 12/16 07:54
4F:→ jobintan: 证劳工非上班时间写的作品算公司的,如果该劳工创作的 12/16 07:55
5F:→ jobintan: project不只他一人,而是与别人一起创作的话,看来肯定 12/16 07:55
6F:→ jobintan: 是吵不完了。 12/16 07:56
7F:→ jobintan: 话说即便是GPL网上能估狗得一堆回避方法。wwwwwwwwwwwww 12/16 07:59
8F:→ neo5277: pcman大大现在在哪任职啊? 想知道要念法律学分三修了吗? 12/16 11:39
9F:推 aaa1234136: 长知识 12/16 12:20
10F:推 duck10704: 推 12/16 12:55
11F:推 viper9709: 推~真的专业 12/16 15:41
12F:推 wulouise: 上次印象是G 12/16 19:41
13F:→ spirit119: 这种聘雇合约如果准据法是我国法律的话 不知道有没有 12/17 11:58
14F:→ spirit119: 效 12/17 11:58