TABLE OF CONTENTS I. INTRODUCTION 491 II. BACKGROUND AND TERMINOLOGY 493 III. SUN'S LICENSING SCHEME AND VIEWS OF GOOGLE'S INFRINGEMENT 496 IV. THE JAVA APIS ARE HIGHLY EXPRESSIVE IN A MANNER LONG 502 PROTECTED I. INTRODUCTION
A "computer program" is a set of statements or instructions to be used directly or indirectly in a computer in order to bring about a certain result. (1) Let's properly frame the terms of the debate. The debate is not whether there should be protection of software functionality under copyright law. Nobody is advocating that software functionality be included as literal or nonliteral elements within the scope of copyright law. Google admitted that it could have written its own APIs to perform exactly the same functions as the Java APIs. (2) To the extent protected as intellectual property, functions are addressed in patent or trade secret law.
Instead, the debate is between, on the one hand, the categorical exclusion of expressive software elements from copyright protection because those expressive elements can also perform functions, and on the other hand, a fact-specific approach protecting original expressive aspects of software by separating idea from expression. The latter is what copyright law has always done--separate what is protected from what is not. 17 U.S.C. [section] 102 is worded to require such an approach--copyright protection subsists in expression under [section] 102(a) but the scope of its protection does not extend to methods under [section] 102(b). To say that the Federal Circuit's decision in Oracle v. Google was an unusual or even controversial extension of copyright principles exhibits a misguided understanding of the law and the facts, and ignores the statute and relevant legislative history. (3) Congress resolved the controversy over whether to include software expression within the ambit of copyright protection when it provided copyright protection for computer programs.
This comment will address two points in Professor Menell's article, both of which suggest there is no copyright to enforce in the relevant aspects of the Java APIs. The first is Professor Menell's suggestion that Sun was perfectly happy to have others copy the declaring code of the Java APIs without restriction, and that Oracle's enforcement of copyright in the Java APIs is a departure from Sun's and the community's views. The evidence showed the opposite. Sun obtained a copyright registration for the Java platform that included the Java APIs, separately licensed the declaring code of the Java APIs in its Specification License, enforced its copyright in the APIs by insisting that licenses be taken when they were used, and specifically lamented both internally and externally that Google's conduct with respect to Android was copyright infringement. Important members of the developer community likewise viewed Android's use of the Java APIs as copyright infringement. (4) There is no basis on which to conclude that Sun had somehow long ago ceded away the copyright question for the Java APIs or that Sun's actions were inconsistent with the outcome in the Federal Circuit's opinion.
The second point to be discussed below is Professor Menell's suggestion that software elements like the Java APIs' declaring code were categorically excluded from any copyright protection until Oracle v. Google because of a legal consensus that they are a "machine." (5) Legal history shows otherwise. The National Commission on New Technological Uses of Copyrighted Works ("CONTU") recommended, and Congress adopted, copyright protection for the expressive elements of computer programs with full understanding that software is a machine. (6) The text of the statute says so. (7) CONTU's majority report expressly rejected the view that machines were categorically excluded from protection, and recommended defining computer programs to clearly acknowledge that software is a machine. Courts ever since have applied the same rules to software copyright as to other forms of literary works. (8) If software elements are expressive and not merged, then they are protectable. The Java API declaring code is no different. It is highly expressive, and Google abandoned any effort to prove that the expression merged into function. The Federal Circuit correctly decided the copyrightability question, and did so against a precedential backdrop that rendered this holding unremarkable.
In short, the Federal Circuit's opinion regarding copyrightability is no resurrection; rather, the report of the death of a copyright in the Java APIs is greatly exaggerated.
BACKGROUND AND TERMINOLOGY
The term API is used loosely to mean many different things, both in the Java context and in the larger context. (9) To make an assessment of the case, it is important not only to confirm a shared understanding of the relevant facts but also to clear away the fog of vague acronyms. First released in 1996, a distinguishing feature of the Java platform is the use of a virtual machine. (10) The virtual machine enables software programmers to write programs able to run on different types of computer hardware without having to rewrite them for each different type. (11) A programmer could now write a program once and have the program work on any device, regardless of operating system. (12) "Write once, run anywhere," became the Java credo. (13)
Oracle v. Google is not about the Java programming language. It is not about the virtual machine. (14) It is not about a type of basic electronics communication protocols, sometimes also called interfaces, which enable computer devices to communicate with one another. Instead, the case is about computer programs that Sun and Oracle developers wrote using the Java programming language, which they called the Java Application Programming Interface, or "Java API."
Sun and Oracle wrote a vast array of computer programs and organized them into "packages" of source code. (15) The packages also contained further organizational subunits including, among other things, classes, interfaces and methods. (16) Each package consists of numerous modules of tried-and-true pre-packaged programs comprising a vast menu of functions. (17) Sun/Oracle's packages were a godsend to programmers who wrote apps for all sorts of devices. Instead of reinventing the wheel, all programmers had to do was write a few lines of code that called on those tried-and-true programs. The set of Java packages (and their elements) is referred to as the Java API, while one or more Java packages is referred to as a Java API or Java APIs, respectively. (18)
The basic concept is simple: every package consists of two related types of source code--declaring code and implementing code. (19) The declaring code is the line or lines of source code that introduce, name, and specify the package, class, or method. (20) It describes for an app programmer how to invoke or "call" a particular routine from the prewritten packages. (21) The declaring code embodies both literal and nonliteral elements--it is both a compilable statement of code and it also comprises and defines the APIs' structure. (22) Implementing code is the source code that tells the computer how to carry out the declaring code. (23)
Writing any one of these packages is a creative and iterative process. It can take years. Much of the creativity lies in figuring out how to design a package and its elements--particularly all the declaring code--in a way that later programmers will find intuitive and memorable. (24) The process usually begins as an abstract high-level exercise. Developers identify a need in the Java community for new or different functions. Then, they organize a high-level summary of a possible structure for the package. For example, they wrestle with which functions to include in the package, which to put in other packages, and which to omit entirely, as well as how the various elements within the package relate to or interact with each other. They send sketches around to get comments from their colleagues, and may revise their design based on the feedback. The developers work with a clean slate, so ex ante, their options are infinite. Sun/Oracle invested hundreds of millions of dollars into this design process. (25)
In putting together Android, Google made verbatim copies of more than 11,000 lines of code comprising more than 7,000 class, interface and method declarations from 37 different packages of the Java Standard Edition. (26) Google acknowledged these were the most important packages for a mobile platform, and that it needed the Java API declarations to bring Android to market successfully and in time to compete in the burgeoning smartphone market. (27) When the structure of the relevant packages and classes is mapped, what Google took looks like this:
In short, Google copied both literal and nonliteral elements of the Java APIs when it copied 11,000 lines of declaring code and the structure and organization of 37 packages.
SUN'S LICENSING SCHEME AND VIEWS OF GOOGLE'S INFRINGEMENT
Professor Menell's article suggests, seemingly based on an earlier case involving Sun and Microsoft, that Sun did not believe it possessed a copyright in its Java APIs and that Oracle's enforcement was a departure from Sun's approach. (28) The publicly disclosed information in Oracle v. Google strongly indicates that Sun did not in fact hold this view or license in accordance with it. Indeed, a defense relying on this notion that Sun had already waived a copyright that Oracle later tried to enforce was expressly rejected after the first trial. (29)
Sun registered a copyright for the Java platform that included the Java APIs. As Professor Menell elsewhere acknowledges, Sun had (and Oracle now has) a multi-pronged licensing scheme for various elements of the Java platform, including the API specification. (30) To accommodate all comers, Sun/Oracle offers three different licenses. One, the General Public License...