Re: Environment Option

"David A. Borman" <dab@berserkly.cray.com> Wed, 21 July 1993 23:26 UTC

Received: from ietf.nri.reston.va.us by IETF.CNRI.Reston.VA.US id aa13445; 21 Jul 93 19:26 EDT
Received: from CNRI.RESTON.VA.US by IETF.CNRI.Reston.VA.US id aa13441; 21 Jul 93 19:26 EDT
Received: from timbuk.cray.com by CNRI.Reston.VA.US id aa28849; 21 Jul 93 19:26 EDT
Received: from hemlock.cray.com by cray.com (4.1/CRI-MX 2.19) id AA08176; Wed, 21 Jul 93 18:27:00 CDT
Received: by hemlock.cray.com id AA15075; 4.1/CRI-5.6; Wed, 21 Jul 93 18:26:53 CDT
Received: from cray.com (timbuk.cray.com) by hemlock.cray.com id AA15066; 4.1/CRI-5.6; Wed, 21 Jul 93 18:26:50 CDT
Received: from frenzy.cray.com by cray.com (4.1/CRI-MX 2.19) id AA08161; Wed, 21 Jul 93 18:26:47 CDT
Received: by frenzy.cray.com id AA02865; 4.1/CRI-5.6; Wed, 21 Jul 93 18:27:38 CDT
Date: Wed, 21 Jul 1993 18:27:38 -0500
Sender: ietf-archive-request@IETF.CNRI.Reston.VA.US
From: "David A. Borman" <dab@berserkly.cray.com>
Message-Id: <9307212327.AA02865@frenzy.cray.com>
To: telnet-ietf@cray.com
Subject: Re: Environment Option

This message is in two parts.  The first part is a report in much
more detail of what happened at the Telnet WG meeting in Amsterdam,
with regards to the Environment option.  It also spells out clearly
what decisions were made at that meeting, and what future actions
were agreed on.  The last part contains my own comments.

In short:
	In Amsterdam, the Telnet WG voted 7 to 3 to reissue
	the Environment option with a new option number.  These
	results are to be posted to the mailing list, and if
	there are no serious new objections to that decision,
	that will be the decision of the WG

And now for the details...

Background
----------
The issue at hand is that the BSD based implementation of the
Environment option has the value for VAR and VALUE swapped from
what RFC-1408 says.  We all know this.  When this was discovered,
it was proposed that RFC-1408 be re-issued with definitions for
VAR and VALUE that match the BSD implementation.  HP objected to
making the change, since they are already shipping products based
on the RFC-1408 definitions.  The WG decided to re-issue the
RFC, changing VAR and VALUE to match the BSD implementation.

At the same time, I wrote up some heuristics that can be used
to detect whether or not the other side of a telnet connection
has the same or reversed definitions for VAR and VALUE.  It was
proposed that implementations use these to aid in interoperability.

HP continued to object, and raised the issue with the IESG. The
upshot of the IESG response was that they refused to either uphold
or overturn the WG decision to reissue RFC-1408.  Instead, they
said that the WG would have to revisit the decision to reissue
RFC-1408 and decide whether or not the heuristics were a good long
term solution, and then whatever the WG decided, the IESG would
back the Working Group decision.

The IESG did iterate that the Environment option is just at the
Proposed level, and when vendors implement Proposed specifications
into products, they are assuming the risk that they may very well
have to change their implementation, since Proposed standards can
change.  Installed base may be a good argument for not changing a
Draft or full Standard, but it is not a good argument for not
changing a Proposed Standard.  In part this is why the IESG pushed
the decision back to the WG.

So, in Amsterdam those in attendance at the Telnet WG meeting
went over the whole issue again.

The Discussion as Amsterdam
---------------------------
It was agreed that there is no technical reason for picking one
definition over the other, both will work just fine.  If there was
a technical reason, the answer would be easy.  Everyone agreed that
the only reason for considering changing the definitions and doing
the heuristics was to allow new implementations to be interoperable
with existing implementations, and all the future discussion was
held with this in mind.

The working group thus had two issues to discuss.  First, should the
values for VAR and VALUE be changed, and second, should the heuristics
be published as an interoperability solution, which would be in use
forever.  The group decided to attack the second question first,
hoping that it would lead to the answer to the first question.

Problems with the Heuristics
----------------------------
The problem with the heuristics is that there are situations
where they are not deterministic, and you cannot guarantee that
you know what definitions are in use on the other side.  Most
of the group agreed that it would be good to be able to get to
a point in the future when using the Environment option could be
done in a deterministic manner.

Leaving the definitions for VAR/VALUE alone, or reversing them
would not achieve this.  The only way to do this is to get new
definitions that are not ambiguous.

Proposal for new VAR/VALUE definitions
--------------------------------------
The first proposed solution was to define entirely new values
for VAR and VALUE.  If you got either 0/1 or 1/0, it would mean
that you had an old host, and you would do the best you could
using the heuristics.  If you got the new VAR/VALUE values,
then you would know exactly what to do.

The problem with this is trying to decide whether or not to
send the new VAR/VALUE values, since old hosts would really
be confused if they got these new values, even more than if
they had just gotten reversed definitions for VAR and VALUE.
(There is more detail that was discussed, and I'll type it
 up if there is a request for it...)

Counter proposal to have a new Telnet Option Number
---------------------------------------------------
A counter proposal was that rather than define new values for
VAR and VALUE within the existing Environment option, that instead
a new Telnet Option number would be assigned to the Environment
option, and the old option number would be deprecated.

The advantage of this is that for the cost of sending both "IAC DO
NEW-ENVIRON" and "IAC DO OLD-ENVIRON" at connection establishment,
implementations that implement the new option number would be positively
identified, and no heuristics would be needed when talking to those
implementations.

If the NEW-ENVIRON was not recognized, but OLD-ENVIRON was, then
things would be exactly as they are today.  Either you just use
what ever definitions you have used in the past for VAR and VALUE,
or you use the heuristics to try and interoperate with a reversed
implementation.

In the long run, we get a deterministic solution, and the need
for the heuristics slowly dies out.

Leave things as they are
------------------------
The HP representatives re-iterated their proposal to just leave
things as they were.  Marjo has sent a message to the mailing list
with HPs wording of why they want things left as they are.

A Vote was taken
----------------
A vote was taken among those present.  The choices were
the two proposals:
	1) Assign a new option number
	2) Leave things as they are

The vote was 7 for changing the option number, and 3 for leaving
things as they were.  Since those in attendance did not represent
the entire WG, it was decided that a final decision could not be
made at the WG meeting.  Instead, these results would be posted
to the mailing list, and unless there was serious objection on the
mailing list to going with the proposal to assign a new option number
to the Environment option, that would be the final outcome.


##############################################
## Here ends my summary of what happened at ##
## the WG meeting. The rest of this message ##
## is my personal views on a few points.    ##
##############################################


o The new RFC should have the same definitions for VAR and
  VALUE as RFC-1408.  This will place more of the burden of
  change on implementations that don't match RFC-1408.

o To update an RFC-1408 implementation will require:

	1) Send IAC DO/WILL NEW-ENVIRON in addition
	   to the existing IAC DO/WILL OLD-ENVIRON.
	2) Have a global variable, say "env_opt",
	   initialized to OLD-ENVIRON.
	3) If a DO/WILL NEW-ENVIRON is received,
	   set "env_opt" to NEW-ENVIRON.
	4) Add a case statement for NEW-ENVIRON next
	   to OLD-ENVIRON when parsing suboptions.
	5) Use the global variable "env_opt" for the option
	   number when generating a Environ suboption, rather
	   than using a static definition.

o Implementations with reversed VAR/VALUE definitions will need
  a little bit more code.

o Heuristic checking need only be done if only the OLD-ENVIRON
  is recognized, and if the implementor wants to interoperate
  with implementations that have reversed VAR/VALUE definitions.

o Marjo's list of Cons for leaving RFC1408 alone is not complete.
  It misses one of the main disadvantages of just leaving things
  as they are: Interoperability both now and in the future with
  both existing and new implementations.

  He ignores the fact the the existing, uninteroperable implementations
  will be around for a long time, and that by doing nothing
  means that this interoperability issue will be around as a
  support issue for vendors for a very long time, with no hope
  of ever getting out from underneath of it.

  As a telnet implementor, my goals for interoperability are,
  in decreasing importance:
	1) New implementations
	2) Old implementations with the same VAR/VALUE definitions
	3) Old implementations with reversed VAR/VALUE definitions

  This means that if things are left as they are, implementations
  that have had reversed definitions from RFC-1408 will continue
  to use those definitions as their default values, for the cases
  when the heuristics fail to determine what type of implementation
  is on the other side.  There will be no obvious convergence in
  implementations for the default definitions of VAR and VALUE, and
  there will be this gray area of interoperability forever.

  This means that leaving things as is is not a technically clean
  solution except for those who wish to have implementations that
  only interoperate with implementations that have RFC-1408
  implementations.  And even then those implementations will have
  trouble if an implementation with reversed definitions talks
  to them...

o The argument that voting to leave RFC-1408 alone is an endorsement
  for the IETF process completely ignores that fact that the whole
  point of the standards process is to allow people to have interoperable
  implementations of a common protocol.  The only reason we are even
  having this discussion is to 1) allow future implementation to have
  as widespread interoperability with existing implementations as possible,
  and 2) the desire that in the long run implementations should be
  able to have deterministic and reliable behavior.

o Bottom line, in my mind:

  Assigning a new Environment option number means recognizing that
  we are in an very messy situation with regards the interoperability
  of the Environment option.  It also means that future implementations
  need not be forever tainted due to problems with existing implementations.
  
			-David Borman, dab@cray.com