GPL 协议大概讲的就是,如果你用了它的代码,你的软件也要用 GPL 发布并且开源。
这里有一些争议点不太明白。
假设有库 A 是 C++写的 GPL ,现在要写个库 B 是 C#。我们发现库 A 里的一个函数叫 func 特别有用,想弄到库 B 里。
直接 1:1 把 A 里的 func 代码转成 C#放到 B 里。据我所知,这种情况下,B 必须开源并且是 GPL 协议。
把 A 里的 func 代码重构成 C#, 并且做很多抽象+改动,改的面目全非。据我所以,这种情况下,有争议。有的人认为这仍然是必须遵守 GPL ,有的人认为这可以不用遵守 GPL 了。
找到一篇文章,描述了 A 是如何写成的 func 。根据文章的原理来写 C#代码。这种情况下,如果 C#代码逻辑步骤和 A 里 C++代码一样,应该怎么判定?是必须遵守 GPL 还是完全不用管他?
GPL 中,关于 B 到底有没有用 A 的代码的判定界限,到底是在哪里?
1
qdwang OP 对了,还有 4
4. 如果你完全没看过库 A ,碰巧用 C#写了和库 A 一样逻辑的代码,会不会被判定为必须遵守 GPL ? |
2
liyanggyang 2022-01-26 11:09:29 +08:00
@qdwang 你看没看过,他都在那里,不能掩耳盗铃了。所以排除 4
|
3
qiguai2017 2022-01-26 11:21:33 +08:00
有没有侵犯他的权利还要看代码量和复杂程度。
如果我写个 print(hello world), 并把它声明为 GPL, 是不是别人所有的代码只要有这句话,就都必须遵守 GPL 协议了? |
4
echo1937 2022-01-26 11:26:43 +08:00 via iPhone
@liyanggyang 4 是可行的,wsl 一代的很多接口就是这么做的,这种有个名词叫做 clean room Linux
|
5
qdwang OP @qiguai2017 是呀,所以 GPL 这个协议其实挺难判断的感觉。除非是大段大段的纯粹一字不改的 copy ,可以判定必须遵守 GPL ,其他的情况都有可能发生。
|
6
qdwang OP 我觉得 GPL 本质上只能保护一种情况,就是一段算法本身就是写库 A 的人发明的,这个库 A 是 GPL 。那么概念发明者,代码算法都是这个人发明的,所以 GPL 可以完美保护。
如果有一个人 X 发明了一种算法,写在文章里,明确可以自由传播。另一个人写了库 A ,用了这个算法,也用了 GPL 协议。其实这里 GPL 本质上不能保护这段算法。因为别人有权随便用 X 的算法。 |
7
secondwtq 2022-01-26 19:33:50 +08:00 1
@qdwang #6 根据我的了解,你说的第一种情况也没法保护。
GPL 保护的是具体实现不是 idea 。用 cleanroom 的方式还是可以使用你的算法。 使用专利可能能保护算法,但好像总的来说实践起来还是比较困难,尤其是你很难知道别人到底是怎么实现的情况下( GPL 也存在一样的问题)。 一个例子:本世纪初 Thomas W. Sederberg 等人提出了 T-Spline ,这是一种三维表面的表示方法,据说结合了 NURBS 和细分曲面的优点。paper 发出来没多久这群人就商业化了这个算法并申请了专利,后来公司被 (隔壁好像正在招人的) Autodesk 收购。过了几年 Autodesk 把这东西放到了自家的 Fusion 360 上,并且停止了其他软件(如 Rhino )的 T-Spline 插件更新。直到现在也没有其他地方实现 T-Spline 。 |