From APIDesign

Revision as of 03:47, 4 August 2021 by JaroslavTulach (Talk | contribs)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search

Wikipedia describes various types and examples of so called direct action. This article talks about a legal struggle of the ApacheNetBeans project to get an approval to distribute GPLwithClassPathException licensed component and the DirectAction used to resolve it.



The basic problem is the animosity between the Apache Foundation and the Free Software Foundation. While the first builds software as on bazaar, the latter wants to build cathedrals. Each foundation has its own license and members of the Apache foundation start to see red whenever they find these three letters anywhere: GPL. That's not surprising - the virality of GPL (described in WhyGPL essay) completely contradicts the Apache bazaar-like aproach to software development.

GPLwithClassPathException isn't GPL

However GPLwithClassPathException isn't as viral as GPL. The Classpath Exception allows redistribution of such binaries under any (including Apache) license. The problem is to get Apache legal to agree to it! Because as soon as the true Apachers see the three GPL letters, they block and stop reading. As it is very hard to spell GPLwithClassPathException without spelling GPL prefix, it is really hard to convince a true Apacher to read GPLwithClassPathException fully!

Moreover while GPLwithClassPathException is quite common among Java projects, the roots of Apache foundation are in its HTTP server written in C. Classpath has no meaning in the C language. People with mostly C skills are going to recognize GPL in GPLwithClassPathException rather than the exception!

Regardless of that things moved forward with LEGAL-563.

DirectAction: Organize a Vote!

The continuous pressure in LEGAL-563 and elsewhere opened a possibility to take an action. Once it was concluded that was accepted ... that ... GPLwithClassPathException binaries could be included in Apache convenience binaries...

the major legal hurdle was solved. Reaching here took years, but the legal conclusion that Apache license and GPLwithClassPathException can be combined together really worth it. Now we just had to implement the decision in ApacheNetBeans complementary binaries. Luckily the Apache legal team also transferred the responsibility...

...PMC should be fully capable of reading and understanding ... the issue seems to be resolved here and ... PMC will be following up separately...

...into the hands of Project Management Committee. Such setup just called for a DirectAction!

Apache foundation project management comittees have only one decision process: a vote. As such a vote had to be organized! I am thankful that the community decided in April 2021 that nb-javac is trusted to be GPLwithClassPathException licensed with 4:2 majority.

Requirement vs. Suggestion

Of course, the vote was not an unisimo vote. Some even tried to call the vote illegal and threaten the remaining voters. True, it wasn't easy to find the four +1 votes. Do you know a programmer who'd vote about legal issues rather than do a bit of coding? Most of us wants to stay away from the legal stuff. However three brave members of the ApacheNetBeans Project Management Committee cast their votes (thank you guys!) I added mine (while asking my OracleLabs co-workers to abstain to not pervert the vote) and that was it.

It wasn't surprising there were votes against. At the end certain legal suggestions like

... clear statement in LICENSE.txt that nb-javac is ... GPLwithClassPathException in its entirety ...

were not fully implemented. However that is where the difference between requirement and suggestion comes into play in my opinion! Requirement has to be fulfilled, suggestions are just nice to have requests that don't have to be followed to the last letter. Understanding the difference between formal aspects and the spirit of the law is a necessity for organizing non-violent DirectActions!

ApacheNetBeans PMC had full right to decide to trust the Oracle deeds regardless of nice to have formal suggestions not being implemented. The project could have spend years spinning around the formal aspects without moving forward. Stepping out from that vicious circle, taking DirectAction and calling for the vote unlocked the situation and allowed the ApacheNetBeans project to move forward and bundle GPLwithClassPathException licensed component.

Don't Seek for Permission

It is always easier to ask for a blessing than seek for a permission and this nb-javac case confirms it. Organizing the DirectAction vote wasn't 100% guaranteed to succeed, but it was the most effective way to move forward. At the end the legal team confirmed my expectations:

...comment added to the README that is sufficient for our purposes. It does not have to be present in the released binary.

Of course, at the end it is all a matter of trust...

It's a sliding scale. Somewhere between a notarized grant signed by Ellison and someone whispering it to you in a bathroom, there exists a line between sufficient or not; we have no idea where that line may be until someone sues over it. It's okay when the PMC says it is okay, until it isn't, and we'll deal with that if someone from Oracle ever objects.

...and it is OK until it is not OK!


Thanks to the direct action - e.g. organizing the project management committee vote without a common consent - we could successfully present an alternative which wasn't reachable by appealing the authorities and negotiating with other peers in the project. Once the PMC made its decision, it was easy for legal to agree to such decision. Project peers seem happy with the final outcome as well.

As of 2021 it is possible for Apache projects to distribute GPLwithClassPathException components in their complementary binaries!

Personal tools