Oracle America, Inc. v. Google Inc.

810 F. Supp. 2d 1002, 100 U.S.P.Q. 2d (BNA) 1373, 2011 U.S. Dist. LEXIS 104563, 2011 WL 4336691
Procedural entryThis page is a short order in Oracle America, Inc. v. Google Inc.. Read the opinion of the Court — 872 F. Supp. 2d 974
District Court, N.D. California·Decided September 15, 2011·No. C 10-03561 WHA·Published

Opinion

ORDER PARTIALLY GRANTING AND PARTIALLY DENYING DEFENDANT’S MOTION FOR SUMMARY JUDGMENT ON COPYRIGHT CLAIM

WILLIAM ALSUP, District Judge.

INTRODUCTION

In this patent and copyright infringement action involving features of Java and Android, defendant moves for summary judgment on the copyright infringement claim. With one exception described below, the motion is Denied.

STATEMENT

Oracle America Inc. accuses Google Inc. of infringing some of Oracle’s Java-related copyrights in portions of Google’s Android software platform. Specifically, Oracle accuses twelve code files and 37 specifications for application programming interface packages. The Java technology and the basics of object-oriented programming were explained in the claim construction order (Dkt. No. 137). An overview of application programming interfaces and their role in Java and Android is provided here.

1. Application Programming Interfaces (Apis).

Conceptually, an API is what allows software programs to communicate with one another. It is a set of definitions governing how the services of a particular program can be called upon, including what types of input the program must be given and what kind of output will be returned. APIs make it possible for programs (and programmers) to use the services of a given program without knowing how the service is performed. APIs also insulate programs from one another, making it possible to change the way a given program performs a service without disrupting other programs that use the service.

APIs typically are composed of “methods,” also known as “functions,” which are software programs that perform particular services. For example, a programmer might write a software program method A, which calculates the area of a room when given the shape and dimensions of the room. A second programmer then could write a program method called B, which calculates the square footage of an entire house when given the shape and dimensions of each room. Rather than reinventing a new way to calculate area, the second programmer could simply write an instruc *1006 tion in B, “for each room, ask program A to calculate the area; then add all of the return values,” using, of course, real programming language. As long as the second programmer knows what A is named, what type of “arguments” A must be given as inputs, and what return A outputs, the second programmer can write a program that will call on the services of A. The second programmer does not need to know how A actually works, or is “implemented.” There may in fact be multiple ways to implement A — for example, different ways to divide an oddly shaped room into geometric components — and the first programmer may refine his implementation of program A without disrupting program B.

A method must be defined before it can be used. A method can be “declared” (i.e., defined) in a programming language such as Java by stating its name and describing its argument(s) and return(s) according to syntax conventions. Once a method has been declared, it can documented and implemented. Documentation is not code; it is a reference item that provides programmers with information about the method, its requirements, and its use. An implementation is code that actually tells the computer how to carry out the method. Often, as in the example above, multiple implementations are possible for a given method.

In object-oriented programming, methods are grouped into “classes.” A class file typically contains several methods and related data. Classes, in turn, are grouped into “packages” known as API packages. Whereas a class generally corresponds to a single file, a package is more like a folder or directory providing an organizational structure for the class files. A given API package could contain many sub-packages, each with its own classes and sub-classes, which in turn contain their own methods. These elements generally are named and grouped in ways that help human programmers find, understand, and use them. A well developed set of API packages, sometimes called a “class library,” is a powerful tool for software developers; as such, it can help attract developers to a particular platform.

The specification for a class library— much like the specification for an automobile — is an item of detailed documentation that explains the organization and function of all packages, classes, methods, and data fields in the library. The class library specification for a given software platform, sometimes called the “API Specification” is an important reference item for programmers. In order to make effective use of the APIs, a programmer must be able to find the portion of the specification describing the particular package, class, and method needed for a given programming task.

2. Java and Android.

As explained in previous orders, Java and Android are both complex software platforms with many components. For example, the Java platform includes the Java programming language, Java class libraries, the Java virtual machine, and other elements. The Java programming language has been made freely available for use by anyone without charge. Both sides agree on this. Other aspects of the Java platform, however, such as the virtual machine and class libraries, allegedly are protected by patents and copyrights.

The Android platform uses the Java programming language; thus, software developers already familiar with the Java language do not have to learn a new language in order to write programs for Android. In contrast to Java, the Android platform uses the Dalvik virtual machine instead of the Java virtual machine, provides Android class libraries, and has other non-Java components. The Java platform has been *1007 used primarily on desktop computers, but it also has been used on cell phones and other mobile computing devices. Android, on the other hand, was designed specifically for mobile devices. Java and Android compete in the market for mobile computing software.

According to Oracle, Android is an unauthorized and incompatible Java implementation. The Java platform and the Android platform each includes class libraries with more than one hundred API packages. Android allegedly supports some, but not all, of the APIs defined for the Java platform. Thus, some programs written for the Java platform will not run properly on the Android platform, even though both use the Java language. Similarly, the Android platform allegedly includes additional APIs that are not part of the Java platform. Thus, some programs written for the Android platform will not run properly on the Java platform, even though they are written in the Java language. This so-called fragmentation undermines the “write once, run anywhere” concept underlying the Java system and supposedly damages Oracle by decreasing Java’s appeal to software developers.

3. Terminology.

The term API is slippery.

Free access — add to your briefcase to read the full text and ask questions with AI

Oracle America, Inc. v. Google Inc., 810 F. Supp. 2d 1002, 100 U.S.P.Q. 2d (BNA) 1373, 2011 U.S. Dist. LEXIS 104563, 2011 WL 4336691 (N.D. Cal. 2011).

810 F. Supp. 2d 1002 (Oracle America, Inc. v. Google Inc.) — published by Counsel Stack Legal Research, free access to 12M+ legal documents.

Related

Apple Computer, Inc. v. Microsoft Corp.
35 F.3d 1435 (Ninth Circuit, 1994)
Newton v. Diamond
388 F.3d 1189 (Ninth Circuit, 2004)
Surrell v. California Water Service Co.
518 F.3d 1097 (Ninth Circuit, 2008)
Jada Toys, Inc. v. Mattel, Inc.
518 F.3d 628 (Ninth Circuit, 2008)
Tattoo Art, Inc. v. Tat International, LLC
794 F. Supp. 2d 634 (E.D. Virginia, 2011)
Satava v. Lowry
323 F.3d 805 (Ninth Circuit, 2003)
Lamps Plus, Inc. v. Seattle Lighting Fixture Co.
345 F.3d 1140 (Ninth Circuit, 2003)
Swirsky v. Carey
376 F.3d 841 (Ninth Circuit, 2004)