<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.2.3 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-claise-semver-01" category="std">

  <front>
    <title abbrev="SemVer">Semantic Versioning and Structure for IETF Specifications</title>

    <author initials="B." surname="Claise" fullname="Benoit Claise">
      <organization>Cisco</organization>
      <address>
        <email>bclaise@cisco.com</email>
      </address>
    </author>
    <author initials="R." surname="Barnes" fullname="Richard Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="J." surname="Clarke" fullname="Joe Clarke">
      <organization>Cisco</organization>
      <address>
        <email>jclarke@cisco.com</email>
      </address>
    </author>

    <date year="2017" month="July" day="18"/>

    
    
    

    <abstract>


<t>In the Internet engineering ecosystem, there is increasingly a need for
specifications that evolve over time, and which are encoded directly in
structured formats (e.g., YANG models).  Internet-Drafts are a poor fit for
working groups that want to produce structured specifications, and publishing
versions of an evolving specification as RFC makes it difficult to track the
specification over time.  This document outlines recommendations for how
working groups can provide consistent, meaningful versions for specifications
over time and work directly on structured documents while still fitting within
established IETF processes.</t>



    </abstract>


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<t>The pace at which the software that drives the Internet is developed and
deployed today is much faster than it was early in the Internet’s history.  In
this environment, maintaining interoperability can be more challenging.</t>

<t>Two of the major mechanisms that have been developed for driving
interoperability in a more dynamic ecosystem are structured specifications and
semantic versioning.  Structured specifications allow much of the work of
implementing a specification to be automated, so that developers can focus on
the parts of a specification that really need human involvement.  Semantic
versioning helps operators know what versions can be deployed without breaking
running systems, so that they can safely deploy updated versions of a
specification more quickly.</t>

<t>The traditional practices of the IETF interact poorly with these mechanisms.
Each document presented to the IETF for last call and IESG approval must be
formatted as an Internet-Draft, i.e., as unstructured text.  All RFCs across
the IETF share a single, common numbering space, so that RFC numbers have no
useful semantic with respect to versioning.  Nonetheless, there is still a
need to be able to capture the consensus of the IETF at critical points in
the life-cycle of a specification.</t>

<t>This document describes recommendations for how a working group (WG) that wishes
to produce structured specifications with semantic version numbers can interact
best with IETF processes.</t>

</section>
<section anchor="managing-semantic-versions" title="Managing Semantic Versions">

<t>While some of this process might apply to completely new work (such as a YANG
module), the process in this document applies to WG adopted work items or to
modification of an existing IETF-approved work item (typically a bis document).</t>

<t>We start from the premise that a working group controls a version-controlled
repository (e.g., Git, SVN, etc.) for a structured specification (not formatted
as an Working Group Internet-Draft), and can “tag” commits in the repository as
having certain version numbers.  We assume that there is one repository per
specification, so that version tags don’t need to state the specification to
which they refer.</t>

<t>The recommended structure for semantic versions follows the widely-used
three-part convention, with an additional field for use in working group
processes:</t>

<figure><artwork><![CDATA[
  MAJOR.MINOR.PATCH
]]></artwork></figure>

<t>The fields in such a structured version have the following semantics (cf.
semver.org):</t>

<t><list style="symbols">
  <t>MAJOR is incremented when the new version of the specification
is incompatible with previous versions.</t>
  <t>MINOR is incremented when new functionality is added in a manner that is
backward-compatible with previous versions.</t>
  <t>PATCH is incremented when bug fixes are made in a backward-compatible manner.</t>
</list></t>

<t>In IETF terms, this versioning scheme provides functionality analogous to
several parts of the traditional IETF process.</t>

<t><list style="symbols">
  <t>MAJOR is analogous to an “obsoletes” relation between RFCs</t>
  <t>MINOR is analogous to an “updates” relation between RFCs</t>
  <t>PATCH is analogous to use of the RFC errata process</t>
</list></t>

<t>The more major a change to the specification, the more consensus is required.
When the WG wants to make a MAJOR change to a structured specification, the
specification MUST be converted into Internet-Draft format and run through the
typical IETF consensus process. Every commit that is tagged with a MAJOR
version change MUST also have a tag of the form “RFC-XXXX” indicating the
number of the RFC describing the change.</t>

<t>MINOR changes follow the same rules, except that the Area Director for the WG
MAY approve the issuance of a minor version with only WG consensus, not full
IETF consensus.  Any change to the structured specification that significantly
changes the security considerations for the protocol or requires additional
IANA actions MUST be converted into Internet-Draft format and submitted for
IETF consensus.  With the approval of the AD for the WG, changes without such
impacts MAY be approved by consensus of the working group.</t>

<t>PATCH-level changes MAY be made by the editors, with the consent of the WG
chairs.</t>

<t>When a working group starts up work on a new version of the specification,
regardless of whether it’s a minor update or a complete rewrite, they SHOULD
create a dedicated branch of the repository for the new version, where changes
related to the new version will be committed.  The semantic version, i.e. MAJOR 
and MINOR is assigned when this branch is merged back to the main specification.
Once there is consensus to update the main specification to that version, the 
branch should be merged, and the merge commit tagged with the new version number.</t>

<t>When working on modification to an existing work item (typically a bis document), 
the process is to fork a git repo, branch, make a proposal, then push the branch
back over to the Working Group when/if the Working Group adopts it.</t>

<section anchor="versioning-for-work-in-progress" title="Versioning for Work in Progress">

<t>It can be useful to mark certain versions of a work in progress as checkpoints,
e.g., for reference at a hackathon.  These checkpoints should follow their own
version sequence, much like Internet drafts:</t>

<figure><artwork><![CDATA[
  LABEL-VERSION
]]></artwork></figure>

<t><list style="symbols">
  <t>LABEL is a string that identifies the feature branch</t>
  <t>VERSION is incremented whenever a new revision is tagged</t>
</list></t>

<t>These tags are analogous to Internet-Draft names. Much like an Internet-Draft
name, the choice of LABEL values is up to the editors and WG chairs. For cases
expected to result in a given version, they may choose to use that as a label
value.  For example, if the WG has agreed to embark on a major revision to the
protocol, then they might use the label “v2.0.0-beta”, so that the working
revisions would be “v2.0.0-beta-0”, “v2.0.0-beta-1”, etc.</t>

<t>It’s important to note that not every commit needs a version.  Much like
working groups using Github to manage Internet-Drafts today only periodically
submit them to the IETF, a WG can do work in a repository and only tag versions
when they are useful to the WG.  Beta versions should be tagged at key points
in the development process:</t>

<t><list style="symbols">
  <t>Before an IETF meeting or WG interim meeting</t>
  <t>Before a hackathon or interop event</t>
  <t>Before a working group or IETF last call</t>
</list></t>

<t>Work on a new version SHOULD be conducted on a dedicated branch.  Once there is
consensus to update the main specification to that version, the branch should
be merged, and the merge commit tagged with the new version number.</t>

</section>
</section>
<section anchor="ietf-consensus-for-structured-specifications" title="IETF Consensus for Structured Specifications">

<t>While working groups may use any format for specifications under development,
the Internet Standards process requires that a document proposed as an RFC must
be submitted in the RFC format, i.e., as unstructured text.  Proposed RFCs are
also required to contain explanatory text not typically contained in structured
specifications, most notably Security Considerations and IANA Considerations.
Thus, a working group that is focused mainly on a structured specification will
have to convert the structured specification to the RFC format and add the
additional explanatory text.</t>

<t>In order to keep the repository as the primary home for the specification, the
working group should keep any required explanatory text in the repository
alongside the structured specification, and use automated tools to generate an
RFC-formatted document from the artifacts in the repository.  As the outputs
are reviewed in the IETF last call and IESG processes, the editors should
reflect their responses in the repository, generating updated versions of the
RFC-formatted document as necessary.</t>

<t>Whenever an Internet-Draft is generated from the repository, the corresponding
commit in the repository should be tagged with the full name and version of the
Internet-Draft.  Additionally, a reference to the repository (e.g., a URL)
should exist in the text of the resulting Internet-Draft.  These steps enable
the evolution of the draft to easily be tied back to the evolution of the
repository.</t>

</section>
<section anchor="example-history" title="Example history">

<t>The below sequence of commits and tags shows the progress of a structured
specification through several stages of its life-cycle.  (Time flows up from
the bottom, as is common in version control logs; most recent is on top.)</t>

<t>An initial version of a protocol is proposed for a Birds of a Feather (BoF) and
a WG is formed. The WG develops version 1.0.0 of the specification.  Along the
way, they tag betas when they need an easy way to refer to a version, e.g.,
before working group last call (WGLC).</t>

<t>Once the WG has reached consensus, an Internet-Draft is created from the
repository (draft-ietf-wg-proto-00) and submitted for the IETF consensus
process, resulting in an RFC (RFC XXX1) that describes the first version of the
protocol. In this example, there is never a need to publish an individual
(author-named) internet-draft, because the WG worked directly on the structured
specification and obtained consensus on it.</t>

<t>Comments from the IETF last call (LC) and the IESG are incorporated in the
repository, and new versions of the Internet-Draft are generated for IESG
review and submission to the RFC editor.</t>

<figure><artwork><![CDATA[
...
|
* e3091df (tag:v1.0.0, tag:draft-ietf-wg-proto-02, tag:RFCXXX1)
|         Responses to IESG comments
|
* 7494725 (tag:draft-ietf-wg-proto-01) Responses to IETF LC comments
|
* 8e2be54 (tag:proto-2, tag:draft-ietf-wg-proto-00)
|         Responses to WGLC comments
|
* 9703a60 (tag:proto-1) Responses to comments at IETF meeting
|
* 2b83977 Responses to J. Smith comments
|
* 8b75e1e (tag:proto-0) Responses to BoF comments
|
* 1991498 Initial submission
]]></artwork></figure>

<t>The WG adds two features to the specification.  The first feature is major
enough that the chairs decide it needs IETF consensus, resulting in a second
Internet-Draft going through the IETF consensus process
(draft-ietf-wg-proto-feature-00) to become an RFC (RFC XXX2).  The second
feature is minor enough that it can be approved by WG consensus.</t>

<figure><artwork><![CDATA[
...
|
*   a5f3214 (tag:v1.2.0) Merge branch 'v1.2'
|\     
| * 8fb9cb6 Responses to WGLC comments on feature Y
| |
| * 39322e9 (tag:featureY-1) Responses to WG comments; ready for WGLC
| |
| * 39322e9 Add feature Y
|/     
*   d1d201d (tag:v1.1.1) Fix validation errors
|
*   6571483 (tag:v1.1.0, tag:draft-ietf-wg-proto-feature-04,
|           tag:RFCXXX2) Merge branch 'v1.1'
|\
| * abc3f5e (tag:draft-ietf-wg-proto-feature-03) Resolution of DISCUSSes
| |         from Security AD
| |
| * 3ab54f3 (tag:draft-ietf-wg-proto-feature-02) Resolution of DISCUSSes
| |         from Internet and Transport ADs
| |
| * cabb1f6 (tag:draft-ietf-wg-proto-feature-01) Responses to WGLC
| |         and IETF LC comments on feature X
| |
| * fbfaa6b (tag:featureX-0, tag:draft-ietf-wg-proto-feature-00)
| |         Responses to comments on feature X
| |
| * 0630638 Add feature X
|/     
* e3091df (tag:v1.0.0, tag:draft-ietf-wg-proto-02, tag:RFCXXX1)
|         Responses to IESG comments
|
...
]]></artwork></figure>

<t>The WG develops a major revision of the protocol, resulting in a third
Internet-Draft (draft-ietf-wg-protobis-00) going through the IETF consensus
process, resulting in RFC XXX3.</t>

<figure><artwork><![CDATA[
...
|
* a9d7d29 (tag:v2.0.0, tag:draft-ietf-wg-protobis-01 tag:RFCXXX3)
|         Merge branch 'v2'
|\
| * df5d437 (tag:draft-ietf-wg-protobis-00) Responses to
| |         WGLC and IETF LC comments
| |
| * 986ebb6 (tag:v2.0.0-beta-1) Checkpoint for hackathon
| |
| * d86986e (tag:v2.0.0-beta-0) Some more v2 features
| |
| * ca02154 Restructure for v2
|/
*   a5f3214 (tag:v1.2.0) Merge branch 'v1.2'
|
...
]]></artwork></figure>

<t>This example history is greatly simplified.  In a real WG, there will be far
more commits without versions, as the WG incorporates proposals, edits,
explanatory text, etc.  But this example highlights the key moments in the
life-cycle of a specification.</t>

</section>
<section anchor="creating-internet-drafts-from-a-repository" title="Creating Internet-Drafts from a Repository">

<t>As noted above, WGs should have one repository per specification.  Over the
lifetime of the specification, it will be necessary for automated tools to
build Internet-Drafts from this repository.  A standardized repository layout
can help automate this process.</t>

<t>The root level of the repository should have a file named <spanx style="verb">index.xml</spanx> or
<spanx style="verb">index.md</spanx>, depending on whether <eref target="https://tools.ietf.org/html/rfc7991">XML</eref> or
<eref target="https://github.com/miekg/mmark/wiki/Syntax">Markdown</eref> is being used.  This
file should itself be a valid source for an Internet-Draft, including
information about the title to be used, authors’ / editors’ names, security
considerations, etc.  It will act as a template into which the structured
specification will be included when an Internet-Draft is created.</t>

<t>The template file should include files that comprise the structured
specification as figures at appropriate points in the draft.  The Markdown
syntax provided by <spanx style="verb">mmark</spanx> provides a syntax for including <eref target="https://github.com/miekg/mmark/wiki/Syntax#including-code-fragments">code
fragments</eref>
from external files, including the ability to selectively include parts of a
file.</t>

</section>


  </middle>

  <back>





  </back>

<!-- ##markdown-source:
H4sIACvkbVkAA71baXMbR5L9Xr+igvog0gGAly5yvgxFHUOHDocoW3J4J9bV
3QWwh31guhoEseHY374vM6uqD4CyHLux8hEi0JWVlcfLl1nN6XSq2rwt7Lne
u7alqdo81b/YxuV1lVcLbapMX7fNKm1XjdXzutFXrz+/0ddLm+bzPDUtnnN7
yiRJY+/ONURgscrqtDIlZGaNmbfTtDC5s1NnyzvbTAvTWtcqrLWLutmca9dm
Kl825xr7uPbk6Ojs6EQp12Lv/zRFXUHOxjq1zM/1b22dTrSrm7axc4e/bUr6
yz+VMqv2pm7OlZ4qjT955c71y5m+5K35I9Hopa3qvO1/XjeLc32Zu7TmH2GE
vDjXiSj995S+mKV1OZD8aaZfmqaCVp3kT3l6Y5qs/8Vu0U2R/D1f3s3c/UDm
j6xtc9vX9sfa9j/cLe9fKT/RU1Wp6XSqTeLaxqStUleVbm+svqpaC91abatF
XlnbkIdtWruNa205oWfg5NxBn7SxxuHrYqONxqMZ+V65gdvxvIGsu7q4s7qG
a3Wbl3bCMbO+gTW0gThbpXWG9Vne2LSFvLyCb31EsdjStE7v29liNtG/Xnx4
q0ssKNzBTEeNp68okBwLNHpZIw7n8CLptK6bWzrHoqlXS6/TGnGs21ovmzpb
pVb39hseQZRdrpIidzeQou4k9J2u5/hKDkfSB8u0cfrTm0tdmlsLY7U42xzf
rQrelGx+S7YcmquzEM71+QZWRpasSgtN61VbwB9Ow0J1iY8yb2DKt5t6PT5j
Cs1wtLs8szrFczncV7UTXVpDSTtfFTqeg0QMz6yiIuIpyO6cAz17xgoaOvJn
QXbMi4Is35I267yFzRSS2bD9sIDBAaql1jnrZj4QyzzLCqvUI/Inu4QUUeoz
YnJp4B9yGQcMRamr5+2aHM2uzJr8zrph+JLt7J0t6iW2xBlUZpdFvcEPbZ2Z
DX1friBtbmCYhuRU5KU13GZNwyE4EPjYafijBRhxyKmWvGOru7ypq1Isa/Kq
xX907JxWYevGJHmRtxt2R2IRtdAZEFAUnF4LnP7zuqZAor1K8y94orR4oMpd
6QP1xiB1Emur3oHIY3RqCsetvaC5kZ2yDSACYB3zl5PjwUhnO7mA8HcR4XHi
64fXFEW9Flv6Y3C01HOVl8vCkm24SIzSA0kAewCRa6S2zQiwvTP9IRuJ4TnC
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
fmf5FznEgN0vD3AsztT/ALfh1BDYNgAA

-->

</rfc>

