The opinions expressed here are my own, although I suspect that they are shared by several (but by no means all) of the very fine people I was privileged to meet and work with during the standardization effort. Although the prevailing impression may be a sad one, an enormous amount was learned, and some great friendships were forged.
The official home of the ISO Modula-2 standardization working group JTC1/SC22/WG13 is now hosted at http://sc22wg13.twi.tudelft.nl/ a site maintained by Cornelis (Kees) Pronk, a devoted founder member of the group, of which Martin Schönhacker of Vienna is the present convenor.
The definition modules and the concrete syntax are available from this home site, but the Modula-2 standard itself (ISO/IEC 10154-1) is only available at a price from national standards bodies or ISO (the publisher). However, for those brave enough to want to get a feel for this enormous document, an earlier version (markedly different in places) of the draft is believed still to be available as a Latex document by FTP from the site ftp://ftp.mathematik.uni-ulm.de/pub/soft/modula/standard/draft4/.
Classical Modula-2 was developed by Niklaus Wirth at ETH in Zürich, Switzerland in the late 70's. He described this language in a classic text Programming in Modula-2, published by Springer-Verlag in German and in English, which ran to four editions, each, somewhat infuriatingly, describing a subtly different dialect of his brainchild. Devotees of classical Modula-2 will tell you that of these editions of "PIM", the third edition, which emerged in 1985, was probably the best. In designing Modula-2, Wirth built on the strengths of his earlier language, Pascal, and tried to eliminate some of its weaknesses, aiming in the process at creating a type-safe language that would be suitable for large scale projects and systems programming, one that would support data abstraction, one that could be used for teaching, and one that could be compiled efficiently. As with Pascal, his brilliant efforts at achieving all of this aroused great interest, and soon several implementations, and a variety of textbooks followed his own. Unfortunately the original description of the language was not rigid enough; these implementations tended to diverge in their interpretation of the semantics of the language, and to introduce extensions, and, of course, this led to portability problems. Furthermore, Wirth had probably not paid sufficient attention to defining a really useful set of support libraries, with the inevitable result that manufacturers produced a variety of incompatible modules. Of the situation that persisted by the mid 1980's, Susan Eisenbach of Imperial College, London, remarked perceptively that "Modula-2 would be everyone's ideal language if it had just one more feature. Unfortunately, everyone has a different idea of what that one feature should be".
By 1987 the problems with Wirth's definition were quite well understood. Based on some pioneering efforts at rationalizing the inconsistencies in PIM, which had taken place in the UK and the USA, a committee of ISO/IEC, with the impressive moniker JTC1/SC22/WG13, comprised of delegates from several countries, met in Nottingham, England on April Fool's Day, 1987, for the first of a series of meetings aimed at bringing about a standard description of Modula-2 and the definition of a set of standard library modules. The project was ambitious; probably too ambitious. Rather than producing only a natural-language description of the semantics of Modula-2, the group voted to produce one that would be augmented by a formal definition written in VDM-SL (Vienna Development Method - Specification Language), a formalism for giving a precise definition of a programming language in a denotational style. While this mammoth effort of producing VDM-SL was going on (largely the work of a single individual, Derek Andrews of Leicester University), the group fell into the common trap of aiming at a shifting target. With each new meeting would come a plethora of suggestions for extensions and deletions, revisions and reversals of previously agreed decisions, and the like. By 1992 many of the original members had become totally disillusioned, and had left the group. To the credit of those few that remained, a base language standard (ISO/IEC 10514-1) was eventually adopted in June 1996 by most of the countries eligible to vote (with the notable exception of the USA, Japan and the Netherlands), albeit for a language that was significantly different from Wirth's original, and with a set of library modules significantly different from those suggested in PIM.
Since that time a few members have pressed on with efforts to standardize still further extensions, related to Object Orientation, Generics, POSIX bindings and the interfaces to other languages, and details of these can be found from the home site.
During the group's life time a huge number of documents were produced - at least a metre or two of shelf space - and megabytes of electronic mail flew around at peak times. Very little of all this prodigious effort became available to the general public.
Readers who are interested in the sorts of issues that were identified early on (before the tendency arose to invent a language, rather than standardize one) may like to read an article by one of the group's most perceptive members, who had spent an enormous amount of time analyzing PIM and discussing its shortcomings with the original USA and UK groups:
B. Cornelius: Problems with the language Modula-2, Software, Practice and Experience 18(6), 529 - 543 (1988)
A preliminary report on the changes that were to find their way into the standard may be found in
M. Woodman: A taste of the Modula-2 standard, ACM SIGPlan Notices, 28(9), 15-24 (1993).
Information on the final standard can be found in two highly readable articles by two members who made sure that the project actually was completed when almost everyone else had lost interest:
C. Pronk and M. Schönhacker, ISO/IEC 10514-1, the standard for Modula-2: Process Aspects, ACM SIGPlan Notices 31(8), 74-83 (1996}
M. Schönhacker and C. Pronk, ISO/IEC 10514-1, the standard for Modula-2: Changes, Clarifications and Additions, ACM SIGPlan Notices 31(8), 84-95 (1996)
C.Pronk, M. Schönhacker, R.J. Sutcliffe, A. Wiedemann, Standardized Extensions to Modula-2, ACM SIGPlan Notices, 32(11), 34-48 (1997)
Postscript copies of these articles are available in UNIX gz format from the WG13 home site (about 42K each; note that the material is actually copyright).
An interesting accessible paper on how compilers might be tested can be found in:
C. Pronk, Stress Testing of Compilers for Modula-2, Software - Practice and Experience, 22(10), 885-897 (1992)
C. Pronk and M. Schönhacker, Constructing Formal Language Definitions - Can we Manage? What can we learn from Modula-2 Standardization. Computer Standards and Interfaces 19(2), 143-154 (1998)
Some 12 meetings of WG13 have taken place since 1987. It is impossible to give a concise history of a process that was fraught with many technical and intricate arguments, but the following notes may be of some interest - allowing for some inevitable bias. Others who may remember what I have forgotten are invited to fill in some other angles!
Roger Henry was convenor of the group for the first six meetings, Mark Woodman followed for the next four meetings, Kees Pronk deputised at the next one, and Martin Schönhacker took over formally for the last one.
The first meeting was held at University of Nottingham, UK, 1 - 3 April 1987 (28 delegates, hosted by Roger Henry)
At this meeting some fairly major decisions were made that, with hindsight, set the stage for much that was to follow. The UK delegation had done a great deal of preparation in a long series of monthly meetings leading up to this one. Derek Andrews gave a presentation on the use of VDM-SL, which the UK team favoured, and, although alternatives were proposed (such as the use of simpler context conditions), the meeting took the decision to continue and complete the work which Derek had begun; however, with the proviso that the final standard should also contain equivalent English descriptions of what was being specified. Two of the issues that were to cause much controversy and debate were treated in some length. Roger Henry of the UK delegation had a proposal for an I/O library; so did Martin Odersky from Switzerland. Many delegates saw the UK proposal as complex, and favoured something more on the lines of immature proposals from the US that had seen the light of day in a journal called MODUS; Martin's proposal (which was later developed for publication in Structured Programming 10(2), 89-106 (1989) had some excellent points too, and Roger agreed to try to rework his proposal to incorporate the best ideas from this. The difficult matter of how best to deal with coroutines and prioritised modules (of particular interest to Don Ward) was also the subject of debate; one that was not to be resolved for many meetings to come. A proposal for a COMPLEX type was made and turned down (it reappeared several meetings later, of course). Perhaps the saddest feature, in retrospect, is that an attempt was made to define some "goals" for the process in terms of nice phrases like "SC22/WG13 resolves to adopt as its primary short term goal the standardization of Modula-2 as defined by Niklaus Wirth in "Programming in Modula-2". The committee recognises that both the language as defined by Wirth and existing practice contain ambiguities, machine dependencies and inconsistencies which need resolution and consequent minor change to the language. Other changes will only be considered in exceptional cases. It is the committee's goal to minimise such change and the consequent effect on existing Modula-2 code." But, although that wording came close to being accepted, in the end no consensus could be reached on this, and so the door lay open for the start of a process that would ultimately see added to the language several new key words, several new standard types, value constructors, five "system" modules in place of SYSTEM, and so on.
The second meeting was held at the University of Nice, France, 11 - 15 January 1988 (26 delegates, hosted by Jacques Farré)
By this stage the very Dedicated Derek had produced a lot more VDM-SL, and much of the meeting was taken up with nit-picking issues on the semantics of import/export, variables, expressions, type-casting, arithmetic operations and so on. More dangerous, although it was not realised at the time, was an embryonic proposal to introduce "value constructors" as perhaps the first of many rather radical extensions. A great deal of debate arose over library issues. Albert Meier and some others came forward with proposals for small, simple libraries, but these tended to be steam-rolled aside. Much time was taken considering a completely reworked version of the UK proposals on I/O, which still did not find general acceptance, much to Roger's frustration. And, without knowing how contentious this was all to become, there were modest proposals for introducing modules for allowing some simple exception handling to be performed in Modula-2 programs. An observer at the meeting was Niels Jensen, from JPI (TopSpeed) Corporation, who distributed copies of the very early release of his product to those delegates who wanted them. Not all did; some of the other delegates were also developers and distributors, and rather resented what had happened.
The third meeting was held at the spectacular Timberline Lodge on Mount Hood, near Portland, Oregon, USA, 22 - 26 August 1988 (26 delegates, hosted by Randy Bush)
More controversial discussion took place here. The US delegation had come up with (unfortunately rather immature) counter proposals aimed at simplifying the top levels of the I/O library. The net effect, of course, was that Roger offered to go back and come up with yet another proposal based on his own baroque one! The Swiss had come up with a nice simple two-page proposal for a minimal Strings library, and the UK with a 15 page proposal for a rather longer one. There was more heated debate over import and export, priority and protection, value constructors, and, of course, over exception handling and the complicated interactions of this with coroutine handling and program and module termination, for by then it had been decided that modules should not only be able to provide prologue code, they should be able to provide some form of epilogue code as well. The SYSTEM module started to draw increasing attention, another section of the standard that was to be drafted and redrafted for years to come..
The fourth meeting was held at the Johannes Kepler University of Linz, Austria, 10 - 14 July, 1989 (25 delegates, hosted by Günther Blaschek)
By this stage all the hard work put in by Derek Andrews, Don Ward and Roger Henry was starting to show very tangible fruit. The first working draft of the standard appeared (some 400 pages long at that stage) with potentially complete VDM-SL for almost everything besides some of the libraries. Roger presented yet another proposal for an I/O library, and this seemed at last to meet with some acceptance (but not by all, of course). Exception handling was starting to become a much bigger issue, but still no consensus could be reached on how best to incorporate it, or how best to incorporate module termination. And the poor old SYSTEM module was still being torn apart. The baroque Strings library proposal now ran to 23 pages; some other library proposals were less contentious, having been meticulously researched by Barry Cornelius.
The fifth meeting was held at the Open University, Milton Keynes, UK, 4 - 7 June 1990 (32 delegates, hosted by Mark Woodman)
Derek and company had really been working hard. After the fourth meeting they had produced a second draft proposal, and by this meeting the third draft proposal was ready. By this stage national bodies had also had time to make formal comments on the first and second drafts, and a lot of time was spent discussing and reacting to these, and drawing up "official" responses (all through the series of meetings attention had to be paid to formal requirements emanating from JTC1/SC22; at least in principle!). Unfortunately, perhaps, by now sides were beginning to be taken between a faction in the group who started to react with alarm at what they saw to be a never ending stream of extensions and complications, and who started to take up a very conservative stance (as it happened eventually, to little avail). The most obvious manifestation of this was to be found in two proposals for much simpler I/O and Strings libraries, which had been developed in some haste by the self-styled "Gang of Six" drawn of members from the US, Australia and South Africa (Chuck Bilbe, Thom Boyer, Randy Bush, John Gough, Tom Pittman and Pat Terry). This caused a great deal of friction, and a lot of diplomacy was exercised by Wolfgang Redtenbacher in getting the two sides to speak to one another. A proposal from Randy Bush that we should simply allow
FROM C IMPORT printf, scanf;
was one of the lighter touches, but his dramatic irony was missed by most. The Exceptions debate raged on; here, however, some agreement seemed to be reached on working towards a fairly simple model at last, based essentially on a setjmp/longjmp model suggested by John Gough. And, of course, the SYSTEM module caused more controversy. A more encouraging development was that from Kees Pronk, who was starting to turn his quiet and disciplined energies into trying to find ways of specifying quality checks for compilers, and to the development of tools for checking the mound of VDM-SL code that Derek continued patiently to hack at, while almost everyone else changed almost everything else.
It was at this meeting, I seem to recall, that a proposal was made to allow for "optional system modules". This was leaped upon by Rick Sutcliffe, who had seen in this a way to reintroduce his request for a COMPLEX type, which would clearly need some sort of compiler support if it were to be effective. In the end, however, some sanity prevailed. Optional system modules were seen as a most awful kludge. And so Rick finally got his way without much more ado - COMPLEX became another standard identifier, and Derek was sent off to draft a whole bunch more VDM.
The sixth meeting was held at the University of Tübingen, Germany, 1 - 5 July 1991 (30 delegates, hosted by Herbert Klaeren)
Once again, an enormous amount of editorial work had gone into producing yet another "BFD" (big, fat document, nearly 500 pages, and still devoid of all the VDM for the enormous I/O library) which, it was hoped, would form the basis of the "CD" (Committee Draft) of the standard. The various I/O groups had resolved most of their differences at last. A lot of very constructive work was done; the meeting split up for the first time into special interest groups, who haggled over finer points at great length - one of these redefined the SYSTEM module yet again. At this meeting it seemed that real progress was again being made, and various task forces volunteered to carry on the work afterwards - one of these, consisting of Barry Cornelius, Elmar Henne, Albert Wiedemann and Pat Terry spent the next three or four months in intense daily e-mail correspondence, analysing and rewriting almost all of the tightly constrained English in the hope of getting it to agree with the VDM-SL. However, the horrible matter of Exceptions raised its head yet again. Keith Hopper had made a fervent plea for doing it "properly" - by introducing new syntax and new key words, which up till then had met with no real acceptance as an idea (although it must be said that many of the proposals for "system" features had already come pretty close to the same sort of major surgery at Wirth's original language). So on the last day of the meeting a group spent a very happy afternoon in the warm sunshine of the town square, and invented and refined yet another whole new exception handling model. At least, that is what the rest of us thought and hoped they were doing!
After the meeting a great deal of e-mail flew to and fro about exceptions. By October, John Gough, implementation expert though he had repeatedly proved himself to be, had become so alarmed about the confusion that was building up that he withdrew his support for the Tübingen model of which he had been an architect, noting with despair that every possible sort of model had been advocated at one stage or another, and suggesting bravely that exceptions and termination proposals should simply all be scrapped for the base language standard.
The seventh meeting was held at the Technical University, Delft, Netherlands, 21 - 25 September 1992 (16 delegates, hosted by Kees Pronk).
A rather smaller group spent their time basically in two ways. The huge amount of work done by e-mail after the fifth meeting, and by Kees in checking the VDM-SL, meant that some of the members were able to get on very profitably tying up editorial loose ends. But there were still some very unhappy people. The afternoon in the sun in Tübingen, along with all the work that had followed it, had still left several people, like Kees Pronk, Wolfgang Redtenbacher and John Lancaster, very unhappy with the exception handling model and the way it interacted with priority, protection, termination, coroutines, and all those other minor features that Old Nick had stupidly chosen not to discuss in PIM - not to mention a whole lot of even more conservative people, who realised that the requirement of all the new keywords and so on would make PIM style Modula and ISO Modula into two very different animals. In fact there was even a proposal at about this stage that the language should be called Modula-92 (I think from Tom Pittman, about the only American left). In the end, some sort of compromise seems to have been reached - but not before yet more "system modules" had been required. All this left the drafters with still more work to do; worse, by then many people's energies were visibly flagging.
And, of course, there were those who still felt there was not enough. Proposals were laid on the table for introducing Object Oriented extensions. Sensibly, however, these were relegated to the status of new work items, and no attempt was made to press for them in the base standard. However, the standard was now destined to be a multi-part standard!
The eighth meeting was held at Trinity Western University, BC, Canada, 14 - 18 June 1993 (20 delegates, hosted by Rick Sutcliffe)
I could not get to to any meetings after the seventh (if you look at the history of our currency exchange rate against the currencies in the rest of the world you will see at least one reason why not!), and so have nothing to draw on but the formal minutes, which show that this meeting spent some time trying to tie up a few loose ends in the Base Language DIS document, and a lot more time discussing the OOP and POSIX proposals. Of the people present at the first meeting very few remained - Keith, Kees, Roger, Rick and Mark attended a few more meetings, but even they did not attend all.
The ninth meeting (the only one south of the equator) was held at Lake Wanaka, New Zealand, 4 - 8 April 1994 (12 delegates, hosted by Keith Hopper)
The main topic of discussion seems to have been the POSIX bindings proposal, into which Keith Hopper (the very genial elder statesman of WG13) had put an immense amount of effort. Unfortunately it seems to have ruined his health, for he was forced to withdraw shortly after that, and with this sad turn of events, the POSIX proposals fell away. Shortly after this meeting (in August) the BFD was finally made ready for submitting to ISO as a DIS (Draft International Standard) after more valiant work by Roger and Derek.
By December 1994 the results of the voting on the DIS were known. Some 22 countries had voted, with 17 yes votes, 3 no votes (US, Netherlands, Japan) and 2 abstentions, one of which was France. New Zealand did not vote. Some of us who had technically merely "observed" the entire process were ineligible to vote, of course; some of us wondered how so many yes votes could have been collected from many countries who had apparently shown no interest in the work at all.
In effect the main countries that had contributed were the UK, USA, France, Germany, Austria, Australia, Canada, New Zealand and the Netherlands, and, perhaps South Africa (but only with observer status). The draft of the standard recorded its principal author quite correctly as Derek Andrews, and indicated that Derek Andrews, Barry Cornelius, Roger Henry, Kees Pronk, Rick Sutcliffe, Don Ward and Mark Woodman had been the real team. They had certainly been very major players. However, the credits probably leave out a few of us who sweated blood while making detailed suggestions and revisions, but probably nobody cared very much.
The tenth meeting was held at the Vienna University of Technology, Austria, 31 October - 4 November 1995 (13 delegates, hosted by Martin Schönhacker)
By this stage discussion seems to have been limited entirely to the new work items - Generic Modula, Object Oriented Modula and so on. Some progress had been made on getting the last outstanding comments on the DIS for the Base Language Standard attended to, but not before Kees had put in a huge amount of last minute effort almost on his own to rescue it all from oblivion, and sadly, without being able to reach consensus on the last outstanding issues. (Kees noted that, given the votes it was sufficient to write a Disposition of Comments report, although while gathering the text related to the negative votes he had tried to convince Japan that their vote was unusual given their earlier lack of interest) So by June 1996 the base language standard was official.
The eleventh meeting was held at Oxford Brookes University, UK, 3 - 6 June 1996 (12 delegates, hosted by David Lightfoot)
In view of Keith's ill health, a decision was made to abandon the POSIX project in favour of one that would examine the bindings to C. Other discussion was held on OOP and generic proposals.
The twelfth meeting was held at Johannes Kepler University of Linz, Austria, 17 - 18 March 1997 (8 delegates, hosted by Martin Schönhacker)
This meeting also spent its limited time resolving issues that had been raised at the eleventh meeting, and resolved to go for DIS with the proposals on OOP and Generics. These DIS proposals have now also been accepted by a majority of those countries eligible to vote.
One notes with some amusement that what was left of the group decided to investigate the relationship with Java(TM). Oh well, if you can't beat them, join them!
Many of the people who contributed to the effort are worth commemorating. Here is a photograph of the WG13 standardization committee, taken in Linz, Austria, at their fourth meeting, in July 1989.
Tom Pittman (US) took the picture, and is thus not in it. Willi Steiger is clutching a much loved copy of PIM, which included Wirth's 33 page report, and Roger Henry, chairman at that stage, is holding an early draft by Don Ward of what was to become a standard document of about 700 pages.
The members present on that occasion were:
Back row: Rick Sutcliffe (CA), Mark Woodman (UK), Martin Schönhacker (AT), Wolfgang Redtenbacher (DE), Jacques Farré (FR), Pat Terry (SA), Franz Engelmann (DE), Barry Cornelius (UK)
Middle row: Günther Blaschek (AT, host), Derek Andrews (UK), Kim King (US), Willi Steiger (CH), Herbert Klaeren (DE), John Gough (AU), Frode Odegard (NO), Elmar Henne (DE), Stan Osborne (US), Benjamin Kowarsch (DE)
Front row: Keith Hopper (NZ), Albert Meier (CH), John Souter (UK), Roger Henry (UK), Don Ward (UK), Kees Pronk (NL).
Other active members of WG13 at the time, but who were not present at this meeting, included Randy Bush (US), Brian Wichmann (UK) and Zheng Guo Liang (China).
By this fourth meeting, Robert Firth (US), Chuck Bilbe (US), Don Baccus (US), Martin Odersky (CH) and Marius Schoorel (NL) had already lost interest.
Other members who attended at least a few meetings included Brian Wichmann (UK), John Lancaster (UK), David Lightfoot (UK), Dan Resler (IL), Eberhard Enger (DE), Martin Schleußer (DE), Albert Wiedemann (DE), Günter Dotzel (DE), Frank Bender (DE), Richard Thomas (AU), Peter Moylan (AU) and Steve Cater (US). And several other people contributed in small ways, but did not really have a sustained attendance at meetings.
Many of the original implementors of Modula-2 have not bothered to upgrade their compilers to comply with the new standard, preferring instead simply to abandon them. However, several more-or-less conformant implementations exist:
e-mail: John McMonagle
web: http://www.xds.ru/xds/ or
http://www.dct.com/~johnm/xds.html
(US mirror)
e-mail: Elmar Henne
e-mail: Norman Black
Details of these, and in particular, distributors of such products, are available in a Modula-2 FAQ maintained by Rick Sutcliffe which can be retrieved by anonymous ftp from the site ftp://FTP.twu.ca/pub/modula2/m2faq.html
Students of programming language history will be quick to observe that much the same "creeping featuritis" has characterized the efforts to standardize other languages, not the least of which was C++. However, C++ has had the combined weight of the UNIX and Microsoft communities behind it, and so the ultimate success of that project was less at risk.
Another standardization effort that lost support from some of its initial supporters was Algol-68, and readers may be interested in an extract from The Emperor's Old Clothes - the ACM Turing Award lecture by Tony Hoare, delivered in 1980, which draws some interesting parallels.
(written in 1991)
Ten little Modulans, keen to toe the line,
One went to Nottingham, and then there were nine.
Nine little Modulans thought casting sounded great,
One pressed for cast, old style, and then there were eight.
Eight little Modulans said "COMPLEX will be heaven".
One stayed with FORTRAN code, and then there were seven.
Seven little Modulans the FOR loop tried to fix,
Sixteen pages VDM - and then there were six.
Six little Modulans, exceptions felt should thrive.
One weakly RAISED a "no", and then there were five.
Five little Modulans, keen to add yet more,
Built five I/O libraries and then there were four.
Four little Modulans, on a formal spree,
Couldn't freeze the VDM, and then there were three.
Three little Modulans, Strings libraries did view,
One cried "still not enough!" and then there were two.
Two little Modulans said "Coroutines are fun".
HALT wouldn't terminate, and then there was one.
One little Modulan, dreadfully alone,
Soon he discovered C, and then there were none.