Re: [apps-discuss] Scope of RFC3986 and successor - what is a URI?

Sam Ruby <rubys@intertwingly.net> Sun, 18 January 2015 02:53 UTC

Return-Path: <rubys@intertwingly.net>
X-Original-To: apps-discuss@ietfa.amsl.com
Delivered-To: apps-discuss@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 77FDA1ACD97 for <apps-discuss@ietfa.amsl.com>; Sat, 17 Jan 2015 18:53:12 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id u4MbeB3JP688 for <apps-discuss@ietfa.amsl.com>; Sat, 17 Jan 2015 18:53:10 -0800 (PST)
Received: from cdptpa-oedge-vip.email.rr.com (cdptpa-outbound-snat.email.rr.com [107.14.166.229]) by ietfa.amsl.com (Postfix) with ESMTP id 533721A9140 for <apps-discuss@ietf.org>; Sat, 17 Jan 2015 18:53:10 -0800 (PST)
Received: from [98.27.51.253] ([98.27.51.253:64936] helo=rubix) by cdptpa-oedge01 (envelope-from <rubys@intertwingly.net>) (ecelerity 3.5.0.35861 r(Momo-dev:tip)) with ESMTP id 46/9F-21299-5102BB45; Sun, 18 Jan 2015 02:53:09 +0000
Received: from [192.168.1.115] (unknown [192.168.1.115]) (using TLSv1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: rubys) by rubix (Postfix) with ESMTPSA id A345B140A83; Sat, 17 Jan 2015 21:53:09 -0500 (EST)
Message-ID: <54BB2014.7070500@intertwingly.net>
Date: Sat, 17 Jan 2015 21:53:08 -0500
From: Sam Ruby <rubys@intertwingly.net>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0
MIME-Version: 1.0
To: darrel.miller@gmail.com
References: <20140926010029.26660.82167.idtracker@ietfa.amsl.com> <012001d02d91$6ec42300$4001a8c0@gateway.2wire.net> <54B2781C.4040505@intertwingly.net> <018e01d02dc6$1d03b0a0$4001a8c0@gateway.2wire.net> <54B2CC75.5080900@intertwingly.net> <54B79930.3070009@ninebynine.org> <54B7AEC2.9010109@intertwingly.net> <CAKHUCzz=jZAF-i2_pwGpkER5vNhv95CMwdBCMwigPJ0FA_t4_A@mail.gmail.com> <54B7BD4A.1090803@intertwingly.net> <54B7CF28.7060408@gmx.de> <54B7D605.2060307@intertwingly.net> <f5boaq0gdw5.fsf@troutbeck.inf.ed.ac.uk> <54B806A2.8020803@intertwingly.net> <CAKHUCzzN4Eu6R_f2Sf8EtiAp-8w3ds5Yp3-PBHK+B0wGRxEtmw@mail.gmail.com> <54b9381b.8ca1e00a.243f.ffffcae4@mx.google.com> <98A81DE7-1845-46EC-A3EB-F00438863ECB@seantek.com> <54B93F2A.5070900@intertwingly.net> <54BA7EE2.1040102@ninebynine.org> <54BAB143.1080006@intertwingly.net> <CAPW_8m6ju6QFmp_pvby72KXYAyOCOVOvhbf9VfP384=5QKFwUA@mail.gmail.com>, <54BAC447.7030706@intertwingly.net> <54bb1122.4aa6e00a.410f.ffff88b3@mx.google.com>
In-Reply-To: <54bb1122.4aa6e00a.410f.ffff88b3@mx.google.com>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit
X-RR-Connecting-IP: 107.14.168.118:25
X-Cloudmark-Score: 0
Archived-At: <http://mailarchive.ietf.org/arch/msg/apps-discuss/QL0Bt1_tdudVkVDts4JvrP2BK60>
Cc: IETF Apps Discuss <apps-discuss@ietf.org>
Subject: Re: [apps-discuss] Scope of RFC3986 and successor - what is a URI?
X-BeenThere: apps-discuss@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: General discussion of application-layer protocols <apps-discuss.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/apps-discuss>, <mailto:apps-discuss-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/apps-discuss/>
List-Post: <mailto:apps-discuss@ietf.org>
List-Help: <mailto:apps-discuss-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/apps-discuss>, <mailto:apps-discuss-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 18 Jan 2015 02:53:12 -0000

On 01/17/2015 08:08 PM, darrel.miller@gmail.com wrote:
>
> *From:* Sam Ruby <mailto:rubys@intertwingly.net>
>
>  > I have trouble with the words "existing *spec-compliant*
> implementations".
>
>  > Either that term is meaningless, or I have yet to find one.
>
>  >I've taken a look at a lot of libraries that produce and consume URIs
>  >(some call them URLs, but lets not worry about that for the moment).  I
>  >have yet to find one that is spec compliant.
>
> Again I can only speak for the tests that you are doing on the csharp
> implementation, but the test results are far from conclusive when it
> comes to comparing against RFC 3986.  From looking at your makefile, I’m
> making a guess that you are using mono to build the csharp code.  The
> System.Uri class is actually part of the .net framework.  Currently
> there are multiple versions/editions of the .net framework in addition
> to the mono version.  Even within the Microsoft .net framework there are
> configuration settings that control URI parsing behavior

I tried Mono at first, but saw very poor results.  I then removed it 
from the makefile, and reran with Microsoft .Net and saw much improved 
results.  You can see the version I ran with here:

https://github.com/webspecs/url/blob/develop/evaluate/useragent-results/csharp

> You can turn on IRI compliant parsing with a global setting.
> http://msdn.microsoft.com/en-us/library/bb882600(v=vs.110).aspx  The
> default of this global setting was changed from false to true on the
> move from .Net 4.0 to 4.5.
>
> You can also configure all kinds of other behavior related to URI parsing
> http://msdn.microsoft.com/en-us/library/bb882619%28v=vs.110%29.aspx

If you have new results or updates to the code to suggest, I'm 
interested.  My preference is GitHub pull requests, but whatever works 
for you is fine with me.

> My reason for bringing up these details is because I believe that
> declaring RFC 3986 invalid because implementations don't match its
> behavior is self-defeating.  IMHO, a spec should be a goal that
> implementations aim for, not a reflection of the behavior of an
> implementation that currently has the biggest market share.

I, too, believe that a spec should be a goal that implementations aim 
for.  I also believe that spec writers should listed to implementers.  I 
am NOT saying that that wasn't done here, but I am saying that there is 
clear evidence that a decade after RFC 3986 was published that 
implementors (with the possible exception of Microsoft?) have not 
adopted RFC 3986 as a goal.  This includes quite a number of 
implementations that make claims of compatibility.

I will say that in the case of Microsoft, they have identified the URL 
specification as one that they are considering:

https://status.modern.ie/urlapi

They have a developer who is working on this, and he has posted feedback 
to the W3C mailing list.

> Having said all this, I will try and run your tests on various versions
> of Microsoft’s .net framework and see how much the results deviate.  I
> did try running your C# tests, but they are based on a JSON file that I
> believe gets created by some javascript that I didn’t find.  My js
> skills are less than stellar!

I'll make it easier for you.  You can find the json file you need here:

https://url.spec.whatwg.org/interop/urltestdata.json

> Darrel

- Sam Ruby