Note: I am a founding and voting member of both the original /usr/group,
IEEE P1003 (a.k.a. POSIX), and a commenter for ANSI X3.159-1989 (*a.k.a.*
C89). Heinz Lyclama who is also on this list, was chair of the former and
also a founder of P1003.
Below are, of course, my opinions and my memory of times. Heinz please add
color/corrections as appropriate.
On Wed, Jun 26, 2024 at 1:56 PM segaloco via TUHS <tuhs(a)tuhs.org> wrote:
Good morning, I was wondering if anyone has the scoop
on the rationale
behind the selection of standards bodies for the publication of UNIX and
UNIX-adjacent standards. C was published via the ANSI route as X3.159,
whereas POSIX was instead published by the IEEE route as 1003.1.
Different groups and functions. More in a minute.
Was there every any consideration of C through IEEE
or POSIX through
ANSI instead?
Not really; each>>generally<< had a role that the other did not, although
those lines can and have blurred.
Is there an appreciable difference suggested by the
difference in
publishers?
Yes -- again, more shortly.
In any case, both saw subsequent adoption by ISO/IEC,
so the track to an
international standard seems to lead to the same organizations.
Right, but you are ahead of yourself.
Per Wikipedia:
ANSI was most likely formed in 1918, when five engineering societies and
three government agencies founded the American Engineering Standards
Committee (AESC).[8] In 1928, the AESC became the American Standards
Association (ASA). In 1966, the ASA was reorganized and became United
States of America Standards Institute (USASI). The present name was adopted
in 1969.
Prior to 1918, these five founding engineering societies:
- American Institute of Electrical Engineers (AIEE, now IEEE)
- American Society of Mechanical Engineers (ASME)
- American Society of Civil Engineers (ASCE)
- American Institute of Mining Engineers (AIME, now American Institute
of Mining, Metallurgical, and Petroleum Engineers)
- American Society for Testing and Materials (now ASTM International)
had been members of the United Engineering Society (UES).
Leaving out a >>lot<< of detail, but under ASA was their directive:
the *Accredited
Standards Committee X3 *
This means that the US government, particularly the US War Department (late
DoD), would accept their recommendations. However, a published set of rules
for how standards would be created, agreed upon, *etc*., for the USA became
established.
One of their early roles was creating standards for the computer industry,
such as what would become ASCII,* a.k.a.*, ASA X3.4-1963, and ASA X3/INCITS
40-1966 - 9-track mag tape.
One of the things the folks at X3 had started working on we standards that
allowed program* interchange* between different manufacturers, although
allowing manufacturers to be independent and add their own features but
keep a core that a programmer could rely upon. So, their purvey included
creating standards for FORTRAN, Algol, Cobol, and later C. They also
developed test suites for many of their standards and offered services to
firms like computer manufacturers to certify that their products meet the
standard. Thus, a program that worked when compiled under different
manufacturer compilers could be written.
Note that AIEE/IEEE was a founding member of ASA, but it eventually became
an accredited standards body independent of ASA/ANSI. The subtle
difference was the idea of "sameness," which said this is functionally the
same as something else made by two different electrical manufacturers and,
as a result, could interoperate between them. This was important to the
US DoD because they wanted more than one place to get similar products, at
least ones that could play well together. So, they became where things
like networking, power, *etc.*, were defined and agreed upon. Of note,
independent of IEEE, we were testing groups, but if you made an error, it
was basically self-correcting -- people stopped using your product when it
was discovered you could not handle back-back ethernet packets at full
speed.
So what happened...
We graduated a bunch of young engineers of my generation who know C and
UNIX. AT&T has made the sources to both technologies "open" and
freely available (libre as opposed to beer). We take the knowledge with
us, and they both start to be cloned. Since the microprocessor came in
vogue around the same time, retargeting the C compiler at many places like
Universities made sense - I did it (poorly) for the Dennis' compiler for
what would become the 68000 @Tektronix in the summer of 1979. But if you
look at the USENIX tapes from those times, you will see many different
developer tools for those processors. However, since the AT&T tools were
licensed, several implementations grew that were mostly, if not 100%, clean
of any AT&T's IP.
Since there was no standard for the language itself, and the processors
were not PDP-11, many differences crept into the different compiler
implementations. The biggest was support for the x86 and target platforms
such as CP/M and DOS, which did not store files in the same format as UNIX
and differentiated between text files and binaries like earlier
12/18/36-bit systems from DEC had.
In the early 1980s, a group of compiler firms, originally from the PC
business, applied to set up and create the ANSI X3.159 committee. [Thank
the Lord, Dennis agreed to join it too, as he could rein in several of the
worst proposals like near/far pointers, although the terrible text file
support leaked]. It was a very slow process since a standard did not come
about a vote until 1989 and was agreed upon until 1990.
Meanwhile, in UNIX land there, USENIX had started [see my paper: C.T. Cole,
UNIX: *A View from the Field as We Played the Game*, October 19, 2017, Le
CNam – Laboratoire, Paris France], but that was primarily an academic
organization. Firms like manufacturers DEC, HP, Tektronix, and IBM, as
well as ISVs such as Heinz's Interactive System Corporation and Microsoft,
needed an organization that focused more on their needs as commercial
ventures. /usr/group (which was later re-branded as Uniforum) was created.
For many reasons (many of which have been discussed here), the
manufacturer's versions of UNIX had begun to differ. But they had a common
language C, since many, if not most, used AT&T licensed C compilers, the
compilers' input syntax was already mostly common, but one of the things
that this group realized was it was still "work" for an ISV to move their
UNIX based application between systems and they needed something more than
just a language standard.
To address this need /usr/group, formed a standard committee under Heinz's
leadership. In 1985, we published the first UNIX standard. One of the
members of the group, Jim Issak, who then was from another small
manufacturer building a system with a UNIX-like OS, Charles River Data
Systems (CRDS - BTW: pronounce that and smile -- marketing people are
wonderful), realized that a /usr/group created standard was helpful to us
in the USA marketplace since /usr/group was not accredited and thus our
work would not be useful to be sent to the US Gov much less and alter
International standards body such as ECMA or ISO.
BTW: since our OS's were already getting different beyond the system call
layer, we decided to start with just the system call API which was mostly
common, plus agree to an interface standard to exchange magnetic media. But
this is where things like the file <unistd.h> come from to help make the
differences contained in a manner that a recompile allowed code to move
from one vendor's system to another.
By the early 1980 my former colleague, Maurice Graubie from Tektronix, had
been the chair of the IEEE 802 committee, which had published its set of
standards. BTW the number.X stuff raised huge hackles at IEEE at the
time. It had never been done. Maurice had come up with solution as a way
to keep the 801 standard together when it was beginning to diverge and fall
apart with the Ethernet folks on one side and the IBM token ring folks on
the other.
Since the OS was similar to other electrical standards, allowing one
manufacturer to build something the US government buys and knowing they
could get something similar from someone else, Maurice introduced Jim to
the folks at IEEE. Jim succeeded in putting together all of the paperwork,
getting the proper sponsorship from IEEE institutional members, and forming
a committee to create IEEE Proposal 1003.
As the next /usr/group meeting approached, we were already starting to work
on a revision. Jim explained the formal IEEE process. We officially voted
to disband that meeting and reconvene as IEEE P1003, where Heinz graciously
handed the gavel to Jim. It also set us back a bit because the /usr/group
document was not in a form that IEEE could accept. So the first task was
the rewrite (and use their voting process) to have it accepted. But because
of Maurice's great compromise for the 802 committee, we started by saying
this would be the first of N standards,* i.e*., 1003.1 for the system
calls, and we would (like 802) create later standards for things like the
commands. I know that both Maurice and Jim had a little pushback by IEEE
NYC, but I am thankful that a good idea prevailed.
It's possible ANSI might able to do the same thing that IEEE did. But the
difference is that members of the/usr/group were all institutional members
of IEEE, and the style of things we needed to do at the time was really the
sort of thing IEEE was already accustomed to doing. As for the language,
since ASA/ANSI was already doing things there - that made sense.
BTW: it has been observed that IEEE is behind VHDL - which is a hardware
description language. But against this more in their world -- it pushed
to silicon manufacturers, so you know IP can be moved between different
fabs. We can argue that it's a language, and ANSI would have been a good
place for it.