'. '

DirectAction

From APIDesign

(Difference between revisions)
Jump to: navigation, search
(Summary)
Current revision (03:47, 4 August 2021) (edit) (undo)
 
(24 intermediate revisions not shown.)
Line 7: Line 7:
=== [[GPLwithClassPathException]] isn't [[GPL]] ===
=== [[GPLwithClassPathException]] isn't [[GPL]] ===
-
However [[GPLwithClassPathException]] isn't as viral as [[GPL]]. The [[GPLwithClassPathException|Classpath Exception]] allows redistribution of such binaries under any (including [[Apache]]) license. The problem is to get [[Apache]] legal to agree to it! Because once the true [[Apache]]rs see 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 [[Apache]]r to read [[GPLwithClassPathException]] fully!
+
However [[GPLwithClassPathException]] isn't as viral as [[GPL]]. The [[GPLwithClassPathException|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 [[Apache]]rs 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 [[Apache]]r to read [[GPLwithClassPathException]] fully!
-
Moreover while [[GPLwithClassPathException]] is quite common among [[Java]] projects, the roots of [[Apache]] foundation is 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''!
+
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 [[GPLwithClassPathException|exception]]!
-
Finally, with [https://issues.apache.org/jira/browse/LEGAL-563 LEGAL-563] things moved forward.
+
Regardless of that things moved forward with [https://issues.apache.org/jira/browse/LEGAL-563 LEGAL-563].
=== [[DirectAction]]: Organize a Vote! ===
=== [[DirectAction]]: Organize a Vote! ===
-
The continuous pressure in [https://issues.apache.org/jira/browse/LEGAL-563 LEGAL-563] and elsewhere opened a possibility to take an action.
+
The continuous pressure in [https://issues.apache.org/jira/browse/LEGAL-563 LEGAL-563] and elsewhere opened a possibility to take an action. Once it was concluded that
<blockquote>
<blockquote>
Line 21: Line 21:
</blockquote>
</blockquote>
-
That's from my perspective the major achievement that unlocked the rest. Reaching there took years, but the legal conclusion that [[Apache]] license and [[GPLwithClassPathException]] can be combined together really worth it.
+
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...
<blockquote>
<blockquote>
-
''...PMC should be fully capable of reading and understanding ...'' and
+
''...PMC should be fully capable of reading and understanding ... the issue seems to be resolved here and ... PMC will be following up separately...''
-
''...The crux of the issue seems to be resolved here and it seems that PMC will be following up separately...''
+
</blockquote>
</blockquote>
-
Hearing from legal that the decision is fully in hands of ''Project Management Committee'' just called for a [[DirectAction]]. As ''PMC'' has only one decision process, a vote had to be organized! I am thankful that the [https://lists.apache.org/thread.html/r1ddbb8f62ffb02a50db688c958dcd52e1dd3652974550bad9c24e95d%40%3Cdev.netbeans.apache.org%3E community decided in April 2021] that nb-[[javac]] is trusted to be [[GPLwithClassPathException]] licensed with '''4:2''' majority.
+
...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 [https://lists.apache.org/thread.html/r1ddbb8f62ffb02a50db688c958dcd52e1dd3652974550bad9c24e95d%40%3Cdev.netbeans.apache.org%3E community decided in April 2021] that nb-[[javac]] is trusted to be [[GPLwithClassPathException]] licensed with '''4:2''' majority.
=== Requirement vs. Suggestion ===
=== Requirement vs. Suggestion ===
-
Of course, [https://lists.apache.org/thread.html/r1ddbb8f62ffb02a50db688c958dcd52e1dd3652974550bad9c24e95d%40%3Cdev.netbeans.apache.org%3E the vote] was not an unisimo vote. Some even tried to call the vote illegal and threaten the 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.
+
Of course, [https://lists.apache.org/thread.html/r1ddbb8f62ffb02a50db688c958dcd52e1dd3652974550bad9c24e95d%40%3Cdev.netbeans.apache.org%3E 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
It wasn't surprising there were votes against. At the end certain legal suggestions like
Line 42: Line 43:
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, ''suggestion''s 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 [[DirectAction]]s!
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, ''suggestion''s 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 [[DirectAction]]s!
-
[[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.
+
[[ApacheNetBeans]] PMC had full right to decide to trust the [https://github.com/oracle/nb-javac/blob/fdfb7bd4843cb9e023e14b9c9f11ef838315d480/make/langtools/netbeans/nb-javac/pom-nb-javac.xml#L18 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]] [https://search.maven.org/artifact/com.dukescript.nbjavac/nb-javac/15.0.0.2/jar licensed component].
=== Don't Seek for Permission ===
=== Don't Seek for Permission ===
Line 62: Line 63:
== Summary ==
== Summary ==
-
Thanks to the [[wikipedia:Direct_action|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. Once the ''PMC'' made it decision, it was easy for legal to agree to such decision as well.
+
Thanks to the [[wikipedia:Direct_action|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.
-
It is possible for [[Apache]] projects to distribute [[GPLwithClassPathException]] components in their complementary binaries since 2021!
+
As of 2021 it is possible for [[Apache]] projects to distribute [[GPLwithClassPathException]] components in their complementary binaries!

Current revision

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.

Contents

Animosity

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

...it 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!

Summary

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
buy