中国风网站模板下载,有哪些专做旅游定制的网站,成立公司需要多少注册资金,信誉比较好的网上做任务的网站java字节码Oracle诉Google一案认为#xff0c;复制Java API的结构#xff0c;序列和组织是侵犯版权的行为。 侵犯版权不仅是复制行为#xff0c;而且还适用于拥有该作品副本的所有中间方。 那就是编写/编译任何JVM语言的人#xff0c;以及在他们拥有的任何设备上都有JAR文… java字节码 Oracle诉Google一案认为复制Java API的结构序列和组织是侵犯版权的行为。 侵犯版权不仅是复制行为而且还适用于拥有该作品副本的所有中间方。 那就是编写/编译任何JVM语言的人以及在他们拥有的任何设备上都有JAR文件的人包括旧摩托罗拉翻盖手机上的Java ME applet。 实际上JVM的所有版本都非常普及每个工业化国家的每个成年人都有可能在某个地方运行JVM。 而且每个非Sun / Oracle JAR文件中都嵌入了部分或全部Java API的副本因为从技术上讲为了调用API必须在已编译的字节码中包含API的影子。 让我示范一下。 这是我编写的一个完全合法的Java程序我拥有以下内容的版权 public class HelloWorld {public static void main(String[] args) {int strlen 0;for (int x 0; x args.length; x) {strlen args[x].length();}System.out.println(Hello, world, you passed in args.length arguments, total size: strlen);}} 那里什么都没有侵权。 我通过OpenJDK Java编译器javac运行该程序该程序生成一个HelloWorld.class文件。 根据业界通常使用Java和编译器的方式产生的字节码是源代码的派生作品我拥有源代码的版权。 因此让我们看一下使用javap反汇编的结果字节码 dppcrown:~/proj/dpp-blog/images$ javap -c HelloWorld
Compiled from HelloWorld.java
public class HelloWorld {public HelloWorld();Code:0: aload_0 1: invokespecial #1 // Method java/lang/Object.init:()V4: return public static void main(java.lang.String[]);Code:0: iconst_0 1: istore_1 2: iconst_0 3: istore_2 4: iload_2 5: aload_0 6: arraylength 7: if_icmpge 2510: iload_1 11: aload_0 12: iload_2 13: aaload 14: invokevirtual #2 // Method java/lang/String.length:()I17: iadd 18: istore_1 19: iinc 2, 122: goto 425: getstatic #3 // Field java/lang/System.out:Ljava/io/PrintStream;28: new #4 // class java/lang/StringBuilder31: dup 32: invokespecial #5 // Method java/lang/StringBuilder.init:()V35: ldc #6 // String Hello, world, you passed in 37: invokevirtual #7 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;40: aload_0 41: arraylength 42: invokevirtual #8 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;45: ldc #9 // String arguments, 47: invokevirtual #7 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;50: ldc #10 // String total size: 52: invokevirtual #7 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;55: iload_1 56: invokevirtual #8 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;59: invokevirtual #11 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;62: invokevirtual #12 // Method java/io/PrintStream.println:(Ljava/lang/String;)V65: return
} 噢我的……看某些Java API完全插入了代码中。 实际上JVM 要求调用站点调用代码的位置包括有关被调用的API的信息以便JVM找出要调用的方法。 不仅是方法名称而且还有传入的参数类型和预期的返回类型。 因此每个已编译的JAR都包含嵌入其中的Java API的某些部分。 根据Oracle的决定每个编译的JAR文件都侵犯了版权。 “但是”您说“ JAR文件并不包含所有有争议的API。” 首先多少就足够了。 Oracle法院明确拒绝了有关API仅占Java基类整体工作的一小部分并且百分比论据没有说服力的论点。 其次对于像Maven Central这样的存储了成千上万个JAR文件的存储库基本上所有Java API都被复制到这些JAR文件中存储的集合作品中。 该怎么办 如果我要托管大量的JAR文件我会打电话给我的律师试图弄清楚该怎么做。 是的也许有一个引诱论据因为Oracle分发了javac 因此诱使我复制Java API。 但是这仍然是对Oracle法院判决的技术性违反。 如果我是Apache Software Foundation或Free Software Foundation我将在今天早上提出单方面请求以中止 Oracle的决定因为这意味着我们一直在考虑的是可以在其上进行许可的软件我们的开放条款实际上包含Oracle版权代码我们将不得不暂停所有与JVM相关的开源项目。 哦我要指出的是如果Oracle声称复制到JAR文件中的API不受版权保护那么Google要做的就是从Maven Central中提取所有JAR文件在所有这些API中找到所有Java API引用。 JAR文件并使用该信息声明适用于Android的API。 最多大约要花10个工作日。 翻译自: https://www.javacodegeeks.com/2014/05/okay-everybody-who-touches-java-bytecode.htmljava字节码