Re: [codec] AD Evaluation of draft-ietf-codec-oggopus-09

"Ben Campbell" <ben@nostrum.com> Sat, 19 December 2015 00:19 UTC

Return-Path: <ben@nostrum.com>
X-Original-To: codec@ietfa.amsl.com
Delivered-To: codec@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 1C00F1A0103; Fri, 18 Dec 2015 16:19:39 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.91
X-Spam-Level:
X-Spam-Status: No, score=-1.91 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, T_RP_MATCHES_RCVD=-0.01] 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 7BaMs8ruQmTv; Fri, 18 Dec 2015 16:19:34 -0800 (PST)
Received: from nostrum.com (raven-v6.nostrum.com [IPv6:2001:470:d:1130::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 7BE211A0100; Fri, 18 Dec 2015 16:19:34 -0800 (PST)
Received: from [10.0.1.10] (cpe-70-119-203-4.tx.res.rr.com [70.119.203.4]) (authenticated bits=0) by nostrum.com (8.15.2/8.14.9) with ESMTPSA id tBJ0JX6Q067051 (version=TLSv1 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO); Fri, 18 Dec 2015 18:19:33 -0600 (CST) (envelope-from ben@nostrum.com)
X-Authentication-Warning: raven.nostrum.com: Host cpe-70-119-203-4.tx.res.rr.com [70.119.203.4] claimed to be [10.0.1.10]
From: Ben Campbell <ben@nostrum.com>
To: "Timothy B. Terriberry" <tterribe@xiph.org>
Date: Fri, 18 Dec 2015 18:19:32 -0600
Message-ID: <25D8812E-3CEF-41BB-A82D-1A4B0524F439@nostrum.com>
In-Reply-To: <566B4B47.9010809@xiph.org>
References: <86ACD2D0-02B6-473E-9E35-B9980166D9A0@nostrum.com> <566B4B47.9010809@xiph.org>
MIME-Version: 1.0
Content-Type: text/plain; format="flowed"
Content-Transfer-Encoding: quoted-printable
X-Mailer: MailMate (1.9.3r5187)
Archived-At: <http://mailarchive.ietf.org/arch/msg/codec/_V5IWCoDqEToFOur9yCJ4mwjhR4>
Cc: codec@ietf.org, draft-ietf-codec-oggopus.all@ietf.org
Subject: Re: [codec] AD Evaluation of draft-ietf-codec-oggopus-09
X-BeenThere: codec@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Codec WG <codec.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/codec>, <mailto:codec-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/codec/>
List-Post: <mailto:codec@ietf.org>
List-Help: <mailto:codec-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/codec>, <mailto:codec-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 19 Dec 2015 00:19:39 -0000

Thanks for the response. A few more comments on the substantive section 
inline. I will get to the editorial parts in a separate email. (I 
removed sections that do not seem to need further discussion.)

Thanks!

Ben.

On 11 Dec 2015, at 16:16, Timothy B. Terriberry wrote:

[...]

>
>> - 3, last paragraph:
>> -- "implementations need to be prepared":
>> maybe that should be a MUST or SHOULD?
>
> I think the intent was just to point out that someone might violate 
> the preceding SHOULD. It's not clear what actionable thing we'd be 
> saying they MUST do (it would depend on the particular 
> implementation).

I guess you can say MUST gracefully handle...

That makes me wonder why the end-of-stream flag part is a SHOULD and not 
a MUST, though. Are there reasonable circumstances to violate that 
SHOULD?

>
>> -- "last page SHOULD NOT be a continued packet":
>> Why not MUST NOT? Can you describe reasons someone might reasonably
>> violate this?
>
> The intent was to allow but discourage page-level editing of files 
> (i.e., cutting and splicing files by copying complete pages without 
> examining the packets on them). Even just saving a live stream that 
> drops at some point, you might reasonably expect to just be able to 
> copy the data you received to a file. A MUST here would mean you would 
> have to parse the pages, identify the continued packets from the 
> lacing values, remove the extraneous data from the last page if you 
> found some, repack the page buffer, and recompute the page checksum. 
> That's a lot more machinery, and people would likely just ignore the 
> requirement in practice. See also the discussion at 
> <https://www.ietf.org/mail-archive/web/codec/current/msg03145.html>.

As stated, it still requires that extra work, unless the implementor has 
a really good reason and fully understands the consequences. In this 
case, it seems to mean SHOULD do that work unless you don't want to.

I guess this really depends on how strongly you want to discourage the 
behavior, and what breaks if people ignore that discouragement. This 
might be better stated as non-normative guidance. Given that an 
implementation has to be able to deal with a continued packet last page 
anyway, does it really matter?

If you want to keep it as a SHOULD NOT, it would be helpful to mention 
the reasonable violations you envision in the text.

>
>> - 4.2, 2nd paragraph:
>> -- "samples which SHOULD be skipped": Why not MUST?  (also, 
>> s/which/that)
>
> Some specific applications might have a reason for looking at that 
> data (for example, when you have multiple files that you know were 
> produced by chopping up a single existing file without re-encoding).

It would be helpful to mention that in the text.

> In practice we haven't needed anything stronger to convince people to 
> implement this correctly (especially when we point them to 
> <https://people.xiph.org/~greg/opus_testvectors/correctness_trimming_nobeeps.opus>).

I'm not don't think that SHOULD vs MUST logic is contemplated by RFC 
2119 :-) It's not so much how big of a stick you need to get people to 
do the right thing as it is how bad do things break if people do the 
wrong thing. (I do agree with the sentiment to not put in MUSTs that you 
know people won't pay attention to, but I don't think thats the case 
here.)

[...]

>
>> - 4.3: Should the reference to [vorbis-trim] be normative? Can the
>> feature be implemented without understanding the referenced doc?
>
> The answer to the second question is "yes", which I think makes the 
> answer to the first question "no". The reason this is here is to tell 
> people familiar with how Vorbis works what mechanism they should use 
> to achieve the same outcome in Opus. But if you're not familiar with 
> Vorbis, then you can safely ignore the whole paragraph.

Okay.

>
>> - 4.6: Should the reference to [seeking] be normative? Can the 
>> section
>> be implemented without understanding it?
>
> It is possible to implement seeking without knowing anything other 
> than what is described in RFC 3533, but the linked documentation does 
> help considerably.
>
> I would argue that the section itself is not normative, in that you 
> could implement seeking with some other method (for example, linearly 
> scanning the whole file on open to build an index, possibly caching 
> such indexes for files that are opened frequently: this would not be 
> my recommended approach, but people have done it in practice). You 
> could also choose to implement only approximate seeking by just 
> guessing a file position and decoding from there (also done in 
> practice by some players, and a common method for other formats like 
> MP3). Or you could choose not to implement seeking at all.

The current wording says "see [seeking] for general implementation 
guidelines." If those are optional guidelines, it would help to say so, 
or describe it as "some example guidelines". OTOH, if you really prefer 
the approach in [seeking], then it still makes sense for it to be 
normative.

A reference required to understand and implement an optional feature 
should still be normative.

[...]

>
>> -- "Implementations SHOULD reject ID headers"
>> What does it mean, in context, to "reject" headers?
>
> The same thing as rejecting a stream (i.e., don't try to play/decode 
> it). Changed to say that instead.

Which "that"?

Maybe this is a conventional way to say things in the codec community, 
but when I see "reject" I usually think that means you generate some 
sort of error back to the source of the thing you reject. (As opposed to 
"ignore")

>
>> - 5.1.1.4: Why not MUST?
>
> I think the idea was to allow assigning reserved values without 
> explicitly updating this specification. Even though I expect we 
> _would_ want to update this specification, given how long it's taken 
> to get this draft published, I'm wary of adding more pressure to 
> people not to deploy new mappings (because this RFC says they MUST 
> not), even when it looks like they'll be relatively stable and 
> interoperable. At least not for the sole reason that they haven't 
> gotten an RFC number yet.

If this spec reserves those values, then people still need to update it 
to assign them. If you want to make it extensible, then perhaps it needs 
an IANA registry, which, depending on the assignment policy, may not 
require an RFC at all (seems like "expert review" or "specification 
required" might make sense).

Or if you want people to be able to play with other mappings without 
"officially" assigning values, you could make some or all of the range 
"for experimental use".

>
>> - 5.2, last two paragraph: Why are the two SHOULDs not MUSTs?
>
> For the first SHOULD, this is the same as above: some other 
> specification may eventually define the format of the data here and 
> how to modify it, and I didn't think we'd want to make people 
> supporting that specification in violation of this specification. I'm 
> also leaning towards keeping this one a SHOULD since a) the eventual 
> format of this data may apply to all codecs which share the 
> vorbiscomment style of metadata, and b) we would probably try to do 
> this informally first to gain implementation experience, and only 
> bring it to the IETF if there is sufficient interest. I didn't want to 
> make updating this document a prerequisite for that. See also the 
> discussion in this thread: 
> <https://www.ietf.org/mail-archive/web/codec/current/msg03061.html> 
> (skip to 
> <https://www.ietf.org/mail-archive/web/codec/current/msg03107.html> 
> for the resolution of the debate).

I don't think the fact that future specs might change something is an 
appropriate reason to pick SHOULD vs MUST. That's _always_ true, and 
it's what our "UPDATES" process is for. The idea that you might want to 
informally experiment with different approaches is more convincing. But 
if that is the case, it would be helpful to have a sentence to that 
effect in the text.
>
> For the second SHOULD, it felt like the right strength for a judgment 
> call like "excessive". I have no objection to changing it to MUST.

I think the consequences of not following the advice is the important 
point. It sounds like this could be important for DoS attack avoidance, 
and maybe even for buffer-overrun type things. Those fall into the 
category of Bad Things.

(I do agree "Excessive" is a bit vague, so if there were a way to state 
this more concretely it would improve things. But that's true for a 
SHOULD as much as for a MUST).

[...]

>> - 5.2.1, last paragraph: Why is the SHOULD NOT not MUST NOT?
>
> In some contexts, there may be no confusion with multiple 
> normalization schemes. The language in this section was debated a good 
> deal on the list (see threads 
> <https://www.ietf.org/mail-archive/web/codec/current/msg02930.html>, 
> <https://www.ietf.org/mail-archive/web/codec/current/msg03012.html>, 
> and 
> <https://www.ietf.org/mail-archive/web/codec/current/msg03053.html>). 
> I believe everyone is satisfied with the current compromise, and would 
> prefer not to change the strength of any normative statements in it to 
> avoid re-igniting the debate.

I agree that SHOULD NOT may be appropriate here. My point is the text 
should explain why. Almost anytime a SHOULD occurs, it's helpful to 
include text describing why a MUST is not appropriate. (Usually in the 
form of examples or reasons the authors think would be appropriate to 
violate the SHOULD).

>
>> -6, first paragraph:
>> Why are the two SHOULDs not MUSTs? What does it mean to reject a 
>> packet?
>
> For the first SHOULD, the fact that most decoders are likely to reject 
> such packets is enough to discourage encoders from emitting them, and 
> I was wary of imposing a MUST restriction when RFC 6716 chose not to 
> do so.

Did 6716 use a SHOULD?

I assume that any 2119 keywords in this draft are intended to further 
restrict things from 6716. If it's already covered normatively there, 
then it doesn't need 2119 keywords here (unless directly quoted or 
attributed). But in any case, I'm looking for justification in the text. 
(I do consider preventing the use of excessive bandwidth a good enough 
reason for a MUST

>
> For the second, this is the same as the previous comment about 
> excessive allocations. I have no objection to changing this one, 
> either.

I realize now there were 3 SHOULDs in that paragraph. I mean the one 
about avoiding excessive allocations. It sounds like

[...]

>
>> [linear-predection] be normative? Can this be implemented without
>> understanding that? If it does need to be normative, can you find a 
>> more
>> stable reference?
>
> Linear prediction is something that would be understood by "a person 
> having ordinary skill in the art" (to borrow a phrase). We just wanted 
> to include a reference to help those who might not be DSP engineers 
> but wanted to learn more.

Please consider saying something like "For more information on linear 
prediction, see [XXX]." As it's currently stated, it looks like it says 
MAY do X, where the reference specified X, which would require a 
normative reference.

[...]

>
>> - 13:
>> Is this needed? Are the IETF BCP 78 and 79 provisions incorrect for 
>> this?
>
> This text was specifically requested by the Debian project (and I 
> support it personally). The same issue came up for RFC 6716 (for the 
> same reasons). See the discussion at 
> <https://www.ietf.org/mail-archive/web/codec/current/msg02845.html> 
> and 
> <https://www.ietf.org/mail-archive/web/ietf/current/msg73116.html>.
>
> Reviewing those conversations, I do notice that the language of that 
> section was changed after last call for RFC 6716, but the 
> corresponding language in our source repository was not updated 
> (because it was added to the document boilerplate manually by the RFC 
> Editor, and not included in a separate section).

That language is a bit of a problem for a standards track RFC. If people 
are really attached to it, we can pursue allowing it. But I expect 
objections down the line. Keep in mind "NOTE WELL" says that any 
contributions are subject to the rules of BCP 78 and 79.

In any case, 6716 is a bit more code centric , so the discussion made 
more sense there.