Re: [netmod] backward compatibility requirements in draft-verdt-netmod-yang-versioning-reqs-00

Robert Wilton <> Tue, 24 July 2018 15:32 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id A7983131140 for <>; Tue, 24 Jul 2018 08:32:11 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -14.509
X-Spam-Status: No, score=-14.509 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_DKIMWL_WL_HIGH=-0.01, URIBL_BLOCKED=0.001, USER_IN_DEF_DKIM_WL=-7.5] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 1NRTevnJSG6L for <>; Tue, 24 Jul 2018 08:32:09 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher DHE-RSA-SEED-SHA (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 668F1131145 for <>; Tue, 24 Jul 2018 08:32:08 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;;; l=15740; q=dns/txt; s=iport; t=1532446328; x=1533655928; h=subject:to:references:from:message-id:date:mime-version: in-reply-to; bh=3nQvLEssuffWdF1OPRwjiqY81FgO5tiBaJyORQrOz/8=; b=TvzGJYGF2GGG9sFvHWcMwpykRucdhkY4bzaEzuIXg8y9i8/LFlro//mu 7EJ2w/eLEUsJ2UwHdzJzAuc3yq3GjwyxElt5F1zT+W5nGH1JUQ97KVAKH Typ4iYVCMHMhA/BqJckVUWjxq6XWti3ga9dlef2tlW72cgzeGRFTpr34e o=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0B4AQByRVdb/xbLJq1YAxkBAQEBAQE?= =?us-ascii?q?BAQEBAQEHAQEBAQGDH4ERbRIog36IY41okDOHDAsYAQqDEnFGAoJuOBQBAgE?= =?us-ascii?q?BAgEBAm0cDIU2AQEBAQIBAQEhSxAJAgkCEAgnAwICGwwfEQYBDAYCAQGDHAG?= =?us-ascii?q?BdwgPkyibR4EuH4Q+hXUFBYpUP4E4gmqDGwEBgUoJLiaCOoJVAogShEuNEwm?= =?us-ascii?q?PLQaBRYZchVOIBIRKhVWBWCGBUjMaCBsVO4JpgXVYg2eEYYU/PjCLd4JHAQE?=
X-IronPort-AV: E=Sophos;i="5.51,398,1526342400"; d="scan'208,217";a="5377130"
Received: from (HELO ([]) by with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Jul 2018 15:32:06 +0000
Received: from [] ( []) by (8.15.2/8.15.2) with ESMTP id w6OFW5XM014185; Tue, 24 Jul 2018 15:32:05 GMT
To: Andy Bierman <>, Juergen Schoenwaelder <>, Christian Hopps <>, NetMod WG <>
References: <> <> <> <> <> <>
From: Robert Wilton <>
Message-ID: <>
Date: Tue, 24 Jul 2018 16:32:05 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: multipart/alternative; boundary="------------9ABCDA2589A3F4B42D316707"
Content-Language: en-US
Archived-At: <>
Subject: Re: [netmod] backward compatibility requirements in draft-verdt-netmod-yang-versioning-reqs-00
X-Mailman-Version: 2.1.27
Precedence: list
List-Id: NETMOD WG list <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 24 Jul 2018 15:32:12 -0000

On 24/07/2018 16:11, Andy Bierman wrote:
> On Tue, Jul 24, 2018 at 2:29 AM, Juergen Schoenwaelder 
> < 
> <>> wrote:
>     On Sat, Jul 21, 2018 at 05:47:45PM -0400, Christian Hopps wrote:
>     > There are actual instances where small perhaps non-disruptive but
>     > incompatible changes are required. The example given to me for this
>     > type of change was when the original specification had an obvious
>     > bug (e.g., a range was incorrectly specified).
>     I strongly believe that fixing bugs is not a reason to change the
>     current versioning rules. Bugs come essentially in three flavors:
>     - A definition is messed up (i.e., a range, a pattern, a must
>       expression) but the original intention of the definition is clear
>       from the context (description clauses, references, ...). In this
>       case, implementors will likely have done the right thing (or when
>       they observed the problem they will likely have done the right
>       thing).
>     - A definition is messed up but it is not clear from the context what
>       the original intention of the definition was. In this case, there is
>       a true ambiguity and implementors can rightfully have come to
>       different conclusions how to deal with the conflict in the
>       definition.
>     In the first case, I believe there is no issue with simply fixing the
>     messed up definition. I believe this kind of bug fixes is not
>     constrained by the YANG update rules.
>     In the second case, there is true ambiguity what implementations may
>     do and hence the safest approach is to deprecate the messed up
>     definition and to create a replacement.
>     Of course, in reality, things are often not so clear cut and hence it
>     takes some informed judgement what is the reasonable way to deal with
>     things. (A type two bug caught very early may be different from a type
>     two bug caught after several months of implementation and deployment.)
>     Sometimes we also have situations where a definition that was
>     originally OK turs out over time to be problematic as technology has
>     evolved. So after some time, the original definition starts to look
>     like a bug but it actually is not. The safe path forward is again to
>     create new definitions and to deprecate the old ones.
>     Now, for those in favour of moving from (module, path) to (module,
>     path, version), you loose the deprecated definition. So if you wan't
>     to allow for a transition period, there is a need to allow an old
>     client to work with the old definition and a new client to work with
>     the new definition. In the current naming scheme, this is not a
>     problem, with a (module, path, version) naming scheme this requires
>     some extra complexity.
> The problem with versioning the "YANG API" is that it is not possible 
> to isolate
> individual modules and say "I pick version 1.0.3 of module foo and 
> version 2.1.1
> of module bar". And every client can pick a different arbitrary subset of
> mix-and-match YANG modules.
> Well YANG does not work that way.  There is no concept of a YANG package.
> There is no concept of a group of modules/versions/features that are
> not divisible within a server implementation.
> The other problem is what you are pointing out..
> It would be far easier to just fix the clients and the servers, not 
> just the servers.
> Why is it OK for the client developer to decide "we are sticking with the
> defective version of the module and not going to upgrade to
> the fixed version like the server developers have done."

One of the aims of the YANG versioning work is to give more information 
to the client about whether they are likely to be impacted by upgrading 
to a new set of modules.  For me, I think that the most useful thing is 
if this is done by comparing the full schema between old and new 
releases (including module versions, enabled features, and deviations), 
and then identifying the data nodes that have been changed in a 
backwards compatible way, and those that have been changed in a non 
backwards compatible way (if that is allowed).

E.g. even it is a change is an obvious bugfix, it still makes sense to 
flag that change so that client implementations can be checked to ensure 
that they don't break.

But if fixing a definition requires a whole new module name then I think 
that causes lots of problems (e.g. consider needing to change 
ief-interfaces to ietf-interfaces-v2 because of changing one random 
leaf).  The YANG 1.1 way is to define a new definition and then 
deprecate the broken one.  But this has negative consequences as well, 
e.g. does writing to the old leaf automatically also write to the new 
leaf at the same time?  Are both returned in a get request? What if a 
different client only writes to the new leaf?


>     /js
> Andy
>     -- 
>     Juergen Schoenwaelder           Jacobs University Bremen gGmbH
>     Phone: +49 421 200 3587         Campus Ring 1 | 28759 Bremen | Germany
>     Fax:   +49 421 200 3103         <
>     <>>
> _______________________________________________
> netmod mailing list