开源协议的修改源码应该怎么理解?

2021-10-29 17:01:29 +08:00
 chenos
class A extends B  {}

比如 B 是某个 Apache2 协议的类,我继承之后改了 A ,这种情况需要说明吗?

怎么算是修改源代码?继承重写算吗,还是只是修改源代码文件才算修改源码。

1552 次点击
所在节点    程序员
3 条回复
AoEiuV020
2021-10-29 17:12:42 +08:00
这,我感觉源代码才算代码,就是原作者原项目中的所有文件,
你继承是你的文件里的代码,应该不算,
vinle
2021-10-29 23:08:23 +08:00
如果楼主要探讨 license 的话,那大概率是要发布这个新项目(因为如果只是自己玩的话随便怎么折腾都可以。

楼主没说清什么语言,以 java 为例的话,准确来说,要看 B 所属的项目的 license 有没有写明白 CPE ( classpath exception ) 。

如果没理解错的话,楼主的“改了 A”应该是指:B 允许被 extend 并且 A override 了 B 的函数。这种情况下,

1. 如果写明了 CPE ,并且新项目是把 B 所在项目当作 lib 来引用,那就没问题(即,随便发布)。但如果你的 A 是要加进原油的项目里,那也行,不过你要在你新发布的项目里边采用 apache2 的 license 并且,遵循原有 license 里边列出来的要求(细节因 license 不同而不同,但一般来说 apache 族的特点是需要注明修改处)
2. 如果没 CPE ,即使只是把 B 当 lib 引用,那也不能随便发布了,而是要需要采用 apache2 并且,遵循....(同上)。

总之,如果 B 所在的项目是开源项目并且有完整有效的 license ,在遵守它并符合它提出的要求的情况下,该怎么发布就怎么发布。

具体点:openjdk 的 String 类,你 call 或者 extends 都是没问题的,因为 openjdk 的 license 有 CPE (然而现实比较可惜:String 类是 final 类。)
msg7086
2021-10-30 17:19:51 +08:00
源代码就是源代码,这没什么歧义吧。
你 A 继承了 B ,又没改过 B 的源代码,怎么能算改过源代码呢。
继承和重写,和源码有什么关系。
继承和重写是编译期和运行期的东西,你的类还能跑到别人项目里改人家源代码?

CPE 主要是许可证污染性上有区别。Apache2 是个宽松许可证,并不污染衍生作品。

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

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

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

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

© 2021 V2EX