Oracle America, Inc. v. Google Inc.
Filing
1118
RESPONSE to re #1062 Order, #1088 Order, #1057 Order Oracle's May 10, 2012 Brief Responding to Court's Questions on Copyrightability by Oracle America, Inc.. (Attachments: #1 Exhibit A)(Jacobs, Michael) (Filed on 5/10/2012)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
MORRISON & FOERSTER LLP
MICHAEL A. JACOBS (Bar No. 111664)
mjacobs@mofo.com
KENNETH A. KUWAYTI (Bar No. 145384)
kkuwayti@mofo.com
MARC DAVID PETERS (Bar No. 211725)
mdpeters@mofo.com
DANIEL P. MUINO (Bar No. 209624)
dmuino@mofo.com
755 Page Mill Road, Palo Alto, CA 94304-1018
Telephone: (650) 813-5600 / Facsimile: (650) 494-0792
BOIES, SCHILLER & FLEXNER LLP
DAVID BOIES (Admitted Pro Hac Vice)
dboies@bsfllp.com
333 Main Street, Armonk, NY 10504
Telephone: (914) 749-8200 / Facsimile: (914) 749-8300
STEVEN C. HOLTZMAN (Bar No. 144177)
sholtzman@bsfllp.com
1999 Harrison St., Suite 900, Oakland, CA 94612
Telephone: (510) 874-1000 / Facsimile: (510) 874-1460
ORACLE CORPORATION
DORIAN DALEY (Bar No. 129049)
dorian.daley@oracle.com
DEBORAH K. MILLER (Bar No. 95527)
deborah.miller@oracle.com
MATTHEW M. SARBORARIA (Bar No. 211600)
matthew.sarboraria@oracle.com
500 Oracle Parkway, Redwood City, CA 94065
Telephone: (650) 506-5200 / Facsimile: (650) 506-7114
Attorneys for Plaintiff
ORACLE AMERICA, INC.
19
UNITED STATES DISTRICT COURT
20
NORTHERN DISTRICT OF CALIFORNIA
21
SAN FRANCISCO DIVISION
22
ORACLE AMERICA, INC.
23
Plaintiff,
ORACLE’S MAY 10, 2012 BRIEF
RESPONDING TO COURT’S
QUESTIONS ON
COPYRIGHTABILITY
Defendant.
Dept.: Courtroom 8, 19th Floor
Judge: Honorable William H. Alsup
24
v.
25
GOOGLE INC.
26
27
28
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
Case No. CV 10-03561 WHA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
1.
If the Copyright Act is meant to protect expression but not vocabulary,
should the vocabulary and grammar of a computer language be copyrightable, as
distinct from programs written in the language? In this regard, please comment on
the May 2, 2012, decision of the High Court of the European Union.
Protectability of a computer programming language is not the issue in this case. However,
if sufficiently original and creative, the vocabulary and grammar of a computer language may be
protected by copyright. In Reiss v. National Quotation Bureau, Inc., Judge Learned Hand upheld
copyright protection for a code book containing coined words that could be assigned an agreed
meaning for use in cable correspondence. 276 F. 717, 718-19 (S.D.N.Y. 1921). Similarly, in
Hatfield v. Peterson, the Second Circuit upheld copyright protection for a telegraphic code that
was a compilation of non-original words and phrases, holding “the copyright is valid because of
the originality of the combination.” 91 F.2d 998, 1000 (2d Cir. 1937). An individual word alone
is not protectable, but if sufficiently original, the selection and combination of a collection of
vocabulary words in a programming language should be protectable under these same principles.
Although the threshold of originality may be more difficult to meet, the same applies to
the grammar evaluated in combination with that vocabulary. The grammar potentially adds to the
originality of the combination and arrangement of the words and, if sufficiently creative, merits
protection. See Toro Co. v. R & R Prods, 787 F.2d 1208, 1213 (8th Cir. 1986) (“A system that
uses symbols in some sort of meaningful pattern, something by which one could distinguish effort
or content, would be an original work.”). (See also ECF No. 900 at 1-5.)
The recent decision of the Court of Justice of the European Union (“CJEU”) states that
programming languages might be protected as copyrighted works if they are their author’s own
intellectual creation. Case C-406/10 SAS Institute, Inc. v. World Programming Ltd., Judgment
(May 2, 2012) ¶ 45. The SAS case was a reference, which asked for guidance from the CJEU on
a series of questions. The first set of questions concerned copyright protection for programming
languages, the functionality of a computer program and the format of data files. SAS ¶ 29.
In SAS, the CJEU addressed the potential copyrightability of these components under two
EU “directives:” Directive 91/250 (the “Software Directive”) and Directive 2001/29 (the
“Copyright Directive”). The Software Directive applies to computer programs (see id. ¶ 8(7),
28
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
1
1
9(2)); the Copyright Directive has more general application. See id. ¶ 15 (2). The court
2
concluded that a programming language is not protected under the Software Directive: “neither
3
the functionality of a computer program nor the programming language and the format of data
4
files used in a computer program to exploit certain of its functions constitute a form of expression
5
of that program for the purposes of Article 1(2) of Directive 91/250.” Id. ¶ 39.1
6
A programming language could be copyrightable under the Copyright Directive, however:
7
The Court also points out that the finding made in paragraph 39 of the present
judgment cannot affect the possibility that the SAS language and the format of
SAS Institute’s data files might be protected as works by copyright under
Directive 2001/29 if they are their author’s own intellectual creation.
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Id. ¶ 45 (citation omitted). The CJEU decision thus concludes computer programming languages
may be copyrightable if they are sufficiently original. As the Court may recall, Advocate General
Bot had recommended, in a non-binding opinion, that the CJEU find that programming languages
were not copyrightable. SAS Institute, Inc. v. World Programming Ltd., Case C-406/10 (Nov. 29,
2011) ¶ 75. (See ECF Nos 852, 859). The CJEU declined to adopt that part of his opinion.
The portion of the SAS case that is more analogous to the present circumstances, however,
concerns the set of questions relating to the defendant’s copying of the SAS user manual. The
CJEU held that copying from the SAS user manual into defendant’s own user manual and
computer program could also constitute infringement under the Copyright Directive:
Consequently, in the light of the foregoing considerations, the answer to Questions
8 and 9 is that Article 2(a) of Directive 2001/29 must be interpreted as meaning
that the reproduction, in a computer program or a user manual for that program, of
certain elements described in the user manual for another computer program
protected by copyright is capable of constituting an infringement of the copyright
in the latter manual if—this being a matter for the national court to ascertain—that
reproduction constitutes the expression of the intellectual creation of the author of
the user manual for the computer program protected by copyright.
Id. ¶ 70.
24
Notably, the court found that, while elements described in the SAS manual—including
25
1
26
27
28
SAS was only released recently and commentators are still analyzing it. It is unclear
whether the court found programming languages are not covered by the Software Directive
because they are not “computer programs” as the Directive requires (see id. ¶¶ 8(7), 9(2)) or
because, while they are computer programs, they lack sufficient “expression” within the meaning
of that Directive. The decision does state that the code relating to the programming language
would be protectable under the Software Directive as a computer program. See id. ¶ 43.
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
2
1
keywords, syntax and commands—could not be copyrighted individually, their “choice, sequence
2
and combination” may warrant copyright protection as an intellectual creation of the author:
3
4
5
It is only through the choice, sequence and combination of those words, figures or
mathematical concepts that the author may express his creativity in an original
manner and achieve a result, namely the user manual for the computer program,
which is an intellectual creation (see, to that effect, Infopaq International,
paragraph 45.)
6
Id. ¶¶ 66-67.2 Although SAS was decided under different law and involved very different facts
7
(including no finding that the defendant had copied the structural design of the code (id. ¶ 25) and
8
no issue about APIs), the CJEU decision supports a finding that Google’s copying of the SSO set
9
forth in Oracle’s API documentation constitutes infringement.
10
11
2.
If each API method is a program — pre-packaged but nonetheless a
program — did Google copy anything more than the name and the declaration
(substituting its own implementation)?
12
Yes. Google did not just copy the name and the declaration for each method. Google also
13
copied the SSO of the 37 API packages. The method names and declaration it copied are an
14
essential part of that SSO. (In this trial the term “method declaration” has often been used when
15
“method header” is technically correct. Oracle will continue to use “declaration” in this brief.)
16
The method declarations Google copied include considerable original expression. The
17
elements it copied include the mode (e.g. public or protected), the name, the parameter list, and
18
the throws clause (exception list) of thousands of methods. (See Java Language Specification 3d
19
Ed. (“JLS”) § 8.4, TX 984 at 209-237 (describing components of method header. See also RT
20
1238:13-1239:12 (describing creativity in method declarations), 1249:2-12 (Mitchell).) Google
21
copied all this into Android, including elements not required for “compatibility:”
22
23
24
25
26
27
28
Q. And roughly, what percentage of copying did you observe in your work?
2
In the Infopaq case, the CJEU held the reproduction of extracts consisting of eleven
words of text by a news summary service (5 words on either side of a key search word) fell within
the scope of protection of the Copyright Directive. Case C-5/08 Infopaq International A/S v.
Danske Dagblades Forening, [2009] ECR I-6569 (Attachment A). “[T]he possibility may not be
ruled out that certain isolated sentences, or even certain parts of sentences in the text in question,
may be suitable for conveying to the reader an element which is, in itself, the expression of the
intellectual creation of the author of that article.” Id. ¶ 47. That was particularly true since the
defendant’s data capture process “reproduces an extract of 11 words each time a search word
appears in the relevant work” and allows clients to request more than one search word. Id. ¶ 49.
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
3
1
2
3
4
5
6
7
A. Quantitatively, approximately 90 percent. There’s – occasionally there’s
something that’s not copied, and occasionally there may be some small differences
in the way things are named.
For example, the methods have parameters. Sometimes the parameter names are
different. Surprisingly, they’re the same in probably two-thirds of the cases, even
though that’s not necessary for the library to be used in the same way by
programmers.
(RT 1248:11-1249:12 (Mitchell).) Google did not rebut this evidence at trial.
But this case is not based on the copying of individual methods. It is undisputed Google
8
copied thousands of methods and other API elements and all of the relationships among them,
9
replicating the structure, sequence and organization of Oracle’s documentation and source code in
10
11
the 37 packages. Google’s expert concedes that this is the case. (RT at 2214:6-9 (Astrachan).)
The methods are a key part of that structure. Google chose to repeatedly emphasize a
12
trivial example at trial, java.lang.Math.max. This method is unusually simple because (1) like
13
other basic mathematical functions in the java.lang.Math class, it seems obvious to include it;
14
(2) it does not depend at all upon any other methods but rather stands alone; and (3) it does not
15
access data stored in the fields of any member of any class. It creates the misleading impression
16
that the only creativity in method design is selecting the class and package in which to put it in.
17
In the more typical example, however, the methods are very much the product of creative
18
design choices themselves. When an API designer sets out to design a new package, he or she
19
faces many different possibilities for addressing the particular technical challenges involved. (See
20
RT at 621:7-623:21 (Reinhold) (describing design process); 627:21-629:6 (discussing design
21
choices).) There is no simple list of standalone functions like java.lang.Math.max to plug in. As
22
Dr. Reinhold testified java.lang.Math.max does not accurately depict the work that goes into
23
designing APIs. (See RT at 2228:2-16 (“max is a pretty trivial problem. In nio we had to solve a
24
very hard problem, a portable high-performance IO API. And to do that we needed to design
25
hundreds of methods, most of them much more complicated than max, organized into doesn’t of
26
Classes across a handful of different Packages.”).)
27
28
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
4
1
Methods are designed to work with other methods and classes in a way that is intuitive,
2
effective, and best suits the goal of the API design. The design solution determines the methods
3
and the methods reflect the structure of the design.
4
To give a very simple example, suppose you have a Screen class such that a member (or
5
“instance”) of the class represents the display screen. If you want to be able to draw a rectangle,
6
one possibility would be to create a method called “drawRect that takes an x, y coordinate, a
7
height and width and draws the rectangle. The API might look like this:
8
9
10
11
12
13
14
15
16
17
18
public class Screen {
public void drawRect(in x, int y, int width, int, height) { ... }
}
To draw a rectangle with this API you would first create an instance of the class, using the
“new” keyword and then invoke the drawRect method, like so:
Screen s = new Screen();
s.drawRect(10, 10, 10, 10);
/* Get a Screen object */
/* Draw a 10x10 rectangle */
This code would produce a rectangle that is 10x10 pixels starting at the point 10 pixels
down and 10 in from the top left of your screen.
A fundamentally different choice would be to create an API that allows the user to “draw”
the rectangle using a “pen.” This design would include a different set of methods associated with
it. The API could look like this:
21
public class Screen{
public void dropPen(int x, int y) { ... }
public void raisePen() {... }
public void turn (int degrees) {... }
public void draw(int length) { ... }
}
22
One way to draw the same rectangle, would be to do the following:
23
26
Screen s = new Screen();
s.dropPen(10, 10);
s.turn(90); s.draw(10);
s.turn(90); s.draw(10);
s.turn(90); s.draw(10);
s.turn(90); s.draw(10);
s.raisePen();
27
In this highly simplified example, neither API is inherently better than the other. The first
28
is simpler, the second allows drawing other types of shapes. The methods used reflect the design
19
20
24
25
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
5
1
choice that was made. They do not arise inevitably from the decision to include a method for
2
drawing a rectangle in the API.
3
The Court can view an actual example from Java in the method detail in TX 610.2 for
4
java.util.regex.Matcher.appendReplacement. (TX 610.2 at /docs/api/java/util/regex/
5
Matcher.html.) This method "[i]mplements a non-terminal append-and-replace step" within a
6
class for matching patterns of text. Examining the code alone, the method header seems
7
straightforward enough, taking two parameters and returning a value:
8
9
public Matcher appendReplacement(StringBuffer sb, String replacement)
Id. But this seemingly simple header is followed by several paragraphs of specification text to
10
explain how to use it and how it works with other methods in the Matcher class, with the Pattern
11
class elsewhere in the java.util.regex package, and with the StringBuffer class in the java.lang
12
package. The specification of the method includes 8 lines of example code to tell developers how
13
to use the method. The simplicity of this method's design was hardly preordained—it was the
14
result of concerted, creative effort.
15
Another useful example is to consider the different approach that Oracle and Google took
16
in designing APIs for graphical user interfaces. If a Java developer wanted to create a dialog box
17
with a simple message and a button marked "OK," she might use the method
18
19
20
21
22
23
24
25
26
27
28
javax.swing.JOptionPane.showMessageDialog:
JOptionPane.showMessageDialog(frame, "This text will be displayed", "Message");
See TX 610.2 at /docs/api/javax/swing/JOptionPane.html. Displaying a similar dialog box in
Android would require the use of the android.app.AlertDialog.Builder API, which requires,
among other things, separate steps for creating the dialog box, setting the message to be displayed
(AlertDialog.Builder.setMessage()), setting the text to display on the button
(AlertDialog.Builder.setNegativeButton()), and showing the dialog (AlertDialog.create()). See
TX 767 at /android/app/AlertDialog.Builder.html.
As these examples show, method names, headers, and declarations are an integral part of
the structure and themselves reflect API developer’s design choices. Their selection, structure,
sequence and organization is original and is protectable by copyright.
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
6
1
2
3.
If the format of the name is dictated by the Java programming rules,
then is the form of “java.package.class.method” required by the syntax of the
language itself?
3
Yes, although the format of the names does not dictate an API designer’s choice of any
4
particular structure, the format of fully-qualified method names must conform with the syntax of
5
the language. But the fully qualified name can be richer than the example given in the question.
6
A package name may contain an arbitrary number of elements, separated by periods. For
7
example “java.lang” is a package name, and so is “java.util.concurrent.locks”. (See TX 610.2 at
8
/jdk-1_5_0-doc/docs/api/overview-summary.html (list of packages).) Package names need not
9
start with “java,” so “org.w3c.dom” is a package name as well. Id. Some of the packages that
10
Android did not copy from Java begin with “android” instead of “java.” (See TX 767 at
11
packages.html.; TX 984 at 154).
12
There are also different structural possibilities permitted within the syntax. For example,
13
Java allows nested “Member” classes, such as “java.nio.channels.Pipe.SinkChannel,” in which
14
one class, SinkChannel, is enclosed within another class, Pipe. (See TX 984 at 210; TX 610.2 at
15
/docs/api/java/nio/channels/Pipe.SinkChannel.html; TX 623 at \licenseebundles\source-
16
bundles\jdk-1_5_0-fcs-src-b64-windows-
17
15_sep_2004.zip.zip\j2se\src\share\classes\java\nio\channels\Pipe.java, lines 69-98.) In the
18
example above, the platform designers chose to declare the SinkChannel class within the source
19
code file for the Pipe class, and that design choice is reflected in the fully qualified name.
20
Java allows Member interfaces, where an interface is defined within another class or
21
interface. This is also reflected in the fully-qualified name. (See, e.g., TX 984 at 237; TX 610.2
22
at /jdk-1_5_0-doc/docs/api/java/lang/Thread.UncaughtExceptionHandler.html (documentation for
23
interface java.lang.Thread.UncaughtExceptionHandler, which is enclosed in the file Thread).)
24
26
4.
Could Google have come up with different names and SSO yet still
have provided the same functionality as in Android? Android users would have had
to learn a new vocabulary and a new outline but the methods would all still have
been resident in such a modified Android. True? Is this what the UK company
Spring did?
27
Yes, but with the caveat that if Google had done this one would not expect that “the
25
28
methods would all still have been resident in such a modified Android.” That may be true for
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
7
1
very simple methods (e.g., Math.max), but more sophisticated methods would be designed for a
2
completely different set of classes, interfaces, and packages. The high-level functionality could
3
be the same as the copied Java APIs, but the actual set of methods would be quite different.
4
Both parties’ experts testified that Google could have and did come up with its own APIs
5
for Android with different names and SSO but with similar functionality to the Java APIs. (See
6
RT 2288:6-12 (Mitchell); RT 2212:25-2213:19, 2220:1-7 (Astrachan).) See also TX 767 at
7
packages.html (listing package names beginning with “android” compared to those beginning
8
with “java” and “javax”).)
9
In addition, Dr. Reinhold described an open source API and class library for much the
10
same functionality as one of the Java API packages at issue, java.util.logging, but with a very
11
different SSO. (RT at 630:11-631:18(Reinhold).) Mr. Screven testified there are also alternate
12
Java APIs for mathematics and encryption. (RT at 518:4-519:15 (Screven).) Both of these
13
programming areas are covered by the Java API packages at issue here. (See TX 1072 (listing
14
logging, encryption and math packages among 37 accused packages).
15
The Court is correct that this is what SpringSource did:
16
There’s a company in the UK that built its own Java environment. And they used
the Java programming language, but they created their own set of APIs, prewritten
programs. And that other environment is called Spring.
17
18
19
20
21
22
23
24
25
26
27
28
So Spring uses the Java programming language, but it doesn’t use the Sun-created
APIs. They have their own set of APIs and their own set of prewritten programs.
(RT 290:25-291:6 (Ellison).) Of course, creating new APIs was much more time consuming and
expensive than what Google did here in its rush to bring Android to market:
Q. Does it take a period of time and expense and resources if you’re going to go
that route?
A. Yeah. Spring had to design their own APIs, and then they had to teach the
developer community about these new APIs. And they had to persuade them that
their collection of APIs, their library of programs, was in some ways better than
the library of programs that Oracle and Sun had produced.
(Id. at 304:16-22.)
5.
Is the input-output (i.e., argument and return) scheme of a method
copyrightable? For example, can someone copyright the function of inputting an
angle and outputting the cosine of that angle? If someone has a copyright on a
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
particular program to find cosines, does that copyright cover all other
implementations that perform the identical function (input = angle, output = cosine)?
No, the input-output scheme for an individual method is not copyrightable. The SSO of
the API packages, which includes thousands of these individual methods, is expressive and
protectable in its own right. Courts have also held that a “a combination of unprotectable
elements is eligible for copyright protection only if those elements are numerous enough and their
selection and arrangement original enough that their combination constitutes an original work of
authorship.” Satava v. Lowry, 323 F.3d 805, 811 (9th Cir. 2003). Specifically, courts have held
that combinations of original data elements in software may be copyrightable. See Merch.
Transaction Sys. v. Nelcela, Inc., 2009 U.S. Dist. LEXIS 25663, at *58 (D. Ariz. Mar. 17, 2009)
(finding the “selection, coordination, and arrangement of the information contained in the Lexcel
software's database schema (non-literal elements) and source code (those involving copying of
table and column names)” constituted copyrightable subject matter.)
Oracle selected thousands of methods and gave them a complex, highly original SSO by
placing them in hundreds of classes within dozens of packages. (See RT 602:4-603:6, 628:22629:6 (Reinhold); RT 1248:11-1249-1 (Mitchell).) Google copied the SSO in virtually identical
fashion, even where Oracle provided different variants for the method. The class
java.nio.IntBuffer, for instance, has 4 different variants of the “get” method:
public abstract int get ()
public abstract int get (int index)
public IntBuffer get (int[] dst)
public IntBuffer get (int[] dst, int dstOffset, int intCount)3
Google copied each of these different versions of the methods as well. (Compare TX 610.2 at
/jdk-1_5_0-doc/docs/api/java/nio/IntBuffer.html with TX 767 at java/nio/IntBuffer.html).
24
25
26
27
28
3
The parameter names in Java for this version of the “get” method are (int[] dst, int offset,
int length). As noted above, Google chose to copy Oracle’s parameter names about two-thirds of
the time. (RT 1248:11-1249:12 (Mitchell).)
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
6.
Is it agreed that the following is true, at least as of 1996?
The following were the core Java Application Programming
Interface: java.lang, java.util and java.io.
The record does not reflect a precise definition of the term “core.” If “core” means
“containing some classes mentioned in the initial version of the Java Language Specification,”
the answer is yes. But “core” should not be interpreted to mean that all of the contents of these
packages are necessary to the programming language. That is not the case. According to Dr.
Reinhold’s analysis, only 61 classes are mentioned in the normative text of the Java Language
Specification and, except for java.lang.Object, which is only partially specified, none is specified
in detail in the Language Specification. (TX 1062; RT 676:14-678:13, 684:16-685:2 (Reinhold);
RT 2196:1-4 (Astrachan), TX 984 at 6.) Dr. Bloch agreed only 60 classes are mentioned in the
Java Language Specification, but never stated what they were. (RT at 777:21-24 (Bloch). Of the
classes mentioned, almost all are in java.lang. TX 1062 (listing 55 classes from java.lang, 4
annotations from java.lang.annotation, 1 interface from java.io, and 1 interface from java.util).
These packages have all greatly expanded since they were first released in 1996. Dr.
Mitchell testified at trial as to how the structure of java.util has changed over time as that package
has grown dramatically in size. (RT at 1243:13-1244:16 (“It was just a smaller library and there
were fewer concepts in it.”).) A comparison of TX 2564 and TX 610.2 shows that java.util had
only 14 classes, and 142 methods in 1996 compared to 86 classes and 1059 methods in version
5.0. Similarly, java.io grew from only 31 classes and 304 methods in 1996 to 78 classes and 753
interfaces in version 5.0. And java.lang grew from 64 classes and 462 methods in 1996 to 95
classes and 1089 methods today.
The java.util package includes classes and interfaces for events, properties, and collections
(i.e., data structures such as lists, sets, and maps). java.lang includes classes for spawning and
managing programs running in other operating-system processes. The java.io package includes
not just basic input/output facilities but also classes for converting arbitrary Java data objects to
and from streams of bytes which can be stored in a file or transmitted over a network. No
experienced developer would expect such facilities to be part of a programming language per se.
28
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
10
1
At the hearing on May 9, the Court suggested the Java programming language may not
2
include concepts that are more commonly found in other languages. Nothing in the record
3
supports this. The only evidence at trial comparing the contents of the Java language to the
4
contents of other programming languages was the testimony of Dr. Reinhold who, at the Court’s
5
request, compared the enormously popular C programming language “to the Java programming
6
language, ignoring all of the APIs.” (RT at 640:5-24.) Dr. Reinhold stated that the Java
7
programming language is much richer, like comparing a rocket to “a DC-3.” (RT at 640:18-24.)
8
9
10
11
12
13
14
7.
Does the Java programming language refer to or require any method,
class or package outside the above three?
The package java.lang.annotation was added to the platform in J2SE 5.0 There are four
annotations from java.lang.annotation that are referenced in the third edition of the Java
Language Specification, TX 984, the edition of the JLS which corresponds to Version 5. There is
only one interface from java.io and one class from java.util that are referenced in TX 984. All of
the remaining classes come from the java.lang package. (See TX 1062.)
16
8.
To what extent do subparts of the above three Java packages refer to
any other Java packages or subpart of other packages (meaning outside the three)?
To the extent this occurs, should those outside subparts be deemed to be “core” to
the programming language?
17
The classes in the above three Java packages in J2SE 5.0 contain 85 direct references to
15
18
classes, methods, or fields in 9 other packages. Those 9 packages are: java.lang.annotation,
19
java.lang.reflect, java.math, java.net, java.nio, java.nio.channels, java.nio.charset, java.security
20
and java.util.regex. If the search is limited to start with the 61 classes in these three Java
21
packages that are actually mentioned in the JLS, including the 4 mentioned in
22
java.lang.annotation, then there are just 30 direct references to elements in 5 other packages.
23
Those packages are: java.lang.reflect, java.net, java.nio, java.nio.channels, and java.security.
24
The additional elements that are referenced are not “core” to the programming language.
25
These references are in no way required by the JLS. They are, rather, due to the unconstrained
26
choices made by the authors of the API specifications. As noted above the JLS mentions just 61
27
classes by name, but in most cases does not require them to have any particular methods or fields.
28
The JLS does specify some methods, constructors, and fields for about 20 different classes, but
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
11
1
none of these specified elements references any element located outside of java.lang, java.io, or
2
java.util. It would be wrong to say that a class or method is somehow “core” to the language
3
simply because another class refers to it.
4
5
9.
What cross-method, cross-class interdependencies exist at the
implementation level in Java? Were any of these duplicated in the Android
implementations? (The judge remembers no evidence on this point.)
6
All of the cross-method, cross-class interdependencies that are present in the APIs exist at
7
the implementation level in Java and in Android for the 37 API packages that Google copied.
8
Both parties agree the documentation and the implementation are drawn from the source code.
9
The experts agree the SSO is the same. (See RT 1248:11-1249:25 (Mitchell) RT 2214:6-9
10
11
(Astrachan).)
In addition, many of the same cross-class relationships that exist at the declaration or
12
method header level also exist at the implementation level. For example, a method might have a
13
parameter list that includes a type defined in a different class. (See RT 602:18-603:4 (Reinhold)
14
(discussing demonstrative method with class Color as a parameter).) It would make little sense
15
for a method to take parameters as input—whether defined in the same class or another class—
16
and then not use the parameters in the implementation.
17
With respect to implementation details that are unrelated to declarations and method
18
headers, there are many cross-method, cross-class interdependencies between classes and
19
packages in the Java implementation. Oracle did not submit any evidence at trial about the extent
20
to which any of those additional interdepencies were copied by Android.
21
22
10.
In Java, what interdependencies exist at the name/declaration level
other than the inherited characteristics from the super class, interfaces, same class,
etc.? Please explain.
23
At the level of method headers, dependencies upon other classes can occur in return and
24
parameter types and in exception lists (“throws” clauses) (JLS 8.4, p. 210). A field declaration
25
can refer to a class as the type of the field's values (JLS 8.3, p. 196). A class declaration places a
26
class within a specific package and it can refer to a superclass and also to some implemented
27
interfaces (JLS 8.1, p. 175), and similarly for interface declarations (JLS 9.1, p. 260). One can
28
find a number of interdependencies reflecting original design choices in the declarations within
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
12
1
the Java platform. The choices of which parameters to include and the order in which to include
2
them illustrate such interdependencies, because parameter types can come from other classes and
3
packages. (See RT 602:18-603:4 (Reinhold).) The class java.net.Authenticator, for instance, has
4
three different versions of a method called “requestPasswordAuthentication.” (TX 610.2 at jdk-
5
1_5_0-doc/docs/api/java/net/Authenticator.html.) The parameter list for the most detailed of
6
these contains eight different parameters:
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public static PasswordAuthentication requestPasswordAuthentication(String host,
InetAddress addr,
int port,
String protocol,
String prompt,
String scheme,
URL url,
Authenticator.RequestorType reqType) {
Id. With the exception of “int,” which is a primitive type, each of the other parameters in this list
is a type of class. InetAddress, URL, and Authentictor.RequestorType are classes within java.net,
and String is specified in java.lang. Regardless of where in the specifications each parameter type
is defined, however, requiring eight different input values in the order the developers chose to
generate “[t]he username/password, or null if one can't be gotten,” id., was a creative, nontrivial
choice that could have been structured differently, for example by putting these parameters in a
different method or class.
The list of exceptions a method throws also represents the expression of a structural
choice. The API designer must choose which exceptions to handle within a given method and
which code that calls the method will have to handle, or “catch” See TX 984 at 325-26. For
example, the class java.security.cert.Certificate contains a method identified with the header:
public abstract void verify(PublicKey key, String sigProvider) throws
CertificateException, NoSuchAlgorithmException, InvalidKeyException,
NoSuchProviderException, SignatureException
TX 610.2 at /docs/api/java/security/cert/Certificate.html. This method throws five different types
of exceptions. The designers could have chosen to have the method throw a single type of
exception or none.
11.
With respect to the Seventh Circuit decision in American Dental
Association:
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
13
1
(A)
To what extent has it been adopted in the Ninth Circuit?
2
American Dental Association v. Delta Dental Plans Association (“ADA”), 126 F.3d 977
3
(7th Cir. 1997) has not been cited in a published opinion within the Ninth Circuit. In reaching its
4
conclusion that the dental procedure taxonomy was protectable, however, the ADA court
5
expressly relied on two Ninth Circuit decisions: Practice Management Information Corp. v.
6
American Medical Association, 121 F.3d 516 (9th Cir. 1997) (see ADA at 978), and Edwin K.
7
Williams & Co. v. Edwin K. Williams & Co. East, 542 F.2d 1053 (9th Cir. 1976) (see ADA at
8
981). In Management Info., the Ninth Circuit affirmed the validity of the AMA’s copyright in its
9
catalog of medical procedure codes and descriptions (“Current Procedural Terminology” or
10
“CPT”). 121 F.3d at 520. The CPT “identifies more than six thousand medical procedures and
11
provides a five-digit code and brief description for each.” Id. at 517. The court rejected
12
plaintiff’s argument that the CPT had entered the public domain when a federal health care
13
agency adopted the CPT codes for administering its programs. Id. at 517-518. The court
14
observed that “copyrightability of the CPT provides the economic incentive for the AMA to
15
produce and maintain the CPT” and “invalidating its copyright on the ground that the CPT
16
entered the public domain when [agency] required its use would expose copyrights on a wide
17
range of privately authored model codes, standards, and reference works to invalidation.” Id. at
18
518-19.
19
In the second case, Edwin K. Williams, the Ninth Circuit upheld the validity of copyrights
20
on plaintiff’s account books. 542 F.2d at 1060-61. The account books contained blank forms and
21
instructions for the forms. Id. at 1060. One form, for example, was entitled “Stamp Control
22
Promotion” and had a description that began “This section offers an easy method of accounting
23
for Stamps or Promotion Items.” Id. The court held that “the instructions and the blank forms
24
constituted an integrated work entitled to copyright protection.” Id. at 1061.
25
Similarly, in Educational Testing Serv. v. Simon, the court found that plaintiff’s
26
copyrights in standardized test questions and forms were infringed, noting that the “headings and
27
layout of defendants’ materials further make clear that their ‘sample’ questions were created
28
through access to ETS’s copyrighted questions provided orally through students who previously
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
14
1
took the test.” 95 F. Supp. 2d 1081, 1088 (C.D. Cal. 1999). The court held that “ETS’ selection
2
of topics for a particular test form is an exercise requiring judgment and creativity, and is
3
therefore copyrightable.” Id. at 1089.
4
(B)
If the taxonomy in that decision was protectable, why
shouldn’t Sun’s hierarchical outline of packages, classes,
methods for the 37 API packages be protectable (other than
perhaps the three core packages?
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
The SSO for the 37 Java API packages is protectable. It is far more intricate and creative
than the dental code taxonomy at issue in the ADA case. The fact and expert witnesses from both
sides testifed that API design is highly creative and challenging. (RT 513:14-18 (Screven);
627:21-628:1 (Reinhold); 751:5-752:14 (Bloch); 2209:7-8 (Astrachan); TX 624 at 47 (Bloch
presentation).) It took Dr. Reinhold and a team of engineers almost two years to develop java.nio
and its related sub-packages. (RT 623:17-624:1.)
ADA recognized that taxonomies are creative works entitled to copyright protection.
ADA, 126 F.3d at 979 (Facts do not supply their own principles of organization. Classification is
a creative endeavor.) But unlike a taxonomy, the 37 API packages do not simply classify existing
data. They result from the many creative design choices made by Sun’s engineers from among
numerous possibilities for addressing technical challenges. (RT 627:21-628:23 (Reinhold).) The
SSO warrants protection under the principles expressed in the ADA decision. The java.lang,
java.io, java.util packages packages are protectable as well, for the reasons discussed in section 6.
(C)
Did ADA hold that the numbering system alone (apart
from the description) was copyrightable?
20
21
Yes. See ADA, 126 F.3d at 979 (“The number assigned to any one of the three
22
descriptions could have had four or six digits rather than five; guided tissue regeneration could
23
have been placed in the 2500 series rather than the 4200 series; again any of these choices is
24
original to the author of a taxonomy, and another author could do things differently.”). The court
25
recognized that “all three elements of the Code—numbers, short descriptions, and long
26
descriptions, are copyrightable subject matter.” Id.
27
12.
With respect to the Ninth Circuit’s decision in Kapes:
28
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
15
1
2
3
4
5
6
7
8
9
(A)
Kapes stated “Whether CDN’s selection and
arrangement of the price lists is sufficiently original to merit
protection is not at issue.” 197 F.3d at 1256. If that was not
issue, what, if anything, did Kapes expressly say about SSO?
The Ninth Circuit did not rule on the selection and arrangement of the price lists in
CDN v. Kapes, 197 F.3d 1256, 1259 (9th Cir. 1999). But it did rely upon Urantia Foundation v.
Maaherra, 114 F.3d 955, 959 (9th Cir. 1997) summarizing its holding as “the arrangement of
divine revelations met the level of creativity required for copyright.” In that case, the Ninth
Circuit addressed the selection, arrangement and structure of papers purportedly containing the
answers of divine beings to questions, which it treated as a protectable compilation:
13
In this case, the Contact Commission may have received some guidance from
celestial beings when the Commission posed the questions, but the members of the
Contact Commission chose and formulated the specific questions asked. These
questions materially contributed to the structure of the Papers, to the arrangement
of the revelations in each Paper, and to the organization and order in which the
Papers followed one another. We hold that the human selection and arrangement
of the revelations in this case could not have been so “mechanical or routine as to
require no creativity whatsoever.” Feist, 499 at 362.
14
The Urantia case confirms that the Ninth Circuit will uphold selection, arrangement and structure
15
in a written document, and that the standard for creativity it applies is a low one.
10
11
12
16
17
18
(B)
In what sense were the “prices CDN creates” in Kapes a
“compilation” within the meaning of the Copyright Act (see
197 F.3d at 1260, second col.).
Under 17 U.S.C. § 101, “A ‘compilation’ is a work formed by the collection and
19
assembling of preexisting materials or of data that are selected, coordinated, or arranged in such a
20
way that the resulting work as a whole constitutes an original work of authorship.” The court
21
agreed with the district court’s finding that “the prices in CDN’s guides are not facts, they are
22
‘wholly the product of [CDN’s] creativity.’” Id. (substitution in original). But at the same time,
23
CDN derived its price estimates by looking at wholesale prices, dealer online networks, public
24
auctions, private sales and other things, and exercising its own judgment in determining whether,
25
and to what extent, to rely on each. Id. It appears the court concluded that, because the prices
26
were based on data gathered from various sources, guides constituted a compilation of that data,
27
even if infused with creativity. It referred to them as “compilations of data chosen and weighed
28
with creativity.” Id. at 1261.
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
16
1
2
3
(C)
Didn’t Kapes treat the coin prices as“compilations”?
Please explain how this was done. Has Oracle abandoned the
compilation argument herein?
Yes. The case refers to the coin prices as “compilations” multiple times. It analyzed the
4
copyrightability of the prices as though they were compilations, citing the Urantia case and
5
concluding that the process for arriving at the prices was sufficiently original to be copyrightable,
6
even if the underlying factual data was not. Id. at 1260.
7
The evidence here does not support that the API packages were “formed by the collection
8
of preexisting materials or of data[.]” 17 U.S.C. § 101. Rather, the API packages are works of
9
authorship written from scratch. (See, e.g., RT at 621:7-623:16 (Reinhold).) Some decisions
10
have treated as “compilations” works that represent collections and assemblies of uncopyrightable
11
or copyrightable elements, regardless of how those elements were created. See, e.g, Merchant
12
Transactions, 2009 U.S. Dist. LEXIS 25663 at *46 (“coordination, selection, and arrangement of
13
these field names, as well as the fields and field types themselves, formatting, and commenting,
14
may be entitled to protection as a compilation so long as they ‘are numerous enough and their
15
selection and arrangement original enough that their combination constitutes an original work of
16
authorship.’” (quoting Satava, 323 F.3d at 811). See also id. at *58 (looking to selection,
17
coordination and arrangement of both unprotected works and protected source code).
18
In that sense, the Java API packages are protectable as compilations, as well as works of
19
authorship, particularly to the extent the Court concludes, for example, that method declarations
20
are not copyrightable themselves. Notwithstanding such a determination, the selection and
21
arrangement of so many declarations in such an elaborate and extensive structure represents
22
copyrightable subject matter under this line of authority.
23
(D)
Was originality the only issue decided in Kapes?
24
No. Kapes repeatedly emphasized the creativity involved in estimating the prices. See,
25
e.g., id. at 1261. Kapes also discussed the idea/expression dichotomy and the merger doctrine.
26
The court held that “‘the guiding consideration in drawing the line is the preservation of the
27
balance between competition and protection reflected in the patent and copyright laws.’” Id. at
28
1262 (quoting Herbert Rosenthal Jewelry Corp. v. Kalpakian, 446 F.2d 738, 742 (9th Cir. 1971).
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
17
1
It concluded CDN could not copyright the idea of creating a wholesale pricing guide, but its
2
prices warranted protection. The Court found this allowed CDN’s competitors to create their own
3
guides and compete, but still protected CDN’s creation. Id. at 1262.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
13.
When discussing use of the SSO in the 37 API packages in Android to
achieve “compatibility,” what exactly are the parties referring to? Is it
“compatibility” with programmers who write in the Java programming language?
Or compatibility with pre-existing programs? If so, approximately what percent of
pre-existing programs written for the Java platform are compatible with Android?
Is it compatibility with the TCK? Or Java virtual machine? Or java compiler?
The record reflects two definitions of compatibility. In the Java-specific sense, an
implementation is only “compatible” if it passes the TCK. (See, e.g., RT 977:22-978:1 (Google
admission) TX 610.1 (Specification License); Gupta at RT 2306:6-2307:14 (“Q. A licensee was
required to pass the TCK, even if they didn’t want to use the Java brand; is that right? A. Yes.”);
RT 294:8-21 (Ellison); RT 366:21-25 (Kurian); RT 636:4-637:2 (Reinhold).) It is undisputed that
Android has never passed an Oracle TCK. (RT 984:22-24 (Lee).)
The more general notion of compatibility is that programs built for one platform will run
on the other. Professor Mitchell explained how Android is incompatible in this way as well. RT
1331:16-1332:2, 2287:23-2288:5 (Mitchell). See also RT 1007:6-11, 1010:4-7 (Morrill); TX 383
at 8 (Android FAQ 048. “Does Android support existing Java apps? / A. No. / 049. Is Android
Java compatible? / A. No.”). Dan Bornstein testified ensuring Android would be “compatible”
with Java in this sense “wasn’t a goal of the project.” (RT at 1783:15-22 (Bornstein).)
Oracle is aware of no metrics regarding the percentage of pre-existing programs written
for the Java platform that are compatible with Android. The record refers to the fact that the byte
code formats of Java and Android are different, such that a compiled Java program will not run,
without modification, on Android, and vice versa, even if it only calls on the 37 copied packages.
(See RT 2211:3-2212:2 (Astrachan); RT 2287:13-2288:5 (Mitchell).) More significantly, there
are entire categories of incompatible programs because of packages that Google chose not to
include. For example, Android lacks Java’s java.awt.* and javax.swing.* packages, which
provide user interface capability. Compare TX 610.2 at /jdk-1_5_0-doc/docs/api/overviewsummary.html with TX 767 at packages.html. Instead Android uses its own set of graphics APIs,
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
18
1
including android.app.* and android.graphics.*. (See id.) This means that any Java program
2
requiring use of a graphical user interface will not run on Android. Similarly, Android uses
3
different APIs for sound (javax.sound.* packages are not present in package list in TX 767) and
4
for image input/output (javax.imageio.* packages not present in package list in TX 767). So
5
Android is incompatible in this regard as well. Even printing to paper (javax.print.*) is different
6
between the two platforms. (See id.)
7
8
9
10
11
12
The fact that Android wrote its own APIs to handle many of these capabilities further
demonstrates that Google’s copying was by choice, not to achieve compatibility.
14.
Inheritance does not exist among packages, only within a class. True?
If not, why not?
True. While a number of packages have sub-packages, RT 1219:18-1220:5 (Mitchell),
characteristics are inherited based on class-subclass relationships and interface relationships.
13
15.
Inheritance is a characteristic of a class that results from the
superclass-subclass feature of the Java operating systems. True? If not, why not?
14
True, with the caveat that Java is more accurately characterized as an application
15
development platform rather than an operating system. A class can inherit directly from its
16
superclass, and indirectly from that class’s superclass, and so on. (See RT 588:5-11 (Reinhold);
17
RT 1218:15-16, 1225:10-16 (Mitchell).) Interfaces can be used to relate different classes that
18
share common characteristics that are located in different packages. (See RT 589:13-18, 590:5-
19
23, 601:22-25 (Reinhold).) An interface can inherit directly from one or more superinterfaces
20
and indirectly from those interfaces’ superinterfaces, and so on. See RT 1219:16 (Mitchell). A
21
class can directly inherit from only a single class, but can implement multiple interfaces.
22
25
16.
Assuming that a copyright protection does not extend to names, including
fully qualified names, and assuming that copyright protection does not bar others from
using identical input-output (argument-return) designations, such that Google was free to
use the identical names and identical input-output designations, what more did Google
allegedly copy from the 37 packages that is allegedly covered by copyright? Put differently,
assuming Google was free to do the foregoing, to what extent was Android’s SSO dictated
by the rules of the basic programming language?
26
Answering the first question, even if copyright protection does not extend to fully
27
qualified names and input-output designations, Google still copied the following: (a) Types (but
28
not names) in field declarations (see TX 984 at 221 (noting that field declarations must include
23
24
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
19
1
types); RT 602:22-603:2(Reinhold)); (b) Subclass/superclass relationships (“X extends Y”) (RT
2
1218:15-19, 1225:10-16 (Mitchell)); (c) Interface implementation relationships (“X implements
3
Z”) (See RT 589:13-18, 590:5-23, 601:22-25 (Reinhold)); (d) Package/sub-package relationships
4
(RT 2285:12-15 (Mitchell)); (e) Specification text on which Google “based” its implementing
5
code (RT 2219:7-18 (Astrachan)); and (f) the original selection, structure, sequence, and
6
organization of the above elements, including the names and the argument-return designations.
7
Google copied all of these elements into Android. (RT 1248: 25-1249:25 (Mitchell).)
8
9
10
11
Moreover, as discussed above, even if individual names or argument-return combinations
were not protectable, and even if Google had copied no more, a combination of unprotectable
elements is still eligible for copyright protection. Satava, 323 F.3d at 811.
Answering the Court’s second question, regardless of whether Google was free to do what
12
the question assumes, Android’s SSO was not dictated by the Java programming language. The
13
only constraints Google faced were that it was obligated to follow the grammar of the Java
14
programming language (TX 984 chapter 18) as well as the non-grammatical constraints of the
15
language, e.g., a class or interface cannot extend itself or be declared more than once. (See id.)
16
Google was also obligated to include, in some form, the 60 or so classes discussed in response to
17
question 7 above.
18
None of this dictates how to design the API. If it did, every API would be the same. The trial
19
evidence showed that APIs performing similar functions were design very differently. (See
20
Response to Question 4 above.) Google’s expert admitted that Google could have designed its
21
own APIs, and the irrefutable evidence in the record is that Google did design its own APIs for
22
other packages. (RT 2213:8-19 (Astrachan).) The constructs of the programming language
23
provide an opportunity for designing a rich and complex structure but do not require it. RT at
24
619: 13-23 (Reinhold) (“very little organization or structure” required for virtual machine and
25
computer”); See also: RT 634:10-25 (Reinhold); RT 565:3-16 (Screven) (“there is nothing in the
26
Java language specification that requires that there be a class named tree, but there is a class
27
named tree within―within the standard APIs.”); RT 1238:11-1240:20 (Mitchell) (API designer
28
starts with a “clean slate”).)
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
20
1
Dated: May 10, 2012
2
MORRISON & FOERSTER LLP
By: /s/ Michael A. Jacobs
Michael A. Jacobs
3
4
Attorneys for Plaintiff
ORACLE AMERICA, INC.
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ORACLE’S BRIEF RE COPYRIGHTABILITY
CASE NO. CV 10-03561 WHA
pa-1527776
21
Disclaimer: Justia Dockets & Filings provides public litigation records from the federal appellate and district courts. These filings and docket sheets should not be considered findings of fact or liability, nor do they necessarily reflect the view of Justia.
Why Is My Information Online?