GPL是否允许这样的修改?哪个许可证允许哪个不?

时间:2013-09-23 10:39:14

标签: java open-source licensing gpl

假设我库X 包含 A类 方法b ,并且库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");
   }    
}

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

1 个答案:

答案 0 :(得分:2)

这取决于你所说的“允许”。所有免费软件许可证(请参阅http://opensource.org/licenses/alphabetical)都将允许此类代码。您正在做的事情通常不被视为修改,而只是使用代码/库。如果你要更改原始类的代码,那将是一个修改。

然而,GPL的本质是它“病毒式”,这意味着您可能正在编写的任何使用GPL代码的应用程序必须根据GPL条款或兼容许可证(例如AGPL)进行许可。你可以尝试律师这是因为java的动态链接性质,但这是不稳定的,你可能想问一下(少数)律师。

较弱的免费软件许可证允许您在不“感染”您的代码的情况下使用代码,此类许可证的许可示例包括Apache软件许可证,Eclipse公共许可证,LGPL(因为您实际上并未修改代码但使用库并继承一个类,你甚至不需要重新分发“修改过的”源代码),BSD,MIT,zlib等。