[SystemSafety] On open-sourcing coding standards
Olwen Morgan
olwen.morgan at btinternet.com
Tue Sep 18 21:27:01 CEST 2018
I have some sympathy with the idea that coding standards ought to be
part of the open-source world but I can see some practical problems with
the idea (as well as problems with coding standards that are not
open-source). Here goes:
I've already spoken of document N0228 on the ISO/IEC-JTC1/SC22/WG23 web
site, which I prepared while participating in the work of the BSI Panel
on language vulnerabilities. One of the reasons I allowed that document
to go forward as a Canadian contribution is that it coincided more or
less with the release of the CERT C coding standard by Robert Seacord
and his colleagues. I don't very much like the CERT standards that I've
seen because they do not separate the issues of precise identification
of language constructs and the controls that need to be applied to them.
My N0228 document worked through all of the C99 standard, under the same
headings as the standard, identifying where particular language
constructs needed to be identified and using the SYMELAR syntactic
metanotation to specify them.
Developers of commercial coding standard checkers have an incentive not
to want coding standards to be written in this way because it is not
hard to write a checker that is driven directly off the metanotation.
Indeed, I strongly suspect that certain vested commercial interests (no
names, no pack drill - but you could easily find out who I mean) made
sure that MISRA C 2004 made only minimal use of the metanotation.
Open-source development of an adaptable multi-purpose C coding standard
ought, free from vested commercial interests, to escape such pressures.
If you look at N0228, and compare it with the MISRA C documents, you
should be able to see fairly easily which constructs are the subject of
MISRA C rules and how, therefore, to construct a coding standard
technically equivalent to MISRA C (whichever version you choose) simply
by constructing a table showing what controls apply to which identified
constructs. Indeed if the developers of the latest MISRA C standard had
done this, they could have made the work of producing a standard
considerably easier for themselves - albeit at the expense of p!ssing
off the said vested interests.
The C11 standard runs to 700+ pages. Doing for C11 what I did for C99 is
therefore not a small exercise. On the other hand, nor would it be a
particularly difficult thing to do. Indeed I have been wondering of late
whether I ought to make use of my current semi-retired status to do just
that. That said, however, there are some possible non-commercial
objections to going that way. One, which was raised early in the
development of MISRA C 2004, is that the user constituency for the
standard "would find the syntactic metanotation too unfamiliar". My
response to that is that SYMELAR is simply a slightly augmented form of
BNF, and if a software engineer does not understand BNF, he/she
shouldn't be working on critical systems (and a significant number
thereof should, IMO, be taken out and shot). Nevertheless, acceptability
to users cannot be wholly ignored, if only to avoid treading on
political landmines.
Another more substantial argument is that given a set of coding rules,
the developer of a checker tool has a wide choice of how to enforce
them. There is, for example, quite a difference between, say, QAC and
the corresponding LDRA checker in what constructs their checkers
actually look for. Maldadroit choice of designated constructs could
easily and unfairly favour one existing tool over another. (Having been
most familiar with QAC, I got some pointed comments from various people
from LDRA when I gave SYMELAR definitions as input to the early stages
of developing MISRA C 2004.) This problem, however, can be addressed by
looking at the messages that individual tools produce. I had access to
the entire repertoire of QAC diagnostic messages but not to those of the
LDRA tools, which was understandable in the circumstances but
nonetheless unhelpful.
As it happens I am currently working my way through the C11 standard in
connection with one of my current back-burner projects. But, by hook or
by crook, I could probably get the current C11 document into MS Word and
then do another N0228 style document that I would be happy to put into
an open-source coding standard project. I expect, however, that this
would elicit vigorous objections from the current MISRA C working group,
not to mention various (IMO incompetent) sources within
ISO/IEC-JTC1/SC22/WG14, where there seems to be no culture sympathetic
to - or even technically aware of - the needs of critical systems
development.
Having seen how MISRA C has gone since 2002, I am singularly unimpressed
by the results and have, I am afraid, very little confidence in the
ability of that working group collectively to make the kind of technical
progress with the standard that would make it robust enough to be
acceptable for SIL3/4 work (which it is nowhere near right now). As
regards the C standard, my confidence in WG14 is not describable in
polite terms. These days I regard the processes of international and
industry-sector standardisation as dysfunctional and currently incapable
of producing either languages or coding standards that are truly suited
to the highest levels of system criticality (SPARK Ada being a lone
commendable exception).
On a more positive note, I am very impressed with French work in this
area on analysis tools, notably Frama C and AbsInt - the commercialised
version of Astree. If the developers of those tools have pressed ahead
because they have given up on standardisation dominated by a single,
delapidated, national technical culture, then I wish them a huge "bonne
chance" (which, coming from a deeply anglo-sceptic Welshwoman, is about
what you should expect).
Tin hats on and head to the nuclear bunkers,
Olwen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.techfak.uni-bielefeld.de/mailman/private/systemsafety/attachments/20180918/1f22fa0a/attachment-0001.html>
More information about the systemsafety
mailing list