SlideShare ist ein Scribd-Unternehmen logo
1 von 91
Downloaden Sie, um offline zu lesen
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 Software
Technology




                                                         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 To
Release 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 A
Java License
                                    From: Tim Lindholm
                                    To: Andy Rubin
                                    Sent: August 6, 2010




        “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
                                                                24
Java Technology and Licensing



Google’s Need for Java Technology and License



           Google’s Infringement



            What We Will Prove

                                                25
Traditional Approach: Develop Application For Each Type
Of 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 Attract
Application 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 Software
Development

     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 Many
Java 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 Licensing



Google’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 it's 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 Developers
To 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 To
Attract 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 Technology
Employees 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 To
Release 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 Google
Needed 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 Was
Not 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.
                        It's 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 don't license the platform. It's
    Andy Rubin          licensed under an Apache open source license.
   Individual Dep.
                        It's not a traditional software business. So the
     75:12-76:2,
    April 5, 2011       answer is no, we don't make money off of
                        licensing Android.
                     Q. That wasn't the question. The question is:
                        Do you make revenue off of Android? Not
                        licensing Android.
                     A. No, I don't believe we make money off
                        of Android.
                                                                           55
Does Google Make Money From Android?


                          Q. I want to make sure I understand
                             correctly. It's 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 don't license the
                               platform. It's licensed under an Apache
                               open source license. It's not a traditional
                               software business. So the answer is no,
                               we don't make money off of licensing
         Andy Rubin            Android.
        Individual Dep.   Q. That wasn't 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 don't 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 Licensing



Google’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 And
Complex 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 And
Complex 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, int
int 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 ShortBuffer
abstract 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(char
abstract 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(int
abstract 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 ByteBuffer
abstract 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(int
abstract 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(float
ByteBuffer 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(int
abstract 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(int
abstract 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(int
abstract 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(int
abstract 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(long
abstract 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(int
abstract 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(short
abstract 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 And
Complex 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 Span
Thousands Of Printed Pages




                                                     71
Google Employees Consulted Sun’s Copyrighted Java
Materials 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 Are
Different 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 To
Avoid 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
                              we'll make sure our JVM passes all TCK certification
                              tests so that we don't 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.java


private 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 don't have a recollection, but I'm
                           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 Licensing



Google’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 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
                                                        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 Lawsuit
Jul 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 Google
Nov 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

Weitere ähnliche Inhalte

Was ist angesagt?

Google, by Filippo B.
Google, by Filippo B.Google, by Filippo B.
Google, by Filippo B.Mrs Congedo
 
Group case study assignment
Group case study assignmentGroup case study assignment
Group case study assignmentOlgaKovalchuk15
 
Dr Pepper Sale To Keurig Green Mountain Presentation
Dr Pepper Sale To Keurig Green Mountain PresentationDr Pepper Sale To Keurig Green Mountain Presentation
Dr Pepper Sale To Keurig Green Mountain PresentationNeil Kimberley
 
APPLE Inc ppt
APPLE Inc pptAPPLE Inc ppt
APPLE Inc pptHome
 
Intel Presentation
Intel Presentation Intel Presentation
Intel Presentation boydelle
 
UFO Moviez presentation
UFO Moviez presentationUFO Moviez presentation
UFO Moviez presentationPrabhat Kumar
 
Netflix: Case study (Indian Perception)
Netflix: Case study (Indian Perception)Netflix: Case study (Indian Perception)
Netflix: Case study (Indian Perception)Shivam Lamba
 
Google case study-incisive indore
Google case study-incisive indoreGoogle case study-incisive indore
Google case study-incisive indoreMohit Khurana
 
What is legal technology?
What is legal technology?What is legal technology?
What is legal technology?Anna Ronkainen
 

Was ist angesagt? (14)

Google
GoogleGoogle
Google
 
Google, by Filippo B.
Google, by Filippo B.Google, by Filippo B.
Google, by Filippo B.
 
Group case study assignment
Group case study assignmentGroup case study assignment
Group case study assignment
 
Dr Pepper Sale To Keurig Green Mountain Presentation
Dr Pepper Sale To Keurig Green Mountain PresentationDr Pepper Sale To Keurig Green Mountain Presentation
Dr Pepper Sale To Keurig Green Mountain Presentation
 
APPLE Inc ppt
APPLE Inc pptAPPLE Inc ppt
APPLE Inc ppt
 
Netflix
Netflix Netflix
Netflix
 
Netflix
NetflixNetflix
Netflix
 
Intel Presentation
Intel Presentation Intel Presentation
Intel Presentation
 
Presentation On Apple Inc
Presentation On Apple IncPresentation On Apple Inc
Presentation On Apple Inc
 
UFO Moviez presentation
UFO Moviez presentationUFO Moviez presentation
UFO Moviez presentation
 
Netflix: Case study (Indian Perception)
Netflix: Case study (Indian Perception)Netflix: Case study (Indian Perception)
Netflix: Case study (Indian Perception)
 
Google case study-incisive indore
Google case study-incisive indoreGoogle case study-incisive indore
Google case study-incisive indore
 
What is legal technology?
What is legal technology?What is legal technology?
What is legal technology?
 
Netflix Case Study
Netflix Case StudyNetflix Case Study
Netflix Case Study
 

Ähnlich wie Oracle Vs Google

Android application development
Android application developmentAndroid application development
Android application developmentFahad A. Shaikh
 
Introduction To android
Introduction To androidIntroduction To android
Introduction To androidZaid Khan
 
Top 7 real world applications of java
Top 7 real world applications of javaTop 7 real world applications of java
Top 7 real world applications of javaYour Team in India
 
Android introduction
Android introductionAndroid introduction
Android introductionperpetrotech
 
Getting Started with Android 1.5
Getting Started with Android 1.5Getting Started with Android 1.5
Getting Started with Android 1.5Gaurav Kohli
 
Android Development: The Basics
Android Development: The BasicsAndroid Development: The Basics
Android Development: The BasicsMike Desjardins
 
These are the top 7 alternatives to react native
These are the top 7 alternatives to react nativeThese are the top 7 alternatives to react native
These are the top 7 alternatives to react nativeMoon Technolabs Pvt. Ltd.
 
What is Codename One - Transcript.pdf
What is Codename One - Transcript.pdfWhat is Codename One - Transcript.pdf
What is Codename One - Transcript.pdfShaiAlmog1
 
Node.js vs. java which one should you choose for backend development
Node.js vs. java  which one should you choose for backend development Node.js vs. java  which one should you choose for backend development
Node.js vs. java which one should you choose for backend development Moon Technolabs Pvt. Ltd.
 
Is Java Required for Android App Development.pdf
Is Java Required for Android App Development.pdfIs Java Required for Android App Development.pdf
Is Java Required for Android App Development.pdfIndian Website Company
 
Android in Netbooks
Android in NetbooksAndroid in Netbooks
Android in NetbooksMike Demler
 
What is the reason linked in, yahoo, netflix, twitter, trello uses nodejs
What is the reason linked in, yahoo, netflix, twitter, trello uses nodejs What is the reason linked in, yahoo, netflix, twitter, trello uses nodejs
What is the reason linked in, yahoo, netflix, twitter, trello uses nodejs MoonTechnolabsPvtLtd
 

Ähnlich wie Oracle Vs Google (20)

Android application development
Android application developmentAndroid application development
Android application development
 
Seminar report on android os
Seminar report on android osSeminar report on android os
Seminar report on android os
 
Introduction To android
Introduction To androidIntroduction To android
Introduction To android
 
Top 7 real world applications of java
Top 7 real world applications of javaTop 7 real world applications of java
Top 7 real world applications of java
 
Android ppt
Android pptAndroid ppt
Android ppt
 
Andriod Session.ppt
Andriod Session.pptAndriod Session.ppt
Andriod Session.ppt
 
Android introduction
Android introductionAndroid introduction
Android introduction
 
What is Android
What is Android What is Android
What is Android
 
Getting Started with Android 1.5
Getting Started with Android 1.5Getting Started with Android 1.5
Getting Started with Android 1.5
 
Android Development: The Basics
Android Development: The BasicsAndroid Development: The Basics
Android Development: The Basics
 
4 pros and 4 cons of java
4 pros and 4 cons of java4 pros and 4 cons of java
4 pros and 4 cons of java
 
These are the top 7 alternatives to react native
These are the top 7 alternatives to react nativeThese are the top 7 alternatives to react native
These are the top 7 alternatives to react native
 
What is Codename One - Transcript.pdf
What is Codename One - Transcript.pdfWhat is Codename One - Transcript.pdf
What is Codename One - Transcript.pdf
 
Node.js vs. java which one should you choose for backend development
Node.js vs. java  which one should you choose for backend development Node.js vs. java  which one should you choose for backend development
Node.js vs. java which one should you choose for backend development
 
My android
My androidMy android
My android
 
My android
My androidMy android
My android
 
Is Java Required for Android App Development.pdf
Is Java Required for Android App Development.pdfIs Java Required for Android App Development.pdf
Is Java Required for Android App Development.pdf
 
Android in Netbooks
Android in NetbooksAndroid in Netbooks
Android in Netbooks
 
What is the reason linked in, yahoo, netflix, twitter, trello uses nodejs
What is the reason linked in, yahoo, netflix, twitter, trello uses nodejs What is the reason linked in, yahoo, netflix, twitter, trello uses nodejs
What is the reason linked in, yahoo, netflix, twitter, trello uses nodejs
 
Android
AndroidAndroid
Android
 

Kürzlich hochgeladen

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 

Kürzlich hochgeladen (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 

Oracle Vs Google

  • 2. 2
  • 3. 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
  • 5. Java Is A Software Programming Development Environment Java Programming Language Java APIs and Class Libraries Java Virtual Machine 5
  • 6. Java Achieved Enormous Success Widely adopted Runs on many kinds of devices, including phones Has millions of application developers 6
  • 7. Java On Our Computers 7
  • 8. World’s Leading Companies License Java For Their Products 8
  • 9. And Participate In The Java Community Process 9
  • 10. Java Community Relies On Java Technology Components Java Programming Language Java APIs and Class Libraries Java Virtual Machine 10
  • 11. 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
  • 12. 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
  • 13. Java was a major reason Oracle acquired Sun 13
  • 14. By 2005, Google Became Leading Search Engine On Desktops 14
  • 15. Emergence Of Smartphones Worried Google 15
  • 16. Google Acquired Android Inc. To Distribute Mobile Software Technology 16
  • 17. Google’s Requirements For Android Run on many companies’ phones Attract millions of Quick time application to developers market 17
  • 18. Java Technology Met Google’s Requirements For Android 18
  • 19. Google Decided To Build Android On Java 19
  • 20. But Sun Owned Key Java Copyrights And Patents 20
  • 21. 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
  • 22. 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
  • 23. Google, Unwilling To Share Control With Sun, Decided To Release 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
  • 24. Years Later, Google Still Needs Java Technology And A Java License From: Tim Lindholm To: Andy Rubin Sent: August 6, 2010 “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 24
  • 25. Java Technology and Licensing Google’s Need for Java Technology and License Google’s Infringement What We Will Prove 25
  • 26. Traditional Approach: Develop Application For Each Type Of Computer Application Developer 26
  • 27. 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
  • 28. Java Solution: Write Once, Run Anywhere JVM JVM JVM Application Developer Java’s Consistency Is Critical 28
  • 29. Sun Created Java APIs And Class Libraries To Attract Application 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
  • 30. Java APIs And Class Libraries Speed And Ease Software Development Application Developer End Users Write Once, Run Anywhere Write applications using Provide Java Class Libraries Java APIs based on Java API designs 30
  • 31. By 2005, Sun Achieved Widespread Adoption Of Java TX 134 at GOOGLE-01-00018143 31
  • 32. To Achieve Widespread Adoption, Sun Offered Many Java 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
  • 33. 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
  • 34. Google took Java API designs 34
  • 35. Java Technology and Licensing Google’s Need for Java Technology and License Google’s Infringement What We Will Prove 35
  • 36. 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
  • 37. 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
  • 38. 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 it's 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
  • 39. Google Knew Adopting Java Would Attract Developers To 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
  • 40. Google Copied Java API Designs Because It Wanted To Attract 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
  • 41. Google knew it needed a critical Java license 41
  • 42. 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
  • 43. 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
  • 44. Google Hired Key Java Business, Licensing, And Technology Employees From Sun Tim Eric Lindholm Schmidt Joshua Eric Bloch Chu 44
  • 45. 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
  • 46. 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
  • 47. Google took no license 47
  • 48. Google, Unwilling To Share Control With Sun, Decided To Release 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
  • 49. General Public License: How It Works Developer Developers Open Source Community Builds on Information 49
  • 50. Google Knew That Even Open Source Java Meant Google Needed 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
  • 51. Google Copied From Apache Harmony Knowing That It Was Not 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
  • 52. 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
  • 53. 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
  • 55. Does Google Make Money From Android? Q. I want to make sure I understand correctly. It's 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 don't license the platform. It's Andy Rubin licensed under an Apache open source license. Individual Dep. It's not a traditional software business. So the 75:12-76:2, April 5, 2011 answer is no, we don't make money off of licensing Android. Q. That wasn't the question. The question is: Do you make revenue off of Android? Not licensing Android. A. No, I don't believe we make money off of Android. 55
  • 56. Does Google Make Money From Android? Q. I want to make sure I understand correctly. It's 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 don't license the platform. It's licensed under an Apache open source license. It's not a traditional software business. So the answer is no, we don't make money off of licensing Andy Rubin Android. Individual Dep. Q. That wasn't 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 don't believe we make money off of Android. 56
  • 57. 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
  • 58. 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
  • 59. Java Technology and Licensing Google’s Need for Java Technology and License Google’s Infringement What We Will Prove 59
  • 60. Java Materials Are Copyrighted 60
  • 61. 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
  • 62. 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
  • 63. Designing APIs Requires Creativity And Skill TX 624 at OAGOOGLE0100219557 63
  • 64. 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
  • 65. Each Java API Design Contains Hundreds of Elements And Complex 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
  • 66. Each Java API Design Contains Hundreds of Elements And Complex 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, int int 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 ShortBuffer abstract 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(char abstract 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(int abstract 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 ByteBuffer abstract 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(int abstract 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(float ByteBuffer 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(int abstract 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(int abstract 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(int abstract 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(int abstract 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(long abstract 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(int abstract 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(short abstract 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
  • 67. Each Java API Design Contains Hundreds of Elements And Complex Interactions With Other APIs 67
  • 68. Google Copied Java API Designs API API 68
  • 69. 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
  • 70. Android Source Code Is Based On Java API Designs API CODE 70
  • 71. The Copied Java API Designs And Documentation Span Thousands Of Printed Pages 71
  • 72. Google Employees Consulted Sun’s Copyrighted Java Materials 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
  • 73. 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
  • 74. The Java Programming Language And The Java APIs Are Different 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
  • 76. Java Specification License Requirements Are Designed To Avoid 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
  • 77. 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 we'll make sure our JVM passes all TCK certification tests so that we don't create fragmentation.” TX 7 at GOOGLE-01-00019527 77
  • 78. 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
  • 79. Android Fragmented Java Application Developer Community Android Application Developers Android JVM JVM JVM Java Application Developers 79
  • 80. “Clean room” development is not an out for Google 80
  • 81. Android Is Not A Clean Room Implementation CODE CODE rangeCheck() from Oracle java.util.arrays.java rangeCheck() from Android TimSort.java private 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
  • 82. 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 don't have a recollection, but I'm 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
  • 83. Oracle has been harmed Java community has been harmed 83
  • 84. 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
  • 85. Java Technology and Licensing Google’s Need for Java Technology and License Google’s Infringement What We Will Prove 85
  • 86. Why We Are Here From: Tim Lindholm To: Andy Rubin Sent: August 6, 2010 “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 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
  • 87. 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
  • 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 88
  • 89. 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
  • 90. What Google Said Before Lawsuit Jul 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 Google Nov 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
  • 91. 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