• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Oracle Vs Google
 

Oracle Vs Google

on

  • 392 views

 

Statistics

Views

Total Views
392
Views on SlideShare
392
Embed Views
0

Actions

Likes
0
Downloads
6
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Oracle Vs Google Oracle Vs Google Presentation Transcript

    • Oracle v. Google 1
    • 2
    • Why Are We Here? August 6, 2010 From: Tim Lindholm To: Andy Rubin “What we’ve actually been asked to do (by Larry and Sergei) is to investigate what technical alternatives exist to Java for Android and Chrome. We’ve been over a bunch of these, and think they all suck. We conclude that we need to negotiate a license for Java under the terms we need.” TX 10 at GOOGLE-12-10000022 3
    • What Is Java? 4
    • Java Is A Software Programming Development Environment Java Programming Language Java APIs and Class Libraries Java Virtual Machine 5
    • Java Achieved Enormous Success Widely adopted Runs on many kinds of devices, including phones Has millions of application developers 6
    • Java On Our Computers 7
    • World’s Leading Companies License Java For Their Products 8
    • And Participate In The Java Community Process 9
    • Java Community Relies On Java Technology Components Java Programming Language Java APIs and Class Libraries Java Virtual Machine 10
    • Sun Microsystems Invented Java • Founded in 1982 in Santa Clara, CA. • Developed and licensed Java technology since 1990s. • Obtained key Java intellectual property. • Created Java ecosystem and community process. 11
    • Oracle Now Owns Java • In 2010, Oracle acquired Sun for $7.4 billion. • Oracle was founded in 1977. • Oracle is the world’s leading database company. • Sun is now part of Oracle. • Oracle is now responsible for the Java community. 12
    • Java was a major reason Oracle acquired Sun 13
    • By 2005, Google Became Leading Search Engine On Desktops 14
    • Emergence Of Smartphones Worried Google 15
    • Google Acquired Android Inc. To Distribute Mobile SoftwareTechnology 16
    • Google’s Requirements For Android Run on many companies’ phones Attract millions of Quick time application to developers market 17
    • Java Technology Met Google’s Requirements For Android 18
    • Google Decided To Build Android On Java 19
    • But Sun Owned Key Java Copyrights And Patents 20
    • Google Recognized It Must Take A Java License “Must take license from Sun” “Google/Android, with support from Tim Lindholm, negotiates the first OSS J2ME JVM license with Sun” TX 1 at GOOGLE-00-00001780 21
    • Google Chose A Path Leading To This Day From: Andy Rubin To: Larry Page Sent: October 11, 2005 “If Sun doesn’t want to work with us, we have two options: 1) Abandon our work and adopt MSFT CLR VM and C# language -or - 2) Do Java anyway and defend our decision, perhaps making enemies along the way.” TX 7 at GOOGLE-01-00019528 22
    • Google, Unwilling To Share Control With Sun, Decided ToRelease Android Without Licensing Sun’s Java IP From: Andy Rubin To: Eric Schmidt Sent: May 11, 2007 “I don’t see how we can work together and not have it revert to arguments of control. I’m done with Sun (tail between my legs, you were right). They won’t be happy when we release our stuff, but now we have a huge alignment with industry, and they are just beginning.” TX 207 at GOOGLE-01-00066909 23
    • Years Later, Google Still Needs Java Technology And AJava License From: Tim Lindholm To: Andy Rubin Sent: August 6, 2010 “What weve actually been asked to do (by Larry and Sergei) is to investigate what technical alternatives exist to Java for Android and Chrome. Weve been over a bunch of these, and think they all suck. We conclude that we need to negotiate a license for Java under the terms we need.” TX 10 at GOOGLE-12-10000022 24
    • Java Technology and LicensingGoogle’s Need for Java Technology and License Google’s Infringement What We Will Prove 25
    • Traditional Approach: Develop Application For Each TypeOf Computer Application Developer 26
    • Java Tackled New Challenges With Rise Of Internet Application Developer End Users Write Once, Run Anywhere Write application once Run application on any computer In Java Using Java Virtual Machine 27
    • Java Solution: Write Once, Run Anywhere JVM JVM JVM Application Developer Java’s Consistency Is Critical 28
    • Sun Created Java APIs And Class Libraries To AttractApplication Developers • Java APIs and Class Libraries save developers from having to write program components from scratch • Java APIs are blueprints for pre- written program components • Java Class Libraries are the pre-written program components 29
    • Java APIs And Class Libraries Speed And Ease SoftwareDevelopment Application Developer End Users Write Once, Run Anywhere Write applications using Provide Java Class Libraries Java APIs based on Java API designs 30
    • By 2005, Sun Achieved Widespread Adoption Of Java TX 134 at GOOGLE-01-00018143 31
    • To Achieve Widespread Adoption, Sun Offered ManyJava Licenses Example License Example Licensee Technology License and IBM, Nokia, Distribution Agreement (TLDA) WindRiver Systems Sun Community Source Amazon, Hitachi, License (SCSL) Motorola, Samsung Stand Alone TCK (SATCK) BEA Systems, License Panasonic, RIM, SAP GPL open source license Red Hat Inc. 32
    • When Is A Java License Necessary? Write applications in Java YES NO programming language Provide class libraries based YES NO on Java API designs Download Java software YES NO components 33
    • Google took Java API designs 34
    • Java Technology and LicensingGoogle’s Need for Java Technology and License Google’s Infringement What We Will Prove 35
    • Google Initiated Android Mobile Strategy In 2005 April 18, 2005 Android EMG M&A Review “Android’s technology could be used to embed Google into fastest growing global consumer product – 178 million worldwide PC shipments in 2004 – 675 million mobile phones shipped during the same period.” TX 432 at GOOGLE-58-00048926 36
    • Google Needed To Enter Mobile Market Quickly Google’s 10-K Fiscal Year Ended December 31, 2005 “The number of people who access the Internet through devices other than personal computers, including mobile telephones, hand-held calendaring and email assistants, and television set-top devices, has increased dramatically in the past few years.” “[I]f we are slow to develop products and technologies that are more compatible with non-PC communications devices, we will fail to capture a significant share of an increasingly important portion of the market for online services.” TX 3215 at GOOGLE-03170076 37
    • Google Decided To Make Java Central To Android From: Andy Rubin To: Larry Page Sent: October 11, 2005 “Android is building a Java OS. We are making Java central to our solution because a) Java, as a programming language, has some advantages because its the #1 choice for mobile development b) There exists documentation and tools c) carriers require managed code d) Java has a suitable security framework.” TX 7 at GOOGLE-01-00019527 38
    • Google Knew Adopting Java Would Attract DevelopersTo Android “Supporting Java is the best way to September 28, 2006 harness developers” Google’s Presentation on “Android Open Handset Platform” “Fact…6M Java developers worldwide. Tools and documentation exist to support app development without the need to create a large developer services organization. There exist many legacy Java applications. The wireless industry has adopted Java, and the carriers require its support. Strategy: Leverage Java for its existing base of developers.” TX 158 at GOOGLE-01-00025584 39
    • Google Copied Java API Designs Because It Wanted ToAttract Developers To Android From: Eric Chu To: Joerg Pleumann CC: Dan Bornstein Sent: January 22, 2008 “We enable developers who are familiar with programming in Java to leverage their skills to quickly build Android apps. The APIs in Android enable developers to build extremely capable mobile apps that can rival what can be done on a desktop….” TX 238 at GOOGLE-02-00071778 40
    • Google knew it needed a critical Java license 41
    • Google Knew It Needed A Java License From: Andy Rubin To: Larry Page Sent: October 11, 2005 “My proposal is that we take a license that specifically grants the right for us to Open Source our product. We’ll pay Sun for the license and the TCK.” TX 7 at GOOGLE-01-00019527 42
    • Google Knew The License Was Critical From: Tim Lindholm To: Bill Coughran CC: Andy Rubin Sent: February 10, 2006 “As you might vaguely be aware, I have been helping Andy Rubin with some issues associated with his Android platform. This has mostly taken the form of helping negotiate with my old team at Sun for a critical license.” TX 17 at GOOGLE-12-00006964 43
    • Google Hired Key Java Business, Licensing, And TechnologyEmployees From Sun Tim Eric Lindholm Schmidt Joshua Eric Bloch Chu 44
    • Google Knew: No Sun Deal, No Java From: Eric Schmidt To: Andy Rubin Sent: May 14, 2006 “How are we doing on the Sun deal? Its it time to develop a non-Java solution to avoid dealing with them?” TX 214 at GOOGLE-01-00081724 45
    • Google Made Java Central To Android From: Brian Swetland To: Andy McFadden and others Sent: August 16, 2006 “- we are building a java based system: that decision is final.” TX 23 at GOOGLE-04-00055098 46
    • Google took no license 47
    • Google, Unwilling To Share Control With Sun, Decided ToRelease Android Without Licensing Sun’s Java IP From: Andy Rubin To: Eric Schmidt Sent: May 11, 2007 “I don’t see how we can work together and not have it revert to arguments of control. I’m done with Sun (tail between my legs, you were right). They won’t be happy when we release our stuff, but now we have a huge alignment with industry, and they are just beginning.” TX 207 at GOOGLE-01-00066909 48
    • General Public License: How It Works Developer Developers Open Source Community Builds on Information 49
    • Google Knew That Even Open Source Java Meant GoogleNeeded A License From: Andy Rubin To: Bob Lee CC: Brian Swetland, Dan Bornstein Sent: August 11, 2007 “… and as far as GPL-ing the VM, everything that is linked with the VM would get infected. The problem with GPL in embedded systems is that it’s viral, and there is no way (for example) OEMs or Carriers to differentiate by adding proprietary works. We are building a platform where the entire purpose is to let people differentiate on top of it. Finally, SUN has a different license for its library for SE and ME. The SE library is LGPL, ME library is GPL. That means anything that links with the ME library gets infected. And the SE library is not optimized for embedded systems. Sun chose GPL for this exact reason so that companies would need to come back to them and take a direct license and pay royalties.” TX 230 at GOOGLE-02-00020474 50
    • Google Copied From Apache Harmony Knowing That It WasNot Licensed From: Bob Lee To: Eric Schmidt Sent: May 30, 2008 Lee wrote: “Sun puts field-of-use restrictions in the Java SE TCK licenses which prohibit Java SE implementations from running on anything but a desktop or server. These restrictions prevent Apache Harmony from independently implementing Java SE (Harmony can’t put those restrictions on their own users and still Apache license the code) not to mention Android (though that’s water under the bridge at this point).” Schmidt responded: “I’m not surprised by Sun’s position….” TX 405 at GOOGLE-27-00002479 51
    • Google Tried To Conceal Its Use Of Java From: Andy Rubin To: Dick Wall Sent: March 24, 2008 “1) Are we able to answer direct developer questions about Android at the booth? Yes. One-on-one only, please.” “2) Can we demonstrate the tooling, emulator, developer environment, etc? Yes, one-on-one only please, where you know exactly who you are talking to. Please don’t demonstrate to any sun employees or lawyers.” TX 29 at GOOGLE-01-00035931 52
    • Google Tried To Conceal Its Use Of Java Sent: August 5, 2009 Sent: November 17, 2007 From: Dan Bornstein From: Dan Bornstein To: Jesse Wilson To: cjd@google.com Subject: How aggressive Subject: Follow-up do we scrub the J word? “How aggressive do we scrub the J word?” “Scrub out a few more J’s.” “it would certainly make our docs more consistent if we omitted references to J2SE and preferred ‘VM’ over ‘JVM.’” TX 26 at GOOGLE-02-00052356 TX 233 at GOOGLE-02-00039715 53
    • Google profited immensely 54
    • Does Google Make Money From Android? Q. I want to make sure I understand correctly. Its your testimony that Google does not make revenue off Android at all? A. We do not make revenue off of the open source platform, correct. We do not sell the platform. We dont license the platform. Its Andy Rubin licensed under an Apache open source license. Individual Dep. Its not a traditional software business. So the 75:12-76:2, April 5, 2011 answer is no, we dont make money off of licensing Android. Q. That wasnt the question. The question is: Do you make revenue off of Android? Not licensing Android. A. No, I dont believe we make money off of Android. 55
    • Does Google Make Money From Android? Q. I want to make sure I understand correctly. Its your testimony that Google does not make revenue off Android at all? A. We do not make revenue off of the open source platform, correct. We do not sell the platform. We dont license the platform. Its licensed under an Apache open source license. Its not a traditional software business. So the answer is no, we dont make money off of licensing Andy Rubin Android. Individual Dep. Q. That wasnt the question. The question is: 75:12-72:2, Do you make revenue off of Android? April 5, 2011 Not licensing Android. A. No, I dont believe we make money off of Android. 56
    • Android Activations and Models Since October 2008(Millions) Number of Android Number of Models Activations Released 300 250 200 150 100 50 0 Oct Aug Oct Aug Oct Aug Oct Nov Feb Apr Mar Sep Nov Feb Apr Mar Sep Nov Feb Apr Mar Sep Nov Feb Mar Dec May Jul Dec May Jul Dec May Jul Dec Jan Jun Jan Jun Jan Jun Jan 1 13 65 147 152 2008 2009 2010 2011 2012 57
    • Actually, Android Is “Hugely Profitable” For Google October 13, 2011 Google Inc. Q3 2011 Earnings Call Eric Schmidt: “…not only is there more searches, and there’s more ads, but it’s also more lucrative. So, on that basis alone, Android is hugely profitable.” Schmidt Quote From Q3 2011 Earnings Call 58
    • Java Technology and LicensingGoogle’s Need for Java Technology and License Google’s Infringement What We Will Prove 59
    • Java Materials Are Copyrighted 60
    • The United States Constitution’s Copyright Clause The United States Constitution Article I, Section 8, Clause 8 empowers the United States Congress: “To promote the progress of science and useful arts, by securing for limited times to authors and inventors the exclusive right to their respective writings and discoveries.” 61
    • Designing APIs Requires Creativity And Skill “I find it very rewarding to design great APIs and have people come to me years later and say, wow, you know, the collections framework changed my life.” -Joshua Bloch, Google Chief Java Architect & Former Designer of Sun Java APIs (Bloch Dep. 92:13-93:16, July 8, 2011) “Just as it’s hard to find people that are really good at anything that’s hard, whether it be, you know, being an artist, a football player, a concert violinist. Those things are hard. This is something that’s hard in the same way.” -Google’s Copyright Expert (Astrachan Dep. 128:9-13, Sept. 9, 2011) 62
    • Designing APIs Requires Creativity And Skill TX 624 at OAGOOGLE0100219557 63
    • What Google Copied JAVA ANDROID Google copied Java API API API designs into Android APIs Google based Android API CODE class libraries on Java API designs Google copied from CODE CODE Java code into Android code 64
    • Each Java API Design Contains Hundreds of Elements AndComplex Interactions With Other APIs Java API Packages Copied java.awt.font java.sql java.nio java.nio java.beans java.text java.util Classes Classes java.io java.util.jar Buffer Buffer java.lang java.util.logging ByteBuffer ByteBuffer java.lang.annotation java.util.prefs ByteOrder ByteOrder java.lang.ref java.util.regex CharBuffer CharBuffer java.lang.reflect java.util.zip DoubleBuffer DoubleBuffer java.net javax.crypto FloatBuffer FloatBuffer java.nio java.nio.channels javax.crypto.interfaces IntBuffer IntBuffer javax.crypto.spec LongBuffer LongBuffer java.nio.channels.spi javax.net MappedByteBuffer MappedByteBuffer java.nio.charset javax.net.ssl ShortBuffer ShortBuffer java.nio.charset.spi java.security javax.security.auth Exceptions Exceptions java.security.acl javax.security.auth.callbackBufferOverflowException BufferOverflowException java.security.cert javax.security.auth.login BufferUnderflowException BufferUnderflowException java.security.interfaces javax.security.auth.x500 InvalidMarkException InvalidMarkException java.security.spec javax.security.cert ReadOnlyBufferException ReadOnlyBufferException javax.sql 65
    • Each Java API Design Contains Hundreds of Elements AndComplex Interactions With Other APIs java.lang.Object protected Object clone() boolean equals(Object obj) protected void finalize() Class<? extends Object> getClass() int hashCode() java.nio void notify() void notifyAll() String toString() void wait() void wait(long timeout) void wait(long timeout, int nanos) Buffer ByteOrder CLASSES EXCEPTIONS int capacity() static ByteOrder BIG_ENDIAN Buffer clear() static ByteOrder LITTLE_ENDIAN Buffer flip() static ByteOrder nativeOrder() boolean hasRemaining() String toString() boolean isReadOnly() int limit() Buffer limit(int newLimit) Buffer mark() int position() Buffer position(int newPosition) int remaining() Buffer reset() Buffer rewind() ByteBuffer CharBuffer DoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer static CharBuffer allocate(int capacity) static DoubleBuffer allocate(int static FloatBuffer allocate(int static IntBuffer allocate(int static LongBuffer static ShortBuffer allocate(int MappedByteBuffer CharBuffer append(char c) capacity) capacity) capacity) allocate(int capacity) capacity)static ByteBuffer allocate(int capacity) CharBuffer append(CharSequence csq) double[] array() float[] array() int[] array() long[] array() short[] array() MappedByteBuffer force() put(byte[] src)static ByteBuffer allocateDirect(int capacity) ByteBuffer CharBuffer append(CharSequence csq, int start, int end) int arrayOffset() int arrayOffset() int arrayOffset() int arrayOffset() int arrayOffset()byte[] array() char[] array() abstract DoubleBuffer abstract FloatBuffer abstract IntBuffer abstract LongBuffer abstract ShortBuffer boolean isLoaded() ByteBuffer put(byte[] src, intint arrayOffset() int arrayOffset() asReadOnlyBuffer() asReadOnlyBuffer() asReadOnlyBuffer() asReadOnlyBuffer() asReadOnlyBuffer() offset, int length) MappedByteBuffer load() put(ByteBuffer src)abstract CharBuffer asCharBuffer() ByteBuffer abstract CharBuffer asReadOnlyBuffer() abstract DoubleBuffer abstract FloatBuffer abstract IntBuffer abstract LongBuffer abstract ShortBufferabstract DoubleBuffer asDoubleBuffer() char charAt(int index) compact() compact() compact() compact() compact() abstract ByteBuffer put(int index,abstract FloatBuffer asFloatBuffer() abstract CharBuffer compact() int compareTo(DoubleBuffer int compareTo(FloatBuffer int compareTo(IntBuffer int compareTo(LongBuffer int compareTo(ShortBuffer byte b)abstract IntBuffer asIntBuffer() int compareTo(CharBuffer that) that) that) that) that) that) abstract ByteBuffer putChar(charabstract LongBuffer asLongBuffer() abstract CharBuffer duplicate() abstract DoubleBuffer abstract FloatBuffer abstract IntBuffer abstract LongBuffer abstract ShortBuffer value)abstract ByteBuffer asReadOnlyBuffer() boolean equals(Object ob) duplicate() duplicate() duplicate() duplicate() duplicate() abstract ByteBuffer putChar(intabstract ShortBuffer asShortBuffer() abstract char get() boolean equals(Object ob) boolean equals(Object ob) boolean equals(Object ob) boolean equals(Object ob) boolean equals(Object ob) index, char value)abstract ByteBuffer compact() CharBuffer get(char[] dst) abstract double get() abstract float get() abstract int get() abstract long get() abstract short get()int compareTo(ByteBuffer that) CharBuffer get(char[] dst, int offset, int length) DoubleBuffer get(double[] dst) FloatBuffer get(float[] dst) abstract int get(int index) abstract long get(int abstract short get(int index) abstract ByteBufferabstract ByteBuffer duplicate() abstract char get(int index) DoubleBuffer get(double[] dst, FloatBuffer get(float[] dst, int IntBuffer get(int[] dst) index) ShortBuffer get(short[] dst) putDouble(double value)boolean equals(Object ob) boolean hasArray() int offset, int length) offset, int length) IntBuffer get(int[] dst, int LongBuffer get(long[] dst) ShortBuffer get(short[] dst, abstract ByteBuffer putDouble(intabstract byte get() int hashCode() abstract double get(int index) abstract float get(int index) offset, int length) LongBuffer get(long[] dst, int offset, int length) index, double value)ByteBuffer get(byte[] dst) abstract boolean isDirect() boolean hasArray() boolean hasArray() boolean hasArray() int offset, int length) boolean hasArray() abstract ByteBuffer putFloat(floatByteBuffer get(byte[] dst, int offset, int int length() int hashCode() int hashCode() int hashCode() boolean hasArray() int hashCode() value)length) abstract ByteOrder order() abstract boolean isDirect() abstract boolean isDirect() abstract boolean isDirect() int hashCode() abstract boolean isDirect() abstract ByteBuffer putFloat(intabstract byte get(int index) abstract CharBuffer put(char c) abstract ByteOrder order() abstract ByteOrder order() abstract ByteOrder abstract boolean isDirect() abstract ByteOrder order() index, float value)abstract char getChar() CharBuffer put(char[] src) abstract DoubleBuffer abstract FloatBuffer put(float order() abstract ByteOrder order() abstract ShortBuffer put(int abstract ByteBuffer putInt(intabstract char getChar(int index) CharBuffer put(char[] src, int offset, int length) put(double d) f) abstract IntBuffer put(int abstract LongBuffer index, short s) value)abstract double getDouble() CharBuffer put(CharBuffer src) DoubleBuffer put(double[] src) FloatBuffer put(float[] src) i) put(int index, long l) abstract ShortBuffer abstract ByteBuffer putInt(intabstract double getDouble(int index) abstract CharBuffer put(int index, char c) DoubleBuffer put(double[] src, FloatBuffer put(float[] src, int IntBuffer put(int[] src) abstract LongBuffer put(short s) index, int value)abstract float getFloat() CharBuffer put(String src) int offset, int length) offset, int length) IntBuffer put(int[] src, int put(long l) ShortBuffer put(short[] src) abstract ByteBuffer putLong(intabstract float getFloat(int index) CharBuffer put(String src, int start, int end) DoubleBuffer put(DoubleBuffer FloatBuffer put(FloatBuffer offset, int length) LongBuffer put(long[] src) ShortBuffer put(short[] src, index, long value)abstract int getInt() int read(CharBuffer target) src) src) IntBuffer put(IntBuffer src) LongBuffer put(long[] src, int offset, int length) abstract ByteBuffer putLong(longabstract int getInt(int index) abstract CharBuffer slice() abstract DoubleBuffer put(int abstract FloatBuffer put(int abstract IntBuffer put(int int offset, int length) ShortBuffer put(ShortBuffer value)abstract long getLong() abstract CharSequence subSequence(int start, int end) index, double d) index, float f) index, int i) LongBuffer put(LongBuffer src) abstract ByteBuffer putShort(intabstract long getLong(int index) String toString() abstract DoubleBuffer slice() abstract FloatBuffer slice() abstract IntBuffer slice() src) abstract ShortBuffer slice() index, short value)abstract short getShort() static CharBuffer wrap(char[] array) String toString() String toString() String toString() abstract LongBuffer slice() String toString() abstract ByteBuffer putShort(shortabstract short getShort(int index) static CharBuffer wrap(char[] array, int offset, int static DoubleBuffer static FloatBuffer wrap(float[] static IntBuffer wrap(int[] String toString() static ShortBuffer value) boolean hasArray() length) wrap(double[] array) array) array) static LongBuffer wrap(short[] array) abstract ByteBuffer slice()int hashCode() static CharBuffer wrap(CharSequence csq) static DoubleBuffer static FloatBuffer wrap(float[] static IntBuffer wrap(int[] wrap(long[] array) static ShortBuffer String toString()abstract boolean isDirect() static CharBuffer wrap(CharSequence csq, int start, int wrap(double[] array, int offset, array, int offset, int length) array, int offset, int length) static LongBuffer wrap(short[] array, int offset, static ByteBuffer wrap(byte[] array)ByteOrder order() end) int length) wrap(long[] array, int int length) static ByteBuffer wrap(byte[] array,ByteBuffer order(ByteOrder bo) offset, int length) int offset, int length)abstract ByteBuffer put(byte b) 66
    • Each Java API Design Contains Hundreds of Elements AndComplex Interactions With Other APIs 67
    • Google Copied Java API Designs API API 68
    • Android Source Code Is Based On Java API Designs API CODE java.nio package java.nio; public abstract class IntBuffer public abstract class IntBuffer extends Buffer extends Buffer implements implements Comparable<IntBuffer> Comparable<IntBuffer> public static IntBuffer allocate public static IntBuffer allocate (int capacity) (int capacity) { 69
    • Android Source Code Is Based On Java API Designs API CODE 70
    • The Copied Java API Designs And Documentation SpanThousands Of Printed Pages 71
    • Google Employees Consulted Sun’s Copyrighted JavaMaterials When Implementing Android Q. Did you consult the Java docs when doing your work on the API implementations for Android? A. Yes. Q. Okay. And where did you obtain those Bob Lee Java docs? Individual Dep. 66:1-6, 17-19, A. They’re posted for free on Sun’s Aug. 3, 2011 website… * * * Q. Did you observe any copyright notices on the specifications? A. Yes. 72
    • Google Knew It Needed A License For Copyrighted Java APIs From: Andy Rubin To: Greg Stein Sent: March 24, 2006 “Ha, wish them luck. Java.lang api’s are copyrighted. And Sun gets to say who they license the tck to, and forces you to take the ‘shared part’ which taints any clean room implementation.” TX 18 at GOOGLE-01-00018470 73
    • The Java Programming Language And The Java APIs AreDifferent Things Java APIs Java Language “‘Java may refer to three very different things: the Java programming language, the Java Application Programming Interfaces (APIs), or software source code that references and implements the APIs.” - Google Copyright Expert Owen Astrachan 74
    • Google’s copying fragmented Java 75
    • Java Specification License Requirements Are Designed ToAvoid Fragmentation License Requirements: • Adhere to Java requirements • Don’t do less or more than what is required • Do a “clean room” implementation • License and pass compatibility tests TX 610 OAGOOGLE0100067301 at 5/jdk-1_5_0-doc/docs/relnotes/license.html 76
    • Google Understood That It Should Avoid Fragmenting Java From: Andy Rubin To: Larry Page Sent: October 11, 2005 “My proposal is that we take a license that specifically grants the right for us to Open Source our product. We’ll pay Sun for the license and the TCK. Before we release our product to the open source community well make sure our JVM passes all TCK certification tests so that we dont create fragmentation.” TX 7 at GOOGLE-01-00019527 77
    • Android Fragmented Java From: Rich Miner To: Dave Burke Sent: November 6, 2007 “Q48. Does Android support existing Java apps? A. No. Q49. Is Android Java compatible? A. No.” TX 383 at GOOGLE-24-00020892 78
    • Android Fragmented Java Application Developer Community Android Application Developers Android JVM JVM JVM Java Application Developers 79
    • “Clean room” development is not an out for Google 80
    • Android Is Not A Clean Room Implementation CODE CODE rangeCheck() from Oracle java.util.arrays.java rangeCheck() from Android TimSort.javaprivate static void rangeCheck(int arrayLen, int fromIndex, int toIndex) { private static void rangeCheck(int arrayLen, int fromIndex, int toIndex) { if (fromIndex > toIndex) if (fromIndex > toIndex) throw new IllegalArgumentException("fromIndex(" + fromIndex + throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex+")"); ") > toIndex(" + toIndex+")"); if (fromIndex < 0) if (fromIndex < 0) throw new ArrayIndexOutOfBoundsException(fromIndex); throw new ArrayIndexOutOfBoundsException(fromIndex); if (toIndex > arrayLen) if (toIndex > arrayLen) throw new ArrayIndexOutOfBoundsException(toIndex); throw new ArrayIndexOutOfBoundsException(toIndex); } } Google Literally Copied Java Code 81
    • Android Is Not A Clean Room Implementation Q. Do you have a recollection of accessing Sun code while you were working on TimSort? A. I dont have a recollection, but Im perfectly willing to believe that I did. Joshua Bloch Individual Dep. You know, I think the similarity of the 181:7-14, signature, the fact that, you know, the July 8, 2011 three arguments are in the same order and have the same name, you know, is a strong indication that it is likely that I did. Google Literally Copied Java Code 82
    • Oracle has been harmed Java community has been harmed 83
    • Sun Warned Oracle About Google/Oracle Battle From: Jonathan Schwartz To: Larry Ellison Sent: April 20, 2009 “There’s obviously a lot we didn’t focus on during the past (whirlwind) week… from the instrumentation we’re building into our open source assets (so they auto-generate data about the millions of customers downloading them), to the battles with Adobe Flash/Google Android, Microsoft’s distribution dependencies, etc.” TX 2362 at OAGOOGLE0003904946 84
    • Java Technology and LicensingGoogle’s Need for Java Technology and License Google’s Infringement What We Will Prove 85
    • Why We Are Here From: Tim Lindholm To: Andy Rubin Sent: August 6, 2010 “What weve actually been asked to do (by Larry and Sergei) is to investigate what technical alternatives exist to Java for Android and Chrome. Weve been over a bunch of these, and think they all suck. We conclude that we need to negotiate a August 6, 2010 license for Java under the terms we need.” concludes Google internally alternates to Java “suck” and that Google needs to TX 10 at GOOGLE-12-10000022 “negotiate a license for Java” 2010 86
    • Google Foreshadowed This Day From: Andy Rubin To: Larry Page Sent: October 11, 2005 “If Sun doesn’t want to work with us, we have two options: 1) Abandon our work and adopt MSFT CLR VM and C# language - or - 2) Do Java anyway and defend our decision, perhaps making enemies along the way.” October 2005 August 6, 2010 “making enemies along the way,” Google internally concludes Google GOOGLE-01-00019528 TX 7 at chooses to base Android on Java alternates to Java “suck” and that Google needs to “negotiate a license for Java” 2005 2010 87
    • Timeline August 6, 2010 Google internally concludes alternates to Java “suck” and that Google needs to “negotiate a license for Java” October 2005 April 2009 June 1991 “making enemies along the Oracle “didn’t focus on... Sun begins Oak project, way,” Google chooses to the battles with... which evolves into Java base Android on Java Google Android” July/August 2005 August 12, Google acquires Android, Inc. 2010 Oracle files December 2004 Complaint Certificate of Copyright Registration issues to against Sun for Java 2 Standard Edition, v. 5.0 Google December 1992 May 2000 September 2004 October 2008 January Sun applies for ’685 patent, PTO issues ’520 patent Sun releases Java 2 Google releases 2010 which is later reissued as ’104 patent assigned to Sun Standard Edition, v. 5.0 Android platform Oracle acquires October 2003 October 2008 Sun Andy Rubin starts HTC releases HTC Dream, Android, Inc. first Android phone January 1996 April 2003 November 2007 Sun releases Java PTO issues ’104 patent Google releases platform, v. 1.0.2. assigned to Sun Android Software Development Kit Aug 2005 – May 2006 Apr 2009 Sept – Nov 2008 Mar - Jul 2010 Google and Sun/Oracle negotiate over use of Java in Android 88
    • Timeline August 6, 2010 Google internally concludes alternates to Java “suck” and that Google needs to “negotiate a license for Java” October 2005 April 2009 June 1991 “making enemies along the Oracle “didn’t focus on... Sun begins Oak project, way,” Google chooses to the battles with... which evolves into Java base Android on Java Google Android” July/August 2005 August 12, Google acquires Android, Inc. 2010 Oracle files December 2004 Complaint Certificate of Copyright Registration issues to against Sun for Java 2 Standard Edition, v. 5.0 Google December 1992 May 2000 September 2004 October 2008 January Sun applies for ’685 patent, PTO issues ’520 patent Sun releases Java 2 Google releases 2010 which is later reissued as ’104 patent assigned to Sun Standard Edition, v. 5.0 Android platform Oracle acquires October 2003 October 2008 Sun Andy Rubin starts HTC releases HTC Dream, Android, Inc. first Android phone January 1996 April 2003 November 2007 Sun releases Java PTO issues ’104 patent Google releases platform, v. 1.0.2. assigned to Sun Android Software Development Kit Aug 2005 – May 2006 Apr 2009 Sept – Nov 2008 Mar - Jul 2010 Google and Sun/Oracle negotiate over use of Java in Android 89
    • What Google Said Before LawsuitJul 26, 2005: “Must take license from Sun”Oct 11, 2005: “We’ll pay Sun for the license and the TCK” “We are making Java central to our solution”Feb 10, 2006: “helping negotiate with my old team at Sun for a critical license”Mar 24, 2006: “Java.lang api’s are copyrighted”Sept 28, 2006: “Leverage Java for its existing base of developers”Nov 6, 2007: “Is Android Java compatible?...No.” What Will GoogleNov 17, 2007: “Scrub out a few more J’s” Tell You Now?Mar 24, 2008: “Please don’t demonstrate to any sun employees or lawyers”Aug 5, 2009: “How aggressive do we scrub the J word?”Aug 6, 2010: “technical alternatives…to Java for Android…suck” “we need to negotiate a license for Java under the terms we need”Oct 13, 2011: “Android is hugely profitable” 90
    • What We Will Prove • Google decided to copy Oracle’s Java intellectual property for Android • Google did so to leverage Java technology and developer community • Google knew it needed a license to use that intellectual property • Google took no license • Google profits immensely • Google is liable for infringement 91