0

假设我有库 X,其中包含带有方法 b的类 A ,并且库 X 是在GPL 许可下发布的。

public class A {
  public void b() {
     // this is an example of b method's body. But assume that the body of method b 
     // is very complex
     System.out.println("operation a");
     System.out.println("operation b");
     System.out.prinltn("operation c");
   }    
}

假设我正在使用库 X,并且我需要一种与方法 b 的行为类似的行为,但有一个附加项,我无法通过简单地扩展类 A 并覆盖他们的一些方法来实现。

第一个问题是:我可以按照下面所示的方式扩展类 A 并覆盖方法 b,GPL 许可证是否仍然允许这样做。

public class AExt extends A {
  public void b() {
     // this is an example of b method's body. But assume that the body of method b 
     // is very complex
     System.out.println("operation a");
     System.out.println("operation b");
     doOperationINeed();
     System.out.prinltn("operation c");
   }    
}

第二个问题是:常用的开源许可证中哪些允许此类扩展,哪些不允许?

4

1 回答 1

2

这取决于“允许”的确切含义。所有自由软件许可证(参见http://opensource.org/licenses/alphabetical)都将允许此类代码。您所做的通常不被视为修改,而只是使用代码/库。如果您要更改原始类的代码,那将是一种修改。

然而,GPL 的本质是它是“病毒性的”,这意味着您编写的任何使用 GPL 代码的应用程序都必须根据 GPL 或兼容许可(例如 AGPL)的条款获得许可。由于 java 的动态链接性质,您可以尝试对此进行辩护,但是这是不可靠的,您可能想询问(少数)律师。

较弱的自由软件许可证将允许您使用代码而不用它的许可证“感染”您的代码,此类许可证的示例是 Apache 软件许可证、Eclipse 公共许可证、LGPL(因为您实际上并没有修改代码,而是使用库和子类化一个类,您甚至不必重新分发“修改过的”源代码)、BSD、MIT、zlib 等。

于 2013-09-23T11:53:12.490 回答