假设我库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");
}
}
第二个问题是:哪些来自常用的开源许可证允许此类扩展,哪些不允许?
答案 0 :(得分:2)
这取决于你所说的“允许”。所有免费软件许可证(请参阅http://opensource.org/licenses/alphabetical)都将允许此类代码。您正在做的事情通常不被视为修改,而只是使用代码/库。如果你要更改原始类的代码,那将是一个修改。
然而,GPL的本质是它“病毒式”,这意味着您可能正在编写的任何使用GPL代码的应用程序必须根据GPL条款或兼容许可证(例如AGPL)进行许可。你可以尝试律师这是因为java的动态链接性质,但这是不稳定的,你可能想问一下(少数)律师。
较弱的免费软件许可证允许您在不“感染”您的代码的情况下使用代码,此类许可证的许可示例包括Apache软件许可证,Eclipse公共许可证,LGPL(因为您实际上并未修改代码但使用库并继承一个类,你甚至不需要重新分发“修改过的”源代码),BSD,MIT,zlib等。