An explanation of the district court's holding in Oracle v. Google that the Google's implementation in Android of a portion of the Java API specification did not infringe the copyright in Sun's/Oracle's implementation because the API was not copyrightable
Oracle v. Google: Deciphering the district court’s decision of no copyright protection for computer APIs AIPLA 2013
1. Oracle v. Google
Deciphering the district court’s decision of no copyright
protection for computer APIs
American Intellectual Property Law Association
2013 Annual Meeting
Marc A. Hubbard
Hubbard Law PLLC
mhubbard@hubbardip.com
3. What is Java?
An object-oriented programming language
•Write source code in Java and compile into a platform independent object
code called “bytecode”
A software platform enabling “write once, run anywhere”
• A “virtual machine” (one for each OS/hardware platform) (“JVM”)
• Interprets (executes) programs written in Java, thus providing the
abstraction layer necessary to achieve platform independence for
applications
• An extensible application programming interface (API)
• Comprised of multiple libraries, referred to as “packages,” of previously
written software (classes and interfaces) that provide “core” functions
that can be called by applications in written Java and running on a Java
virtual machine
3
5. Java object oriented programming
METHOD — a function that can be called by another part of the program
or by, for example, another application program is referred to as a
“method”
5
• A method must be a member of a class
CLASS — a blueprint for an “object” that will be created upon execution of
the program
• Each object has a “state” = data stored in fields in memory
• Each object exhibits behavior = methods
PACKAGE — related classes organized into namespaces called “packages”
6. Java class file example
6
public class Bicycle {
// the Bicycle class has
// three fields
public int cadence;
public int gear;
public int speed;
// the Bicycle class has
// one constructor
public Bicycle(int startCadence, int startSpeed,
int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
// the Bicycle class has
// four methods
public void setCadence(int newValue) {
cadence = newValue;
}
public void setGear(int newValue) {
gear = newValue;
}
public void applyBrake(int decrement) {
speed -= decrement;
}
public void speedUp(int increment) {
speed += increment;
}
}
Declaration of the class and
start of body of class
Declaration of data fields and
their types for the class
Constructor “ instantiates” an
object in memory with initial
values
Declaration of method
Body of Method
7. Java API
A library of prewritten programs that perform common
tasks or functions likely to be used application
developers.
The API’s specification defines how the services of library
are called by another program: names, types of inputs,
output returned, exceptions, etc.
Very helpful to application programmers
7
8. Java API classes
Simplified example of package, class, method within
API
Part of body of method in class file of an application calling
method
8
int a = java.lang.Math.max (2, 3);
Calling method “max” with
arguments “2” and “3”
package java.lang;
public class Math {
public static int max (int x, int y) {
if (x > y) return x ;
else return y ;
}
}
Declares package “java.lang”
Declares class “java.lang.math”
Declares method “java.lang.math.max”
Body of method
9. Oracle’s Java API
In 1996, API had 8 packages
Sun and the Java Community Process developed standard
specifications for Java classes and methods
By 2008, API had 166 packages, containing over 600
classes with over 6000 methods
Copyright in API implementation registered as a single
work
9
10. Android
A complete software stack for mobile devices that is
open source and without license fees
•Application programs are written using Java language
•Virtual machine (called “Dalvick”) interprets Java bytecode
(.class or .jar file) that has been modified (into a “.dex” file)
•A library written in Java implements 37 of Java’s 166
packages
10
11. Android System Architecture
11
Blue = written in Java
API of core
packages
Google’s version
of the Java virtual
machine
12. Replicated elements
Replicated elements freely* chosen by Google —
•Names — names of packages, classes, methods, and arguments
generally identical
• Structure or arrangement of methods into classes, and classes into
packages
• Functions implemented — including inputs and outputs
*3 packages arguably essential to use of Java language. Other
names and organization chosen for convenience of
programmers?
12
13. Replicated elements
Replicated elements prescribed by Java language —
•Form of declaration statements for packages, classes and
methods, and of calls to methods
•“Throw” statements (for generating exceptions)
•Standard terms (e.g. “public,” “private,” “static”)
•Types of values (e.g. “int”, “boolean,” “char,” and “string”)
13
14. Dissimilarities
The body of the methods — the “implementation”
•Lines of program instructions that implement actual
functionality of the method
Net result:
•3% of the lines in the 37 packages of the Android API are
identical to Java API
•97% of the lines are dissimilar
14
15. Time line of events preceding lawsuit
1996 — Java released by Sun Microsystems
2005 — Google acquires Android; begins negotiations
with Sun to license Java
2007 — Google releases Andriod
2010 (early) — Oracle acquires Sun
2010 (late) — Oracle sues Google in N.D. Calf. (Alsup, J.)
for patent and copyright infringement
15
16. Oracle’s position
Allowing copying of specification for the Java API leads
allow for “fragmentation” / Balkanization of platforms
API specification protectable under SSO theory (Whelan
and Johnson Controls) and as a taxonomy (American Dental
Association)
•Structure of packages/classes/methods were creative and
expressive
•Organization of methods into classes and packages like a
taxonomy
16
17. Google’s position
Programmed its own implementation of an API and VM
Any copying was privileged fair use or de minimus
Copied elements of Java API constitute an unprotectable
method of operation
17
18. Jury trial
(1) Phase 1: copyright infringement
Copyrightability assumed.
Jury finds that Android API infringed copyright in Java API and
rejects defenses of de minimus copying and fair use
(2) Phase 2: no patent infringement
Judge Alsup rules on protectability of replicated elements
after trial
18
19. Main issue in May 31, 2012 order
“While Google took care to provide fresh line-by-line
implementations (the 97 percent), it generally replicated
the overall name organization and functionality of 37
packages in the Java API (the 3 percent). The main issue
addressed herein is whether this violated the Copyright
Act and more fundamentally whether the replicated
elements were copyrightable in the first place.”
— Judge Alsup
19
20. Court’s distillation of legal principles
Idea/Expression dichotomy
• No idea, procedure, process, system, method of operation, concept regardless of the form
20
cannot be protected — cites17 U.S.C. §102(b); Baker v. Seldon.
Merger doctrine
• When there is only one or just a few ways to express something, no one can claim ownership
of such expression by copyright.
Names and short phrases doctrine
• Names and short phrases are not copyrightable in 9th Circuit — cites 37 C.F.R. 202.1(a); Sega
v. Accolade (9th Cir. 1992)
No “sweat of the brow”
• Court should not yield to temptation to find copyrightability merely to reward an investment
in a body of intellectual property — cites Feist Publications, Inc. (1991).
21. Court criticizes structure, sequence,
organization (SSO) theory
Now disfavored in 9th and other circuits. See Sega v. Accolade,
Inc. (9th Cir. 1992)
Fails to recognize the danger of conferring monopoly by
copyright on what Congress had expressly warned should only
be granted by patent. Cites Sega
Effectively an assertion of exclusive rights to functional system
or method of operation belonging in the realm of patents
Whelan and Johnson Controls took “too narrow a view of the
‘idea’”
21
22. Court chooses abstraction, filtration and
comparison analysis
Developed in Computer Associates v. Altai (2d Cir 1992); followed by
Apple v. Microsoft (9th Cir. 1994)
Abstraction: dissect program according to its varying levels of generality to
provide a framework
Filtration: examine each level of generality or abstraction in order to filter
out those elements of the program which are unprotectable.
Comparison: compare remaining protectable elements with the allegedly
infringing work to determine whether the defendants have misappropriated
substantial elements of the plaintiff’s work.
22
23. Unprotectable elements that are filtered
Structure based on “practical considerations”
Structures dictated by external factors
• “Standard techniques”
• Extrinsic considerations such a computer hardware, compatibility
requirements with other programs, demands of industry being
serviced, widely accepted programming practices, hardware
standards, software standards, mechanical specifications
Structures already found in public domain
23
24. Court’s responses to Oracle’s arguments
Copied elements are an arrangement of packages, classes,
names that are a taxonomy, and taxonomies can be protected
•Court: yes, but if the use of the same taxonomy or command
structure if necessary to achieve interoperability, it has to be a
method of operation
Sequence, structure and organization of a program are
protectable in 9th Circuit (Whelan, 1986; Johnson Controls, 1989)
•Court: yes, but not when they constitute a method of operation
24
25. Holding 1
Specification for each method is an idea, and anyone may use its own
code to implement method specification, including inputs, outputs, etc.
•Names of individual methods, classes and packages not protectable
25
under the short names doctrine
•The declarations of the methods and classes, save for the argument
names, are dictated by syntax of Java and therefor must be identical
(except choices of argument names). There is only one way to write
them.
•The names and declarations account most of the 3% of similar code
26. Holding 1
“The method specification was the idea. The method
implementation is the expression. No one may monopolize
the idea.”
“In sum, Google and the public were and remain free to write
their own implementations to carry out exactly the same
functions of all methods in question, using exactly the same
method specifications and names.”
26
27. Holding 2
Overall system of organization of methods not protectable
•Arrangement of methods into classes, and classes into packages
27
involved creativity and resembles a taxonomy, but it is
nevertheless a command structure or system or method of
operation
•Google replicated what was necessary, but not more than
necessary, to achieve interoperability
•Oracle’s fears of fragmentation and imperfect interoperability
arising from incomplete implementation of API tends to confirm
that it is a method of operation
28. Concluding thoughts
Court was concerned with the extrinsic effects of copyright
law protecting elements of software necessary to allow for
interoperability
• Preventing two works (software programs) from interacting was
tantamount to an exclusive right on method of operation
Specifications for an API, file format, etc. generally exist to
achieve interoperability between work and other works.
•All API specifications not protectable?
28
An object-oriented programming language
Write source code in Java and compile into a platform independent object code called “bytecode”
A software platform for “write once, run anywhere”
A “virtual machine” (one for each OS/hardware platform) (“JVM”)
Interprets (executes) programs written in Java
Provides the abstraction layer necessary to achieve platform independence for applications
An extensible application programming interface (API)
Comprised of multiple libraries, referred to as “packages,” of previously written software (classes and interfaces) that provide “core” functions that can be called by applications in written Java and running on a Java virtual machine
Every Java program must have one class with one method
A class may implement more than one method
A package is a namespace that organizes which related classes and interfaces
American Dental Association v. Delta Dental Plans Association (7th Cir. 1997)
Baker v. Seldon (1879)
Book on new system of double-entry accounting, which included blank form
Infringer made use of method of bookkeeping, but used different forms.
Section 102 (b) of title 17: In no case does copyright protection for an original work of authorship extend to any idea, procedure, process, system, method of operation, concept, principle, or discovery, regardless of the form in which it is described, explained, illustrated, or embodied in such work.
“Words and short phrases such as names, titles, and slogans; familiar symbols or designs; mere variations of typographic ornamentation, lettering or coloring; mere listing of ingredients or contents;
Sega Enterprises Ltd. v. Accolade, Inc., 977 F.2d 1510 (9th Cir. 1992), (a competitor’s use of Sega’s initialization code, consisting of merely of 20 bytes of initialization code plus the letters S-E-G-A, was of de minimis length and therefore likely a “word” or “short phrase” that is not protected)
Originally developed in the Computer Assocs. Int’l, Inc. v. Altai, Inc., 982 F.2d 693 (2nd Cir. 1992) as an aid to analyze to distinguish between unprotectable ideas and protectable expression when comparing software programs for substantially similarity.
Court admits that overall system of organized names of Java API is a taxonomy. American Dental Association v. Delta Dental Plans Association (7th Cir. 1997) (Taxonomy protectable) It is also a command structure for a system or method of operation. Calling a taxonomy does not change this fact. ADA court found that codes in dispute where not a system; they were accompanied by instructions.
Whelan Associates, Inc. v. Jaslow Dental Laboratory, Inc., 797 F.2d 1222 (3d Cir. 1986) (structure of program for managing a dental office was copyrightable because there were many different ways to structure a program to manage a dental laboratory)
Johnson Controls, Inc. v. Phoenix Control Sys., Inc., 886 F.2d 1173, 1175 (9th Cir. 1989)(affirming under abuse of discretion standard finding that SSO of program was protectable expression on grounds that there was evidence that there was room for creativity in expression of functions.)