<?xml version="1.0" encoding="UTF-8"?>


<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>


<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

  <!ENTITY rfc2119 PUBLIC '' 
  'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'> 


]>

  <?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
  <?rfc toc="yes" ?>
  <?rfc symrefs="yes" ?>
  <?rfc sortrefs="yes"?>
  <?rfc iprnotified="no" ?>
  <?rfc strict="yes" ?>
  <?rfc compact="yes" ?>
  <?rfc subcompact="no"?>
  <?rfc comments="yes"?>
  <?rfc inline="yes"?>


<rfc category="std" ipr="trust200902"
     docName="draft-freytag-troublesome-characters-00">

  <front>

    <title abbrev="Worrisome Characters">
      Those Troublesome Characters: A Registry of Unicode Code Points Needing Special Consieration When Used in Network Identifiers
    </title>

    <author initials="A." surname="Freytag" fullname="Asmus Freytag">
      <organization>ASMUS, Inc.</organization>
      <address>
        <email>asmus@unicode.org</email>
      </address>
    </author>

    <author initials="J." surname="Klensin" fullname="John C Klensin">
      <organization />
      <address>
        <postal>
          <street>1770 Massachusetts Ave, Ste 322</street>
          <city>Cambridge</city>
          <region>MA</region>
          <code>02140</code>
          <country>U.S.A.</country>
        </postal>
        <email>john-ietf@jck.com</email>
      </address>
    </author>
    
    <author initials="A." surname="Sullivan" fullname="Andrew Sullivan">
      <organization>Dyn, Inc.</organization>
      <address>
        <postal>
          <street>150 Dow St</street>
          <city>Manchester</city>
          <region>NH</region>
          <code>03101</code>
          <country>U.S.A.</country>
        </postal>
        <email>asullivan@dyn.com</email>
      </address>
    </author>

    <date />

    <workgroup>IETF</workgroup>

    <abstract>
      <t>
        Unicode's design goal is to be the universal character set for
        all applications.  The goal entails the inclusion of very
        large numbers of characters.  The sheer size of the repertoire
        increases the possibility of accidental or intentional use of
        characters that can cause confusion among users, particularly
        where linguistic context is ambiguous, unavailable, or
        impossible to determine.  A registry of code points that can
        be sometimes especially problematic may be useful to guide
        system administrators in setting parameters for allowable code
        points in an identifier system, and to aid applications in
        creating security aids for users.
      </t>
    </abstract>

  </front>

  <middle>
    <section title="Unicode code points and identifiers"
             anchor="sec_unicode_ids">
      <t>Unicode <cref source="ajs">reference goes here; references
      mostly careless in this draft</cref> is a coded character set
      that aims to support every writing system.  Writing systems
      evolve over time, and are sometimes influenced by one another.
      As a result, Unicode encodes many characters that, to a reader,
      appear to be the same thing; but that are encoded differently
      from one another.  This sort of difference is usually not
      important in written texts, because competent readers and
      writers of a language are able to compensate for the selection
      of the "wrong" character when reading or writing.</t>
      <t>Identifiers that are used in a network or, especially, an
      Internet context present three special problems because of the
      above feature of Unicode:</t>

      <t> <list style="numbers">
        <t>In many (perhaps most) uses of identifiers, it is either
        practically difficult or impossible to ascertain the correct
        language context in which the identifier is being used.  In
        the case of an internationalized domain name, for instance,
        each label could in principle represent a new locus of
        control and a new language context; moreover, at least some
        domains (such as the root) have an Internet-wide context and
        therefore do not really have a language context as such.  But
        even in the case of email local-parts, where a sender is
        likely to know at least one of the languages of the receiver,
        the language context that was in use at the time the
        identifier was created is often unknown.</t>
        <t>Identifiers on the network are in general exact-match
        systems, because an ambiguous identifier is problematic.
        Sometimes, but not always, there are facilities for aliasing
        such that multiple identifiers can be put together as identity.
        Such techniques are in any case just an extension of the
        exact-match approach, and do not work the way a competent
        human reader does when interpreting the "right" character upon
        seeing the "wrong" one. </t>
        <t>Because there are many characters that may appear to be the
        same (or even, that are defined in such a way that they are
        all but guaranteed to be rendered by the same glyphs), it is
        fairly easy to create an identifier either by accident or on
        purpose that is likely to confuse even competent readers and
      writers of a language.</t></list></t>
      </section>

      <section title="Techniques already in place"
               anchor="sec_existing_techniques">
        <t>In the IDNA mechanism for including Unicode code points
        <xref target="RFC5892" />, a code point is only included when
        it meets the needs of internationalizing domain names as
        explained in the IDNA framework <xref target="RFC5894"/>.  For
        identifiers beyond IDNA, the PRECIS framework <xref
        target="RFC7564"/> generalizes the same basic technique.  In
        both cases, the overall approach is to assume that all
        characters are excluded, and then include characters according
        to properties derived from the Unicode character properties.
        This general strategy cuts the enormous size of the Unicode
        database somewhat, avoiding including some characters that are
        necessarily unsuited for use as identifiers.
        </t>
        <t>The mechanism of inclusion by derived property, however, is
        insufficient to guarantee every included character is safe for
        use in identifiers.  Some characters' properties lead them to
        be included even though they are not obviously good
        candidates.  In other cases, indvidual characters are good for
        inclusion, but are problematic in combination. Finally, there
        are cases where a two characters or sequences are not
        problematic by themselves, or if used in alternation in the
        same identifier, but become problematic when their choice
        represents the only difference between otherwise identical
        identifiers. <cref source="ajs">Do we want examples
        here?</cref> </t>
        <t>Operators of systems that create
        identifiers (whether through a registry or through
        peer-to-peer identifier negotiation system) need to make
        policies for characters they will permit.  Operators of
        registries, for instance, can help by adopting good
        registration policies: "Users will benefit if registries only
        permit characters from scripts that are well-understood by the
        registry or its advisers."<xref target="RFC5894" /> The
        difficulty for many operators, however, is that they do not
        have the writing system expertise to claim any character is
        "well-understood", and they do not really have the time to
        develop that expertise.</t>
        <t>To help with the foregoing, a registry of Unicode code
        points that present special issues for network identifiers can
        help guide protocol and operating decisions about whether to
        permit a given code point or sequence of code points.</t>
        <t>In the case of registries, it is not always necessary or
        desirable to exclude characters so much as to guarantee
        that they are used in a strictly mutually exclusive way 
        in otherwise identical identifiers.</t>
      </section>
      <section title="A registry of code points"
               anchor="sec_registry">
        <section title="Discussion" anchor="sec_reg_discuss">
          <t>The registry contains three fields.  The first field,
          called "Code Point(s)", is a code point or sequence of code
          points.  The second, contains zero or more cross references
          to related code points. The third, called "Explanation", is
          a free form text field that describes briefly the issue.
          Long paragraphs are discouraged; a code point that needs
          such discussion should be discussed in a document somewhere.
          The explanation field may contain references to documents,
          so long as the reference is stable.</t> <t>The registry is
          updated by Expert Review.  It ought to contain only code
          points that are significant in identifiers and that need
          special policies (including policies of exclusion).</t>
        </section>
        
        <section title="Registry initial contents"
                 anchor="sec_reg_initial_contents">
          <t><cref source="af">I'm not sure that 0259 is strictly
          phonetic any more because it does have an uppercase (which
          is the reason it's been disunified from U+01DD</cref></t>
          <texttable style="full" title="Registry of Unicode Code
                                         Points for Special
                                         Consideration in Network
                                         Identifiers"
                     anchor="reg_table">
            <ttcol>Code Point(s)</ttcol>
            <ttcol>Cross Reference</ttcol>
            <ttcol>Explanation</ttcol>
            <c>U+02BC</c>
            <c>U+2019</c>
            <c>Character is indistinguishable from a common punctuation mark</c>
            <c>U+0338</c>
            <c></c>
            <c>Not intended for use in creating letters</c>
            <c>U+0259</c>
            <c>U+01DD</c>
            <c>Phonetic character</c>
          </texttable>
        </section>
      </section>

      <section title="IANA Considerations" anchor="sec_iana">
        <t>The IANA Services Operator is hereby requested to create
        the Registry of Unicode Code Points for Special Consideration
        in Network Identifiers, and to populate it with the values in
        section <xref target="sec_reg_initial_contents" />.  The
        registry is to be updated by Expert Review.</t>
      </section>

      
  </middle>

  <back>
<!--    <references title="Normative References">
    </references>-->
    <references title="Informative References">
      <?rfc include="reference.RFC.5892.xml"?>
      <?rfc include="reference.RFC.5894.xml"?>
      <?rfc include="reference.RFC.7564.xml"?>
    </references>

    <section title="Discussion Venue">
      <t>This Internet-Draft may be discussed on the IAB
      Internationalization public list: i18n-discuss@iab.org.</t>
    </section>

    <section title="Change History">
      <t>Note to RFC Editor: this section should be removed prior to
      publication as an RFC.</t>
      <t><list style="hanging">
        <t hangText="00:">
          <list style="symbols">
            <t>Initial version</t>
          </list>
        </t>
      </list></t>
    </section>
  </back>
</rfc>
