Fight Is On Between Oracle And Google Over Java API Copyrights

from the shouldn't-have-gotten-this-far dept

Last summer, we noted that there was an interesting "sideshow" in the patent dispute between Oracle and Google -- a question of whether or not Java's APIs are covered by copyright. That "sideshow" has become the main attraction now that the trial has started and many of the patent claims have been kicked out.

Oracle has been quite public with its argument (pdf), which is mostly based on taking snippets from Google emails that suggest a need to license Java. The favorite of the bunch is this one:

They also point to some snippets of code that do appeared to be copied:

If you just see that side of it, you might be convinced, but the details suggest a much less convincing story. First off, there are serious concerns about whether or not an API even can be covered by copyright. In fact, before Sun was acquired by Oracle, Sun's own CTO had said that "internet specifications are not protectable under copyright," which (you might think) gives Google an implied go ahead to make use of the API. Furthermore, many of the email snippets that Oracle presents are taken out of context -- they show little snippets of big emails and pull from very very different time periods -- ranging from 2005 to 2010, when different factors applied. Oracle also scrubbed a blog from former Sun CEO Jonathan Schwartz in which he warmly welcomed Google to the Java family when the company launched Android.

Perhaps more damning: Larry Ellison himself in 2009 at the JavaOne event spoke about Google's Android development and how they were contributing code back to Java. Ellison himself was put on the stand and appeared to contradict his own depositions when it came time to discuss the specifics of the copyright. That can't go over well. Not only that, but he stumbled, and claimed he was "not sure" when asked specific questions:

On cross-examination, Google came out firing and the room got tense quickly. “Do you understand that no one owns the Java programming language?” lead counsel Robert Van Nest asked.

Ellison began a longer answer, but Judge William Alsup interrupted him and said it was a “yes or no” question. Finally Ellison said, “I’m not sure.”

“And anyone can use it without royalty?” Van Nest followed up.

“I’m not sure,” Ellison said again.

Then Van Nest showed a video of Ellison receiving the same question on a deposition video and answering “That’s correct” to both.

Oracle's response, of course, will be that it just meant for developing apps, not for using the API -- but its other statements are a lot less clear on that. Either way, it seems pretty clear that Sun gave an implied open license to these things, so to come back now and insist otherwise is pretty questionable. Furthermore, there still are questions as to whether or not an API can actually be covered by copyright at all.

Separately, Oracle keeps talking about just how much work it is to create APIs, and even points to some Google statements about the difficulty of doing so. That's smoke and mirrors. Difficulty has no bearing on copyright law. It's kind of surprising that Oracle's lawyers would even bring it up, as "sweat of the brow" arguments won't get very far. Hell, even if it biases a jury, it would get rejected on appeal. It seems like Oracle's strategy here is just to confuse the jury and go for guilty by association because they're going to have trouble showing actual guilt.

As for the specific code snippets shown above, those a few lines out of 50,000 or so files. Under copyright there's a defense known as de minimis copying, if you're just found to have copied a very tiny portion of something. It seems like that might apply here as well.

Also, you may have heard stories about the results of this trial potentially being worth billions of dollars or something, but that was before most of the patents got thrown out. The patents left over aren't worth very much at all, and the end result means that if Oracle wins, it'll likely get less than $100 million. That's still a significant sum, but it's a lot less than what Oracle had hoped to get in this lawsuit.

In the end, as it seemed from the beginning, Oracle's case looks pretty weak (and getting weaker).

Reader Comments

De minimis or not...

Those code snippets sure look a heck of a lot like the IBM VisualAge C++ library code for exception handling from several years before Java came out with theirs. Okay, the EXACT code would not have existed, but the variable and function names were almost identical... and in those snippets there's not much else that COULD be different. And I bet IBM derived theirs from something else too. Copyright in software code is a very tenuous concept. Dare I say "totally bogus concept"?

Re: De minimis or not...

The idea that a single function or line of code can be copywritten is fundamentally flawed. Its like saying someone can copyright a word or a sentence. I can understand a copyright on an entire program if its complex enough, but single functions?

Re: De minimis or not...

Even the variable names aren't creative - they're literal descriptions of what the arguments are for.

Also, *chortle* at the fact TimSort is one of the files they're complaining about. The current Java sorting algorithm is a genuinely innovative one that Tim Peters wrote for Python and then made available to the world *for free* under an open source licence.

That's completely irrelevant to the arguments in court, but it's still hilariously ironic :)

Re: Re: Re: De minimis or not...

No, I had a look - the structure of the C code in Tim's original implementation for CPython is completely different.

The only relation the lawsuit has to timsort is that it happens to be the file where the allegedly infringing offending Android code lives.

It's just amusing to me that Oracle is claiming "OMG infringement" over a completely trivial range checking function that Google used as part of their implemention of Tim's genuinely innovative, but freely shared, sorting algorithm.

Re:

(Unrelated) Especially after what Oracle did to OpenOffice.

I find it really hard to be sympathetic with Oracle after what Oracle did to Oracle. Anyone remember Ellison's "Unbreakable" fiasco? That guy has had a problem with the truth for at least 15 years now, and it is no surprise he is conflicted now during sworn testimony.

Oracle has always been evil in every possible meaning of the word. I still remember having to deal with Oracle not releasing security patches for their products unless you had a ridiculous and burdensome support agreement. We found multiple security issues with their software and after a long discussion with them trying to get fixes pushed out to our people running their software, eventually an edict came out that said "Thou shalt not use Oracle software in our corporate environment." They weren't willing to work with us until that edict came out and they realized they were losing all the plushy contracts, and then they bent over backwards to make sure those problems were taken care of. There was a collective cry around here when they bought out Mysql.

Oracle's response, of course, will be that it just meant for developing apps, not for using the API

This is insane. It would be like claiming that eating doesn't involve swallowing.

When you develop apps - by definition - you are using an API. That's what developing *is*. The "A" stands for "Application" (as in "app") and the "P" stands for "Programming" (synonym for "developing").

Re: Re:

An API is a specification, the I being interface, just like the ethernet spec, the TCP spec, the UDP spec, the IP (internet protocol) spec, and the HTML spec. All of those are specified interfaces at various layers.

Please define the "anywhere near" that an API is not from internet specifications.

I'd be surprised if there weren't more sections of code like this that were similar.

The code in question is performing some simple sanity check on the values passed into the function. It's basic boilerplate code for this sort of thing. The Java API specifies what types of errors can be raised and in which circumstances, so there's not a lot of ways that this can be made unique.

Re:

I know. If you asked a university ICT or IT student to come up with code for a range check , without showing them the original code but gave them the exception objects you'd get pretty much that. It's pretty much a straightforward translation of the algorithm for checking if something is withing a set range:
Is the finishing point before the starting point ?
Is the starting point within the bounds of the array ? (ie raise an exception if its less than 0 (since arrays are indexed from 0)
Is the finishing point within the bounds of the array ? (ie is it a value strictly smaller than the number of items in the array (since arrays are indexed from 0, the check is for smaller values since the last value is found at size-1).

Any variations on this are basically identical subject to renaming and equivalence of operators (eg changing around greater than or equal to and not less than).

This is a pretty retarded case of "copying". Heck given the number of available variations on this (which is pretty small) and the obvious variable names, I wouldn't be surprised if this was independently derived.

Re: Re:

The issue of literal copying (of a small, relatively nondescript function) is not about the literal copying itself. Rather, it's an indicator that a clean-room process may not have been followed, meaning the people that implemented Google's workalike did so with knowledge (or access) to Oracle's implementations. Not through some nefarious means - the source code is available. However, if they did that, then Oracle can make the argument that Google's software is a derivative work of Oracle's.

What does and does not constitute a derivative work in software has vast and wide-reaching implications. For those of you who will instinctively side with the "it's not a derivative work" camp, because you hate copyright and the concept of copyright applying to derivative works, remember also that a big part of the GPL's strength is based on derivative works, and by weakening derivative works, you weaken the GPL.

Re:

If that function is the only copying they can prove, then it's not a derivative work. There's zero creativity in that function - it's driven entirely be the exposed java.util.Array API, normal Java conventions and implementing the necesssary checks efficiently.

Exception types and message contents? Part of the API - visible just by *using* the API, not looking at its implementation.

"rangeCheck()" - no creativity. Literal description of the function's purpose, named according to Java conventions.

"fromIndex, toIndex" - taken from the corresponding argument names in the public Array.binarySearch() API

function structure - merely a logical way of minimising the number of checks needed:
- is the start index after the end index?
- is the start index negative?
- is the end index past the end of the array?

By doing the checks in this order, you don't have to check:
- is the end index negative? (if this is the case, one of the first two checks will already fail)
- is the start index past the end of the array? (if this is the case, either the first or last check will already fail)

Re: Re:

Ah, my mistake - that link is to the OpenJDK version of the Array.java file, so that's the likely origin of the "length" vs "arrayLen" argument name difference. Still, none of "length", "len", "arrayLen" and "arrayLength" can really be called creative when it comes to naming a parameter that is "the length of the array".

Re: Re:

Not GPL but open source in general

Being able to see the code legally (this is straight forward "reading" and not "reverse-engineer") is the strength of any open source license and is not limited to just GPL.

The main difference between GPL and other open source licenses is its "viral behavior". Any code in direct relation to GPL code must be also released under the GPL license. It increases the corpus of open source code available.

Being able to code against open source code while being free to release your code under other licences is what the LGPL is able. This is open source code anyone can use.

If an API (= the public face of a piece of code) can not be copyrighted, then there are no difference between GPL and LGPL and the specificity of GPL over other open source licenses (expanding the corpus of open code by "virality") disappear. An anyone can reuse this code and not contribute back.

Re:

The issue of literal copying (of a small, relatively nondescript function) is not about the literal copying itself. Rather, it's an indicator that a clean-room process may not have been followed, meaning the people that implemented Google's workalike did so with knowledge (or access) to Oracle's implementations. Not through some nefarious means - the source code is available. However, if they did that, then Oracle can make the argument that Google's software is a derivative work of Oracle's.

I don't think the example is enough for even that.

I'm pretty sure I couldn't convict a student of Academic Misconduct on that evidence.

The structure of the code is inevitable, given its function and the coincidence of the variable names is simply the consequence if the use of standard naming conventions.

Sigh

I swear that there should be a special Hell waiting for the judges that opened the door for software patents.

I see them sitting there, hearing the most stupid software patents lawsuits forever. And then having the case referred back from the Infernal Court Of Appeal and having to listen to the same case...again...FOR THE REST OF ETERNITY!

Oracle Sinking Deeper Into The Pit Of Its Own Greed

The traditional tactic of continually hiking customer support fees, on the assumption that it will cost less for their users to cough up the extra cash than to move to another platform, isn’t paying off for Oracle like it used to.

On top of which, Oracle just doesn’t get Open Source at all. Of the projects it inherited as part of its Sun acquisition, it looks like it has succeeded in destroying the community goodwill in just about all of them—with all the OpenOffice folks deserting to LibreOffice, the founding MySQL developers leaving to form competing projects, and reneging on the remaining parts of Sun’s original promise to open up Java. (OpenSolaris? What’s that?)

Re: Oracle Sinking Deeper Into The Pit Of Its Own Greed

I concur. And I'll add that as a 30-year Sun customer, with a long preference for their products among all the competing commercial vendors, I've concluded that I'm probably not going to buy anything from Oracle. Ever.

So not only has Oracle quite effectively destroyed goodwill toward itself among the open source community, it's also managed to alienate (at least) one of the most loyal customers it could possibly ever hope to have.

Re: Jurors are no programmers

Assuming they aren't just going with the "de minimis" argument and skipping this question entirely, I expect Google could put up an expert witness to argue that this snippet doesn't reach the necessary standard to support a copyright claim, since there's no creative expression.

Re: Re: Jurors are no programmers

Oops, that comment was from me.

Thinking about it further, it appears from some of the notes here and on Groklaw that Google have *conceded* that the details of that argument checking function were the result of a cleanroom breach, so they're clearly not planning to argue the independent development angle.

They may figure it isn't worth trying to persuade the jury of the "not even creative" aspect when there are so many simpler points they can use to prevail (such as the 9 lines out of 15 million aspect). Definite shades of SCO there.

Programming language is creating facts. It's a fact that Try Catch End Try is used in VB.net to catch errors, how can you claim that as your IP? Pretty much every other programming language allows a Try Catch, so even if you write your own programming language it'll still work the same way.

To allow the people who wrote say C++, C#, Visual Basic, etc (some of the most common coding languages today) to charge anyone who codes stuff in them, even after they paid a few hundred (or a few thousand) dollars for a compiler and programs to write the code would be insane, it would effectively be like the government passing a tax on say Bread, and then demanding everyone pay that bread tax on all bread they bought in the last 10 years. Do you really think people starting a program from scratch would chose to use languages if they had to pay?

Besides, the programming language is TOTALLY useless without computers and such being able to read it, and other people actually using it. Copyright/Patent/IP just doesn't work for a programming language because of that, because the more limited a language's use is the less valuable it is, and less likely others are to decide to learn it, since there's less job opportunities in it.

Copyright logic

They're not trying to copyright logic, they're claiming that Google's specific implementation of this logic is so similar to Oracle's that it must have been copied.

But as someone else implied, if "arrayLen", "fromIndex", and "toIndex" is the unique intellectual property of Oracle, every undergraduate CS and engineering student in the country needs to be expelled from college for flagrant plagarism. These are obvious names, good names because they're descriptive. If the originals were "pdqux536", "asdlfkj15" and "uklji191" and Google's were the same, Oracle might have an argument. But they weren't, so they don't.

Copyrighting API's is like claiming copyrights on the interface to attach a wheel to a car(i.e. the nuts and bolts) or claiming copyrights on the interface used to attach any electronic device to another (i.e. USB, audio connectors, etc).

If Oracle wins that means nobody will ever be able to produce "compatible" software with others if the guy doesn't like you.

Patient frauid

The us supreme Court recently ruled that methods patents are not valid. The Oracle patents all start with "A Method…" Further Java is simply a reprise of C and C++ with a little PERL and and XML thrown in.

Re: Patient frauid

The us supreme Court recently ruled that methods patents are not valid.

I'm sorry, how did I miss the celebration that this would have caused? You're not referring to Bilski, because that left the stupid method loophole open... are you referring to Mayo vs. Prometheus? Because if so, I reluctantly have to disagree, that was not a rejection of method patents per se, but the rejection of that specific implementation of a method patent, which they felt was already covered by the laws of Nature. Is there another ruling I should know about?

Google/Oracle IP Suit

OMG, I totally have an IP infringement claim on a "Hello World" program. Many many years ago when I was learning Java, I think the line went something like System.out.println("Hello World"). Come to think of it, I saw someone else have that same line of code in THEIR program. Time to lawyer up and sue them!