Android v Oracle

The latest news from today is that a jury has found that Android does not infringe on Oracle's copyrights. This is a huge win. Everyone I know put this in the "why is this even up for debate" category long ago. However, courts don't always side with logic and reason.

What is an API?

To fully understand why its so obvious that Android was in the right, it's important to know what an API is. An "application programming interface" is how software communicates with other software. Humans are flexible, machines are not.
Imagine going to google.com and seeing an all white page with only a blank text box and a button that said "submit" and no other markings. Since you know why you went to the page, you could figure out pretty quickly how things worked, even if you had never been to Google before.
On the other hand, computers make no assumptions. If you told the computer to input the text into the "search-box" field, but there was no labels on the fields, it would not know what to do.
So for computers to know how to handle situations, we use APIs. Since an API is explicitly defined, any software programmed to know it's syntax can use it. For websites, these often pertain to sending and receiving data. The API is essentially the door in and out of the software. Specifically, the API is the request and the response, and how the response is generated is unimportant.

Let's pretend you want to download a NASA picture every day. You could go to http://apod.nasa.gov/apod/ and download their Astronomy Picture of the Day. That's easy enough to do for a human, but software needs to read through all the HTML and find the image. There's a lot of extraneous information that is not very nicely formatted for computer parsing. Information is passed, so it is still an API, but ideally, we want a different format for more efficient parsing.
So we could go to https://api.nasa.gov/planetary/apod?api_key=NNKOjkoul8n1CH18TWA9gwngW1s1SmjESPjNoUFo which returns some computer readable data in json format:
{ "copyright": "Subaru\nTelescope (NAOJ)", "date": "2016-05-26", "explanation": "The prominent ridge of emission [...] in the high flying constellation Cygnus.", "hdurl": "http://apod.nasa.gov/apod/image/1605/PelicanIC5067close_colombari_q100_watermark.jpg", "media_type": "image", "service_version": "v1", "title": "IC 5067 in the Pelican Nebula", "url": "http://apod.nasa.gov/apod/image/1605/PelicanIC5067close_colombari_q100_watermark1024.jpg" }

You could do whatever you wanted with this. You might want to have your software take the "hdurl" portion and apply that as your background. You might just want to have it take the "title" and "explanation" and email it to you with a link.
The same information has been passed in 2 different ways, so different programs (your browser, or your custom software) can handle it. The response is standardized for the request.

How it relates to Java

As shown above, you can get different inputs and outputs to convey the exact same data. Different programming languages all have to do the same basic things. Every language needs to do math, but the syntax doesnt need to be the same. 1 + 1;, sum(1, 1) and (+ 1 1) all do the same thing depending on your programming language. The language will define a set way of doing things. This is an API. If you put 1 + 1 into clojure, you'll have issues, because the language is defined differently than java. The basic set of commands that a programming language understands natively is called the standard library.
Further still, how the language handles those things can vary. Java is a compiled language, which means the code is compiled down into binary. 1 + 1 might become 0111 0001 0001 (full disclosure, this is not the actual binary values or implementation they use, but simply a super high level explanation of compilation). When the java runtime receives 0111 it knows to always perform addition on the next 2 sets of numbers. This is also an API. This is something that could be documented 0111 aaaa bbbb => add aaaa bbbb.
Other programming languages might compile differently. Maybe another language does aaaa 1001 bbbb to indicate adding. If you ran this binary through the java runtime, you'd have an issue, as something will happen that is not 1+1.
Even further along, how the java runtime handles this might vary. There are plenty of ways to do addition. You could subtract 1 from a, and add 1 to b until a is 0, and then b is your answer. You could reduce b to 0 and have a be your answer. You might do bitwise addition and just know that 1+1=2. This part is NOT an API. This is about processing, and not input/output. How you get the answer is up to you, as long as I get the answer.

How it relates to the lawsuit

Oracle believes that the java standard library and syntax is copyrightable. No other programming language should be able to understand System.out.println("Hello World"); The issue is that java is the most popular programming language. http://www.tiobe.com/tiobe_index?page=index shows that by a large margin, which means if you want to encourage developers, but you don't like how java runs, you have issues.
Android apps are programmed in java syntax. It does not use the java runtime to run the code. Oracle is essentially mad that Android can understand apps written in java syntax.
This is not just a matter of a few similarities. Most programming languages have similarities. Android just reused the entire java language. They wanted to make sure that developers would be able to program for Android. Anyone who could write apps in the most popular language can now write apps for Android. That is a huge benefit to Android trying to expand their ecosystem, and for developers who want to join the ecosystem with minimal effort. Google has never denied that Android reuses the language syntax. They use their own backend to execute the code without reusing Oracle's backend.

Should the language be copyrightable? Should any language be copyrightable? Oracle is essentially a publishing company trying to claim a copyright on English. Their authors (devs) have grown accustom to writing books (apps) in English and don't want to switch to a new language. Android comes along looking for French books, but all authors write in English. So they say "Just write your books in English but make them be stories about France, and we'll convert them to French ourselves while we read them."
How dare Android use our English language to write French stories! The stories are original by the author, so Oracle can't claim copyright there. They can't claim the thought processing, as Android is handling that themselves there too. So instead what they are trying to do is claim copyright on a communication syntax.

Oracle wants to keep itself in the loop now that Android is big. At this point, Android programming can be altered. By slowly altering a language, it can become something new. Subtle syntax changes for convenience. "You can use the old syntax, or you can use the new shortcut version." This gradually weans developers off Java and onto something familiar, yet different. Oracle is claiming that any changes that Android makes are based on their original design, so they own the deriviative designs too ("We invented Latin, so we also own French, Italian and Spanish"). Doing so would discourage Android from moving away from java in the first place if the end goal was just to move away from Oracle. Whether or not Android would want to move away is speculative, but Oracle definitely wants to stay relevant to this multi-billion dollar industry.

The outcome

Android won. Which means business as usual. Nothing really exciting. The big deal is that Oracle lost. Had Oracle won, this would set terrible precedent for other companies to shut down their competition. Things that have become "industry standard" would become copyrights to be wielded.
Microsoft Excel uses a specific API. A cell =SUM(A1:A10) should become the value of the sum of cells A1 through A10. LibreOffice Calc understands that too and it has become an industry standard. If you make spreadsheet software, you can understand this cell. Using Microsoft's API makes sense because Microsoft has a practical monopoly on spreadsheet software. If LibreOffice was forced to have their sum cells be <- ADD(A1...A10) then any spreadsheets made in LibreOffice would not work in Excel. Which means that no one would use LibreOffice. Compatibility by reusing APIs is utmost importance to LibreOffice's survival.

An API is just an interface, the implementation is up to the software developer. If Android had stolen source code from Oracle and presented it as its own, we'd have a problem. Instead, we have a case where Android has implemented java for mobile better than Oracle could, and they are upset that they aren't getting paid.