class A extends B {}
比如 B 是某个 Apache2 协议的类,我继承之后改了 A ,这种情况需要说明吗?
怎么算是修改源代码?继承重写算吗,还是只是修改源代码文件才算修改源码。
1
AoEiuV020 2021-10-29 17:12:42 +08:00
这,我感觉源代码才算代码,就是原作者原项目中的所有文件,
你继承是你的文件里的代码,应该不算, |
2
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 类。) |
3
msg7086 2021-10-30 17:19:51 +08:00
源代码就是源代码,这没什么歧义吧。
你 A 继承了 B ,又没改过 B 的源代码,怎么能算改过源代码呢。 继承和重写,和源码有什么关系。 继承和重写是编译期和运行期的东西,你的类还能跑到别人项目里改人家源代码? CPE 主要是许可证污染性上有区别。Apache2 是个宽松许可证,并不污染衍生作品。 |