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

Robert Wilton <> Thu, 26 July 2018 15:24 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 33AD31311B0 for <>; Thu, 26 Jul 2018 08:24:53 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -14.511
X-Spam-Status: No, score=-14.511 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, T_DKIMWL_WL_HIGH=-0.01, 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 I72r6KrtCxLt for <>; Thu, 26 Jul 2018 08:24:49 -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 A5A741311AF for <>; Thu, 26 Jul 2018 08:24:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple;;; l=3827; q=dns/txt; s=iport; t=1532618688; x=1533828288; h=subject:to:references:from:message-id:date:mime-version: in-reply-to:content-transfer-encoding; bh=E+mtFhh0Kqs/bjNzzPm6yFljjGBymHCDcEZow7xmCBI=; b=cJaXICKH2uteYTympluGYaZasNy1O7oLryEeuD3MA5ZnYW/k/C7L2LV6 IqjNXuRBLg2oeGjYyfevQacKPO9KkrVb78PjEi0gEfuFkgbKtgkN8dQAQ yYwaCDyrNB+KTrp4fGmBCzNPR+MiSaV0vBx5us7CmfhK7aaMUGRbOkB3H 8=;
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0D0AQAx51lb/xbLJq1dGQEBAQEBAQE?= =?us-ascii?q?BAQEBAQcBAQEBAYUeEoQmiGWNOyyXSAuEbAKDGTgUAQIBAQIBAQJtKIU2AQE?= =?us-ascii?q?BAQIBIw8BBTQKEwsYAgImAgJXBgEMCAEBgxyBeAixS4EuhF6Fa4ELiA6BQT+?= =?us-ascii?q?BOII2NYd+glUCjGKNGQmPLwaILIVXjFuFWIFYIYFSMxoIGxU7gmqCJBcRjgc?= =?us-ascii?q?+j04BAQ?=
X-IronPort-AV: E=Sophos;i="5.51,405,1526342400"; d="scan'208";a="5421295"
Received: from (HELO ([]) by with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Jul 2018 15:24:46 +0000
Received: from [] ( []) by (8.15.2/8.15.2) with ESMTP id w6QFOjxA021684; Thu, 26 Jul 2018 15:24:46 GMT
To: Robert Wilton <>, Andy Bierman <>, Christian Hopps <>, NetMod WG <>
References: <> <> <> <> <> <> <> <> <> <> <>
From: Robert Wilton <>
Message-ID: <>
Date: Thu, 26 Jul 2018 16:24:45 +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: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
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: Thu, 26 Jul 2018 15:24:53 -0000

On 26/07/2018 15:16, Juergen Schoenwaelder wrote:
> On Thu, Jul 26, 2018 at 11:19:07AM +0100, Robert Wilton wrote:
>> I think that some aspects of versioning are the same problem.  E.g. I think
>> that there is a difference between a major release where more backwards
>> compatible changes could be expected, vs maintenance releases where one
>> would expect backwards compatibility should likely be preserved.
> Well 'could be expected' and 'would expect backwards compatibility
> should likely be preserved' is kind of hand-waving. There are often
> situations where people are reluctant to bump major version numbers
> just because a tiny bit of an API has changed in a non-backwards
> compatible way - for the same reason that you brought up. Most of the
> definitions did not change, so people do not want to bump the major
> version.
Yes, exactly.

I think that there will always be a reluctance to change the model name 
(e.g. to "module-v2") unless it can truly be made low impact to clients, 
importing modules, etc.  And if we get to something that is low impact, 
then it may well be that we end up with something that is logically 
equivalent to semver anyway.

There may be less reluctance to bump the semver major version number - 
although I agree with you that non backwards compatible bugfixes may be 
a grey area.

E.g. one common non backwards compatible change that I see recently 
between Native YANG models was changing from int32 to uint32 for list 
indexes (mostly in config false nodes).  I don't have the history as to 
why the change was made, but for all intents and purposes the effective 
value set is the same (but not specified in the model), but the encoding 
could differ, and hence it is regarded as a non backwards compatible 
change.  As an aside, part of me wonders whether classifying this as a 
non backwards compatible change is right, although I can see why it is 
specified that way.

>> This was similar to a comment above.  I don't like the (module, path) of a
>> data node having to change (due to a module name change for a major version)
>> if its definition hasn't changed at all.
> Fine. Then you deprecate the broken foo and create foo'. You do not
> like that because you do not want foo and foo' at the same time. But
> others want deprecated objects to stay to allow a transition period.
Basically yes.

I also think that perhaps there is a level of pragmatism here:
  - if a particular node is widely used, but needs to be changed, then I 
think that we are far more likely to create foo', and continue to 
support foo.
  - but if the node (or nodes) were effectively broken for some reason, 
then even if it is being used by some customers, I think that there is a 
preference to just fix in place.

I think that it just goes back to stability.  The models start off 
somewhat unstable, and then gain stability over time.  We want to be to 
modify/fix them when they are new, but once there are older, we would 
expect a much greater level of stability in them.

>> Yes, both of these are right.  And partly it is a chicken and egg problem.
>> We would like clients to migrate from CLI to YANG, but that requires stable
>> models, but don't want to invest heavily in creating stable models in YANG
>> if customers are not using it. Having two separate sets of standard models
>> (e.g. IETF and OpenConfig) doesn't help either.
> So do we hit a requirement (which is independent of versioning) that a
> mechanism is needed to select different module sets (or views), given
> that the reality gives us overlapping and competing models? And then
> as a side effect, such a mechanism may also be used to select between
> different versions?


> /js