Skip to content

Commit

Permalink
[JENKINS-39161] - Add compatibility notes as a follow-up to jenkinsci#92
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg-nenashev committed Oct 22, 2016
1 parent f470b8e commit c087259
Showing 1 changed file with 60 additions and 0 deletions.
60 changes: 60 additions & 0 deletions docs/remoting-3-compatibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
Remoting 3 Compatibility Notes
=====

This page describes compatibility of the remoting 3 library.
It addresses binary compatibility and also functional compatibility with old remoting and Java versions.

## Establishing connection between Remoting 2.x and 3.x

Remoting 3 library still contains <code>JNLP1-connect</code>, <code>JNLP2-connect</code>
and <code>JNLP3-connect</code> [protocols](docs/protocols.md).
When any of these protocols is enabled on both sides,
remoting versions will be able to establish connection between each other.
This is a **default** behavior.

If <code>JNLP4-connect</code> is the only enabled protocol on one of the sides,
Remoting <code>2.x</code> and <code>3.x</code> versions will be unable to establish the connection between each other.
It may happen only in the case of the custom configuration via [system properties](docs/configuration.md).

## Java compatibility

In Remoting 3 the required Java version is updated from Java 6 to Java 7.

In **Jenkins** project:

* Nothing changes, starting from <code>1.610</code> Java 6 is not supported in Jenkins,
on both master and slaves/agents
* In particular cases it was possible to run Jenkins slaves/agents on Java 6 with Remoting <code>2.x</code>,
but this configuration was not officially supported

In other projects:

* For projects using Java 7 or 8, the upgrade is safe
* For projects using Java 6, Remoting <code>3.x</code> cannot be used there without upgrade to Java 7
* Remoting <code>2.x</code> stable version can be temporarily used instead

## Binary compatibility

Formally Remoting <code>3.x</code> is not binary compatible with Remoting <code>2.x</code>,
but the scope of changes is limited to a single change with a limited impact.

Protocol class hierarchy change:

* `JnlpProtocol` / `JnlpProtocol1` / `JnlpProtocol2` / `JnlpProtocol3` classes were removed.
Their functionality has been moved to the <code>JnlpProtocolHandler</code> class and its subclasses.
* <code>JnlpServerHandshake</code> class and all its subclasses have been removed from the library
* Several debendent internal classes have been removed or modified

The only **known** usage of the classes was in the Jenkins core,
the incompatibility is fixed in the [pull-request #2492](https://github.com/jenkinsci/jenkins/pull/2492).

Impact of the changes on **Jenkins** plugins:

* No impact if the plugins do not implement their own Remoting protocols
* There is no such plugins in **open-source** Jenkins plugins available in the main update center or hosted on GitHub
* There may be impact on other plugin implementation

Impact of the changes on other projects:

* Protocol implementations and protocol handling logic may require an update
* [Pull request #2492](https://github.com/jenkinsci/jenkins/pull/2492) can be used as a reference

0 comments on commit c087259

Please sign in to comment.