If you’ve followed the recent (fake) news, you’ve probably already heard it. Oracle is “massively ramping up audits of Java customers it claims are in breach of its licenses”
After a quick check on the source (The Register), here’s a more realistic, probably more accurate version of that headline:
Oracle is thinking about auditing 1-2 companies that massively ran the commercial Java extensions in production without paying
There, fixed. Also:
Tim Bray ✔ @timbray
Oracle trying to monetize Java... Golang/Rust/Elixir all looking better. Assume all JVM langs are potential targets.http://www.theregister.co.uk/2016/12/16/oracle_targets_java_users_non_compliance?mt=1481991081793 …
But There Is a Deeper Problem to This Discussion
Of course, all sorts of (ex) Red Hat and or Pivotal employees quickly jumped to the conclusion of the kind: Hey this wouldn’t happen with us – the good guys – the OSS guys.
Follow Aleksey Shipilëv @shipilev
@myfear If you are not ready to defend, then use products with unambiguous licenses, like OSS ;)
That’s not surprising, of course. What’s also not surprising is that people who are already strongly opinionated will see their opinions reinforced. Another random example:
Follow Nathan Osman @nathanosman_dev
Time for my annual reminder of why I don't like Oracle. http://www.theregister.co.uk/2016/12/16/oracle_targets_java_users_non_compliance/ …
Oracle finally targets Java non-payers – six years after plucking Sun
Thought Java was 'free'? Think again (and you owe us $$$ in 2017)theregister.co.uk
If you want more examples, just search Twitter for the article URL. There are tons of reactions.
The latter case is not very interesting. The former, however, is. Aleksey Shipilëv obviously has a good point.
use products with unambiguous licenses, like OSS
… and, of course, he’s not right at all. There are some very ambiguous licenses in the OSS field, including many copyleft licenses. Take, for instance, LGPL 2.1, which is a very long license, and contains ridiculous things like:
If such an object file uses only numerical parameters, data structure layouts, and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
(Emphasis mine). Ten lines of code. What’s a line? Everything between two
\n characters? On Windows, does a line have to end in
\r\n for this clause to be applicable? What if I remove formatting and have 10,000 character lines? Such functions aren’t small, but certainly less than 10 lines. Right? RIGHT?
Not to mention that this single ambiguity (there are more) infects the entire rest of the license text, because it introduces unrestricted use in a rather restrictive library. Think that’s nuts? Go check Hibernate’s license. Most of it (and thus YOUR application, if you patched Hibernate) is affected.
Licensing = Restricting
At the end of the day, pretty much every license will restrict rights in some way (except for the public domain “license”). The problem with commercial licenses, however, is that they’re very unique, whereas OSS licenses are usually always the same (mostly some [X]GPL or ASL, MIT, BSD). In other words, OSS licenses are standardised and thus: pretty well understood. And thus: Much less risky.
That’s not the case with commercial licenses. Take the jOOQ license for instance. As of the end of 2016, it’s 23 pages strong (including the annex containing pricing). What does the license mean to our customers? Here’s a TL;DR version (obviously, if in doubt: the actual license will apply, not this TL;DR version):
- Developer workstations need a timely limited or perpetual license.
- All server workstations are licensed for free, perpetually.
- Object code may be distributed and sublicensed.
- Source code may be used (e.g. for maintenance), but not distributed.
And, of course, there are different price plans, but those aren’t really part of the license. So, jOOQ feels like Open Source: source code is shipped, may be used for documentation purpose, may be patched, recompiled, but not distributed, i.e. it isn’t free as in freedom (of course not, it would be the end of our business).
But what does it mean that the source code may be used? The license explicitly allows “modification”, but what does that mean? Are you also allowed to document such modification, just not ship it? E.g. in a public GitHub issue? Such that other users who are affected may profit from your fix?
If in doubt, the best way forward is to ask the vendor. In our case, we’re very open minded and quick to answer – and also quick to improve the license when it is not clear.
In Oracle’s case, a bit less. Of course, because Oracle is a huge company, and who are you even going to ask? Who will take the time to answer an individual question? It’s simply not possible.
The Solution: Standardized Commercial Licenses
There aren’t too many business models with software. First off, there are a few different categories of software, e.g.:
- SaaS: This is still the wild west. But essentially, you don’t license the software, you rent an access point.
- Servers: Databases, programming environments, operating systems, they all fall into this category. These are systems that run your software (and/or data).
- Libraries: Things like jOOQ, Hibernate. These are programs that are embedded in other programs (e.g. SaaS or Servers)
- Tools: Things like IntelliJ, JRebel. These are programs to create and manipulate data, but they aren’t needed to run it. They can be easily removed.
Each category works entirely differently. For instance, copyleft doesn’t really affect SaaS and tools categories (unless you want to protect your trade secrets, of course), whereas it’s a killer for libraries.
SaaS, libraries, and tools are usually per seat licenses, whereas servers are usually per core licenses – i.e. whatever scales better for both the vendor and customer.
This is an extremely simplified overview of commercial licensing, but imagine: What if all vendors in each one of the above categories could just pick a couple of yes/no answers to a standardised set of questions (e.g. what may be distributed? what may be modified? what may be run?), and they could pick only well understood standard wording of these concepts, then everything would be much clearer.
Back to the Original Oracle Auditing Story
In the linked article, Oracle allegedly starts auditing Java users. Because the OracleJDK obviously isn’t “free” (as in freedom), but partially, it is “free” (as in beer) because there are a variety of use-cases where you don’t pay. However, there are some features that are “commercial” (i.e. non-free-as-in-beer), such as JMC and the Flight Recorder.
The interesting thing is that both of these features (and some others) ship with the “free” (as in beer) OracleJDK, but they’re part of the “COMMERCIAL FEATURES” (legal yelling) and those features must even be documented in YOUR LICENSE using this notice, such that YOUR end users may also not use them for free:
Use of the Commercial Features for any commercial or production purpose requires a separate license from Oracle. “Commercial Features” means those features identified Table 1-1 (Commercial Features In Java SE Product Editions) of the Java SE documentation accessible at http://www.oracle.com/technetwork/java/javase/documentation/index.html
(Did you know that? If you’re using OracleJDK in your application, you have to embed the above in your own EULA).
But do note, outside of these cryptic licenses, I’ve found several references to
Java Mission Control is available free of charge for development
For example, here.
Of course, this has absolutely no legal value. It might have been true at some time, but it's now outdated. But that’s how I remember it. I can use Java Mission Control for free for development (not for productive use). Now, we’re back to this discussion. What’s productive use?
- Can I profile a simple test program for free? Probably yes.
- Can I profile my entire program (e.g. jOOQ) for free? Probably yes.
- Can I run the profile in a CI environment to detect regressions for free? Hmmm.
And how is that understanding of “free” encoded in the actual license?
Oracle has a long tradition of giving away software for free-as-in-beer to developers. Back in the days (before OSS, when there was only Oracle and IBM), that was a cunning move, because the money is not in development. It’s in operations. So, if developers get top notch software for free, they become evangelists. They’ll love the products, and convince the end users.
But again. Who are developers? When do they stop developing and start operating? When they test? When they ship?
We’ll never know for sure — as every vendor writes their own, unique license.
What we need is a standardized set of well-understood commercial licenses, just like the OSS folks have their standardized set of well understood OSS licenses. For our industry as a whole, this would be of immense value, because the little fish (like ourselves), we could compete much better with the big ones without having to give away all of our IP for free under the terms of an OSS license. Our customers would no longer run into any legal issues. All risks from weird license texts would be removed.