关于 GPL 协议的一些疑问

2022-01-26 10:10:28 +08:00
 qdwang

GPL 协议大概讲的就是,如果你用了它的代码,你的软件也要用 GPL 发布并且开源。

这里有一些争议点不太明白。

假设有库 A 是 C++写的 GPL ,现在要写个库 B 是 C#。我们发现库 A 里的一个函数叫 func 特别有用,想弄到库 B 里。

  1. 直接 1:1 把 A 里的 func 代码转成 C#放到 B 里。据我所知,这种情况下,B 必须开源并且是 GPL 协议。

  2. 把 A 里的 func 代码重构成 C#, 并且做很多抽象+改动,改的面目全非。据我所以,这种情况下,有争议。有的人认为这仍然是必须遵守 GPL ,有的人认为这可以不用遵守 GPL 了。

  3. 找到一篇文章,描述了 A 是如何写成的 func 。根据文章的原理来写 C#代码。这种情况下,如果 C#代码逻辑步骤和 A 里 C++代码一样,应该怎么判定?是必须遵守 GPL 还是完全不用管他?

GPL 中,关于 B 到底有没有用 A 的代码的判定界限,到底是在哪里?

984 次点击
所在节点    问与答
8 条回复
qdwang
2022-01-26 10:13:37 +08:00
对了,还有 4

4. 如果你完全没看过库 A ,碰巧用 C#写了和库 A 一样逻辑的代码,会不会被判定为必须遵守 GPL ?
liyanggyang
2022-01-26 11:09:29 +08:00
@qdwang 你看没看过,他都在那里,不能掩耳盗铃了。所以排除 4
qiguai2017
2022-01-26 11:21:33 +08:00
有没有侵犯他的权利还要看代码量和复杂程度。

如果我写个 print(hello world), 并把它声明为 GPL, 是不是别人所有的代码只要有这句话,就都必须遵守 GPL 协议了?
echo1937
2022-01-26 11:26:43 +08:00
@liyanggyang 4 是可行的,wsl 一代的很多接口就是这么做的,这种有个名词叫做 clean room Linux
qdwang
2022-01-26 12:48:14 +08:00
@qiguai2017 是呀,所以 GPL 这个协议其实挺难判断的感觉。除非是大段大段的纯粹一字不改的 copy ,可以判定必须遵守 GPL ,其他的情况都有可能发生。
qdwang
2022-01-26 12:52:39 +08:00
我觉得 GPL 本质上只能保护一种情况,就是一段算法本身就是写库 A 的人发明的,这个库 A 是 GPL 。那么概念发明者,代码算法都是这个人发明的,所以 GPL 可以完美保护。

如果有一个人 X 发明了一种算法,写在文章里,明确可以自由传播。另一个人写了库 A ,用了这个算法,也用了 GPL 协议。其实这里 GPL 本质上不能保护这段算法。因为别人有权随便用 X 的算法。
secondwtq
2022-01-26 19:33:50 +08:00
@qdwang #6 根据我的了解,你说的第一种情况也没法保护。
GPL 保护的是具体实现不是 idea 。用 cleanroom 的方式还是可以使用你的算法。
使用专利可能能保护算法,但好像总的来说实践起来还是比较困难,尤其是你很难知道别人到底是怎么实现的情况下( GPL 也存在一样的问题)。

一个例子:本世纪初 Thomas W. Sederberg 等人提出了 T-Spline ,这是一种三维表面的表示方法,据说结合了 NURBS 和细分曲面的优点。paper 发出来没多久这群人就商业化了这个算法并申请了专利,后来公司被 (隔壁好像正在招人的) Autodesk 收购。过了几年 Autodesk 把这东西放到了自家的 Fusion 360 上,并且停止了其他软件(如 Rhino )的 T-Spline 插件更新。直到现在也没有其他地方实现 T-Spline 。
qdwang
2022-01-27 12:01:49 +08:00
@secondwtq 十分感谢回复,我基本明白目前的情况了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/830644

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX