Re: UUCP, etc., and SMTP/822/MIME mail (was: Re: I-D ACTION:draft-hoffman-utf8headers-00.txt)

John C Klensin <[email protected]> Fri, 02 Jan 2004 11:47:36 -0500
Newsgroups gmane.ietf.imaa
Message-ID <[email protected]>
--On Thursday, 01 January, 2004 23:58 -0500 Keith Moore 
<[email protected]> wrote:

>> We are, I think, in complete agreement: we couldn't have
>> rationally  done anything else than what we did, and the text
>> you cite explains  exactly why we made that decision.  I was
>> only suggesting that, faced  with similar decisions, but a
>> new context, today, we are not, and  should not be, obligated
>> to replicate the decision of what is now  thirteen or
>> fourteen years ago.
>
> Of course not, but nobody has really suggested that we do so.
> At the same time there are some things about email that were
> true then that remain true now - one of which is that
> different pieces of the message header are generated at
> different places by different agents, which won't all use the
> same native character encoding and won't all get upgraded to
> utf-8 at the same time.

Of course not.

Keith, might I respectively suggest that you stop firing off 
responses and, instead, try reading the notes to which you are 
responding carefully enough to understand what they really say 
before reacting to them.

I'm certainly not naive enough to believe in "all get upgraded 
to UTF-8 at the same time" and didn't suggest that.  It is 
obvious to me that we will be living with (and _should_ be 
living with) 2047 formats for some time, probably indefinitely. 
I am suggesting only that:

	(1) Anything that puts in an 8-bit header field must do
	so using UTF-8, so that it is not necessary to tag those
	header fields as to which "charset" they represent.  In
	other words, the question isn't whether everyone
	upgrades to UTF-8 at once, only whether people are
	encouraged to upgrade to other things on the way to
	UTF-8.
	
	(2) MTAs wanting to send UTF-8 headers be required to
	negotiate that capability, using ESMTP options, with
	recepients.  This eliminates what would otherwise be a
	requirement for message-body-scanning and heuristics
	about whether "binary" headers are present.  If properly
	defined, it should also eliminate having to wonder
	whether some header containing 8-bit information is
	really UTF-8 and not some random, non-conforming,
	nonsense.
	
	(3) If the "UTF-8 header" capability cannot be
	negotiated, the MTA wishing to send that information be
	required to either bounce or encapsulate the message.

What I am arguing against is getting involved with any more 
tagging at this stage, e.g., the sort of "put any charset you 
like there, just identify it" logic that 2047 uses (and for 
which I argued very strongly at the time, as did almost everyone 
else).  If binary stuff goes in, let's restrict it to UTF-8. 
As Ned pointed out, that decision was controversial when we made 
it.  I was on the negative side, for several reasons, and still 
think I was right.  But, at this point, incompatibility and 
optionality, IMO, would be a worse choice for the Internet than 
permitting UTF-8 and some other binary option, even if the 
latter were objectively better.

Note that (3) is approximately what we have today for 8BITMIME; 
it is not a new strategy or one that has been generally 
rejected.  Indeed, it seems to have worked fairly well as a 
transition strategy.  And, personally, I prefer (for the reasons 
described in my previous note) an encapsulate strategy for 
downgrades to a fancy-coding one.  One can argue for fancy 
encoding instead, but more fancy encodings feels like more 
options and complexity to me, and I think we are going to need 
an encapsulation option anyway.

Also note that we shouldn't go overboard about "different pieces 
of the message header are generated at different places by 
different agents".  The reality, you will recall, is that 
"headers" are generated or altered only under the following 
circumstances:

	(1) All base and optional headers by the generating MUA
	
	(2) A Received header and some fix-up and substitution
	headers by the initial submission MTA.
	
	(3) Received headers (_only_) by relay MTAs
	
	(4) Received headers and a Return-path, plus
	non-conforming and extension headers to accommodate
	communication with the message store or receiving MUA,
	by the delivery MTA.
	
	(5) Any header rewritten by an actual gateway to bring
	it into conformance with the spec.

Anything else is a protocol violation and, while we can (and 
should) sensibly talk about damage control in the context of 
existing practices, we shouldn't do crazy and permanent things 
in order to make (hopefully-temporary) non-conforming behavior 
work better.

    john