The Supreme Court decision in Oracle vs Google ends a decade-long nightmare for open source developers.
The decision of the US Supreme Court (SCOTUS) to reverse the erroneous conclusion of the US Federal Circuit appeals court (CAFC) that Google’s use of the Java SE API in Android was a copyright infringement comes as a great relief to open source programmers everywhere. Software developers have always assumed that merely including a function prototype in their code does not require copyright permission as it’s just a fact about the implementation.
A group of computer experts – including me – asked a US court to think again about fair use of APIs this month.
It was an unlucky fact that Oracle’s case against Google over Android started with patents. Their initial case fell apart almost immediately, with almost all the patent claims invalidated. The implausable backstop copyright case Oracle made against Android’s use of language-essential definitions in the Java APIs (and thus against the freedom of developers everywhere) carried on though. The initial patent case meant that the appeal when Oracle soundly lost ended up at the Court of Appeals for the Federal Circuit (CAFC) — the specialist patent appeals court in the USA — and not at a court competent to dispense copyright justice. Continue reading →
At the end of my testimony in the recent Oracle v Google trial in San Francisco, Judge Alsup asked me to explain what an API is. My answer aimed to simplify the answer for a general listener while remaining recognizable to most programmers. Here’s what I said.
The Java source code of OpenJDK usefully follows a layout convention. Up front of each file is a copyright and license statement. After that come a sequence of definitions of the various standard functions that complete the Java programming language. Together, a set of related definitions comprise a class library.
Each of those definitions comprise three parts. There is a function declaration, which defines the name of the function and the order and data types of the parameters used by the function. After that is a comment block with a summary of the specification for the function, tagged to allow it to be…