V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chenos
V2EX  ›  程序员

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

  •  
  •   chenos · 2021-10-29 17:01:29 +08:00 · 1549 次点击
    这是一个创建于 1120 天前的主题,其中的信息可能已经有所发展或是发生改变。
    class A extends B  {}
    

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

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

    3 条回复    2021-10-30 17:19:51 +08:00
    AoEiuV020
        1
    AoEiuV020  
       2021-10-29 17:12:42 +08:00
    这,我感觉源代码才算代码,就是原作者原项目中的所有文件,
    你继承是你的文件里的代码,应该不算,
    vinle
        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 类。)
    msg7086
        3
    msg7086  
       2021-10-30 17:19:51 +08:00
    源代码就是源代码,这没什么歧义吧。
    你 A 继承了 B ,又没改过 B 的源代码,怎么能算改过源代码呢。
    继承和重写,和源码有什么关系。
    继承和重写是编译期和运行期的东西,你的类还能跑到别人项目里改人家源代码?

    CPE 主要是许可证污染性上有区别。Apache2 是个宽松许可证,并不污染衍生作品。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1233 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 17:56 · PVG 01:56 · LAX 09:56 · JFK 12:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.