3. Focus on linking open standards to code, operationals, and interoperability.

Phillip Hallam-Baker <phill@hallambaker.com> Mon, 13 June 2016 16:05 UTC

Return-Path: <hallam@gmail.com>
X-Original-To: ietf@ietfa.amsl.com
Delivered-To: ietf@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 0332912D859 for <ietf@ietfa.amsl.com>; Mon, 13 Jun 2016 09:05:26 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.4
X-Spam-Level:
X-Spam-Status: No, score=-2.4 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, FREEMAIL_FORGED_FROMDOMAIN=0.198, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
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 1s65Tr7gaJS3 for <ietf@ietfa.amsl.com>; Mon, 13 Jun 2016 09:05:24 -0700 (PDT)
Received: from mail-qg0-x22e.google.com (mail-qg0-x22e.google.com [IPv6:2607:f8b0:400d:c04::22e]) (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 BCB8F12D852 for <ietf@ietf.org>; Mon, 13 Jun 2016 09:05:23 -0700 (PDT)
Received: by mail-qg0-x22e.google.com with SMTP id l44so69442128qgd.0 for <ietf@ietf.org>; Mon, 13 Jun 2016 09:05:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:from:date:message-id:subject:to; bh=CnrGj58LoeFs6cjkxupulGJX4uxqNzinYoIAFSeMxg8=; b=VxzV226OQXDBPiCHp8o5jH1vcaeYy8ZsPXdWGGGukBeidBqzwMm1sm42nGY7GK7aew PByIKYY0a7U9yWpw6RZd/efV70jhP1ZD6jRNr8G7IgzAIvJ/CIiVVT+dGF7xM35Z72Pd WTRA3ZRaurHJqiJ1xepFOygtv7kqWkMimqFcPnTzQJd3tGNoQYUOpBx8dwcAAu6aOeMP fLSpM3RU9FCRVHu4x0WkYatloWIVMl5lfOKFbfcc8Vfky+Trq0+P4boKHUVSlr17ZVE+ ffexUDlqmmf9cVVot15rKUQd6nF0xghJOnBYDBPIy+camJMFFMusbwDCTK0YJmQCRbJ3 m+DA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:sender:from:date:message-id:subject :to; bh=CnrGj58LoeFs6cjkxupulGJX4uxqNzinYoIAFSeMxg8=; b=l/NG6RXr9aDs5Gr5dwtdL+Ry2Uzm9MRi2iwx6drPXm0L9UjtU1Ql8NJ/91Y+pXqSHg w7SY9WQgL57nsQXuW+SP/kkdxvcC/TDrXdkOX5uKD8XLkXn6OpilQgrQne8S8QR924kf TrzU3Q/MPEBXfr062lEFRDxpHVhN3yL7Y5OJjv+7TvQ01200Fk2NbpKxX0VvRQAC4uRL VWjSow8heEPGJjIaCpIk88M19YxGsK+PYNsF+v1+YCR/WnNyxfPm0ecNf29nHTmBmnZW vpKOZQipPPJ/eKiMISP7AFE4X3pp3IiUW4TucRikr4ezUhh9aLmDCvqFC+b6BWckr0TK lgTQ==
X-Gm-Message-State: ALyK8tIVFIIOctwF3JJsqhvebe35MWck8mqiKbNwn9ONBYM2uYvnYhOk5bYauLRJx1cWWOCAIqTvvGHp7jGVRA==
X-Received: by 10.140.170.4 with SMTP id q4mr9546882qhq.30.1465833922767; Mon, 13 Jun 2016 09:05:22 -0700 (PDT)
MIME-Version: 1.0
Sender: hallam@gmail.com
Received: by 10.55.25.85 with HTTP; Mon, 13 Jun 2016 09:05:22 -0700 (PDT)
From: Phillip Hallam-Baker <phill@hallambaker.com>
Date: Mon, 13 Jun 2016 12:05:22 -0400
X-Google-Sender-Auth: Qfw8Xax9sNYbSNNpRXuFBQAvt-g
Message-ID: <CAMm+Lwi5T3Rsj6nQMOdFCRJM65o3e7Y16anWifEkNCkAu9GRBw@mail.gmail.com>
Subject: 3. Focus on linking open standards to code, operationals, and interoperability.
To: IETF Discussion Mailing List <ietf@ietf.org>
Content-Type: multipart/alternative; boundary="001a113ac09644348905352b0e93"
Archived-At: <https://mailarchive.ietf.org/arch/msg/ietf/qZDbekm4hJnLZ57DVPgn4b9NUaU>
X-BeenThere: ietf@ietf.org
X-Mailman-Version: 2.1.17
Precedence: list
List-Id: IETF-Discussion <ietf.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/ietf>, <mailto:ietf-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/ietf/>
List-Post: <mailto:ietf@ietf.org>
List-Help: <mailto:ietf-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/ietf>, <mailto:ietf-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 13 Jun 2016 16:05:26 -0000

I think trying to discuss all four topics in one thread is doomed. I want
to focus on just one:

3. Focus on linking open standards to code, operationals, and
interoperability.

One of the reasons I have been pushing for a change in the RFC format is
that putting links into specifications allows them to become more
effective. In the past I have spent hours pulling schemas, code, etc. out
of specifications, removing headers, footers etc.so I can feed them into
tools. It isn't just a waste of time, it cripples the development process:

A) Using the schemas in specifications as the basis for code becomes the
exception, not the rule.

B) As a result of A, fewer tools are built, tested, used.

C) As a result of B, the schemas don't get exercised in running code and
they don't guarantee interop.

D) As a result of C the value prop decreases, reinforcing B and the cycle
continues.


Fixing the RFC format is in hand but we also need tools. This is what I
have been working on. A complete toolset that allows a new specification,
reference and production code to be developed in less than a week.

I produced the following specification from scratch in three working days:

https://tools.ietf.org/html/draft-hallambaker-lurk-02

And by that I mean 24 hours work, not 72.

The reference section in the draft is generated from the schema. The
examples in the draft are generated from running example code generated
from the schema. So when you read one of my specifications you can be as
certain as it is likely to get that the specification and the example are
consistent.


Where I would like the IETF to get to is that for new protocols we start
with the expectation that there will be from the start

* A specification with valid reference and examples sections

* A schema that permits
  * Automated generation of production code in at minimum C.
  * Automated generation of reference code

* A set of test vectors.

In this context, reference code is not the same as production because
reference code should be conservative about what it accepts and permissive
in what it sends. In fact reference code should intentionally send
malformed commands to provide test cases.


Yes the tool is a bit rough and could be improved on. And at the moment it
only generates specifications for application protocols that use JSON or
TLS schema format and it only targets C# and C. And the example code
generator has advanced somewhat ahead of the production generator. But
those are fixable. The code generators and the meta-generator are all on
GitHub and Sourceforge under an MIT license:

https://sourceforge.net/projects/phb-build-tools/

I also have generators that build code for what I regard as 'legacy'
encodings. There is an RFC822 style header parser, an FTP/SMTP/IMAP/etc
style command parser and even an ASN.2 encoder.

The code is believed to run on Linux and OSX under Mono. The main reason
for not working on that recently is that due to the recent acquisition of
Xamarin and their dotNetCore initiative, support for Linux and OSX is in a
state of flux. These is now a new option that is expected to improve the
situation dramatically in the very near future.

The tools are implemented as command line tools and additionally on the
Windows platform as VSIX extensions that are fully integrated into Visual
Studio.


Working this way does have obvious benefits but it also has a few
constraints. One consequence of working through tools that build tools that
build tools for the past 25 years is that I am used to working at a very
high level of abstraction. And that means that when my high level
description of how a protocol works has to start dictating very low level
details of implementation, I see that as an architecture failing.