I would like to trigger a discussion on the choice of EPLv2 as
the license for EE4J "implementation" projects. The intent
here is to analyze the impact of EPL licensing on the projects
under the EE4J umbrella and the larger Java EE ecosystem in
light of current challenges and propose solution options.
ASSUMPTIONS:
1) There are/would be separate repositories for projects
involving Java EE specifications such as JAX-RS API (hereby
referred as "specification projects") and their
implementations such as Eclipse Jersey (hereby referred as
"implementation projects")
2) Like most standardization best practices, there would be
separate and independent governance framework (policies,
processes, methods) for specifications and implementations.
3) I assume that it would be possible to re-license code under
Apache License from the existing GPLv2+CE through the OCA
[REF2] which may not be possible otherwise [REF3].
4) Re-licensing to a less restrictive license (such as ASL)
would not have any negative impact on existing projects and
their downstream derivatives.
5) Projects (such as Eclipse Jetty) that do not need to modify
the EE4J implementation project source code are not addressed
here as they can be or are already addressed through
dual-licensing.
I understand that as of now, this assumed distinction between
specification and implementation projects may not be
universally applicable (looking at you JSON-P). Nevertheless,
I shall take that assumed distinction forward as I believe
that it would be necessary for the standardization of the
future enterprise Java platform (at least till the Eclipse
Foundation publishes their official governance framework
around EE4J and the new Java EE).
PROLOGUE:
I find it perfectly acceptable for the specification projects
to use the EPL license as I believe, it has all the necessary
clauses that would protect the brand, the interest of the
Eclipse Foundation and its members/associates. But I would
like to ask if EPL is the right license for the EE4J
implementation projects? Do we really need all the copyleft
clauses of EPL license in the implementation projects as well?
At first look, it seems very convenient that everything under
the EE4J umbrella should be consistently licensed under EPL
just like almost all other projects in the larger Eclipse
ecosystem. But some of the recent discussions here have forced
me to challenge this convenience.
PROBLEM:
The copyleft clauses of EPL can have downstream impact on
projects that uses a less restrictive license such as Apache
License (ASL) and are not currently using EPL. In my opinion,
this should be OK as long the downstream projects are using
the EE4J project binaries as-is. This is fine as far as the
API specifications go. But if the downstream projects need to
"tweak" the implementation projects (without changing the API)
to meet their specific requirements, there is currently no
provision to do so other than to re-license their own projects
under EPL. Dual-licensing does not seem a viable option in
case of EPL as I DO NOT think that dual-licensing grants one
the right to modify and re-license "initial contributions"
under a different license without the explicit consent of
"initial contributors". The option of forking implementation
projects is also ruled out, as I believe, the copyleft clauses
of EPL would be transitively applicable to the fork as well
(i.e. they need to be released under EPL). The choice of ASL
as Secondary license to EPL is also ruled out as EPLv2 does
not allow any other license other than GPLv2 (or later) in its
Secondary license clause. The only other other option is to
take a greenfield approach for implementing the entire
specification if someone wants even a slight variation to any
of the existing EE4J implementation projects.
One workaround to this problem could be to have the desired
modifications pushed to the respective upstream EE4J
implementation projects and then incorporate their binary
releases in the downstream ASL projects. For obvious reasons,
this does not seem practical as the upstream EE4J
implementation projects reserve the right to veto the changes
(say, on grounds that they are specific to a particular
scenario and do not have universal relevance).
PROPOSED SOLUTION:
I see this licensing issue as a potential recurring pattern
with wider impact rather than a one-off case and propose
couple of solution options that can address it:
SOLUTION OPTION A:
Re-license the EE4J implementation projects under ASL (The
specification projects can remain as-is under EPLv2). This
option would address the problem at the source(i.e. upstream
EE4J implementation projects) itself rather than mitigating it
at the individual points of impact(downstream ASL projects).
We may lose the copyleft clauses of EPL in the implementation
projects. But, are those copyleft clauses worth the challenges
we are facing and the convenience that we have to trade?
SOLUTION OPTION B:
Allow ASL as the Secondary license for EPLv2. I believe, this
is currently not possible under the terms of EPLv2 [REF4].
But, if allowed, then EITHER the EE4J implementation projects
OR the downstream project itself can be re-licensed with EPLv2
with ASL as secondary license (replacing the current GPLv2 as
there can be only one secondary license) without any further
downstream licensing impact. Any one of these either-or
scenario should suffice.
I believe, either options suggested above should be viable
subject to assumption (3) and OCA availability. Doing so would
facilitate and encourage the adoption of EE4J implementation
projects not only within the Eclipse ecosystem but outside as
well. It would be easier to work on acceptance and
interoperability of the implementation projects (and their
downstream derivatives) in communities which are otherwise
very strict on the usage of less restrictive licenses such as
ASL.
From a marketing perspective, I think it would be a very
effective way to evangelize the new Java EE even in
environments(such as cloud) which it does not natively
support.
ILLUSTRATION:
To further illustrate, if an ASL licensed Project X within the
EE4J umbrella or larger Eclipse ecosystem wants to use Eclipse
Jersey by modifying its code in order to make it suitable for
use in a cloud/micro-service runtime then they need not have
to re-implement the entire JAX-RS specification just to
incorporate their minor enhancements in order to remain
compliant with the entire JAX-RS specifications and still
release under ASL. Dual-licensing or forks are not an option
due to reasons stated earlier. However, If either Option A or
Option B is implemented then it should be trivial for the
downstream Project X to incorporate their specific needs as a
simple fork while still maintaining JAX-RS compliance and
without causing any downstream licensing impact.
EPILOGUE:
If the EE4J committee has already reflected upon the prospect
of using either of the proposed solution options for
implementation projects I would like to know why those options
were ruled out and if it would be possible to reconsider the
decision in the current scenario.
Quick References:
[REF1]
https://www.eclipse.org/legal/epl-2.0/faq.php
[REF2] Oracle's consolidated ownership of code as per
http://www.oracle.com/technetwork/oca-faq-405384.pdf
[REF3]
https://www.apache.org/licenses/GPL-compatibility.html