C language now truly universal

Discussion in 'C Programming' started by kerravon, Jan 1, 2011.

  1. kerravon

    kerravon Guest

    Open letter/release announcement/tribute to Dennis Ritchie

    To: Dennis Ritchie
    From: Paul Edwards
    Subject: C language now truly universal
    Date: 2011-01-01

    Hi Dennis.

    Happy New One-based Decade (personally I'm a zero-based
    fan, just like your C language).

    Today, the first day of the new decade, I have just
    formally released GCCVSE, a C compiler for z/VSE (an
    IBM mainframe operating system), and would like to
    dedicate this release on this day to you and the
    language you created, and which most of my adult life
    has revolved around. Note that I had to take 2 days
    off work and was making last-minute code changes and
    finalizing packaging on New Year's Eve to get this
    out by today.

    I'm not sure how familiar you are with the predecessors
    to z/VSE, ie DOS/360 and then DOS/VS (which was released
    the same year - 1972 - that you were fleshing out the
    details of the C language, more-or-less). That operating
    system was very far away from Unix, and I assume you had
    little reason to deal with it, and more important things
    to do.

    I can tell you that I was not at all familiar with any
    of these DOS versions until a couple of years ago. The
    reason for that was that despite DOS/VS having been
    popular in its day, today it is a barely-known, obscure
    operating system that for whatever reason has resisted
    the calls to simply die peacefully.

    Unfortunately, there's the rub. It remains a commercially-used
    operating system even today. It satisfies all the below

    1. Currently in commercial use.
    2. Used by a company other than the owner.
    3. Has a documented programming API.
    4. Has a file system of some sort.
    5. Has compilers, assembler and linker.
    6. Currently has programmers employed to write software
    using those compilers/assembler/linker running on that
    machine, not merely as a cross-compiler target.
    7. Programmers use an editor on that machine to write
    their code.
    8. Manages a variety of hardware, such as tape, disks,

    As such, it can't just be willed out of existence. It
    may be the black sheep, but it's still there, right now.

    As such, for C to be a universal language, it must be
    available on z/VSE.

    The good news is that IBM has a reasonably-priced and
    fantastic C compiler for z/VSE, and has had for more
    than a decade (on the predecessors). It's a must for
    every organization that wishes to program in C.

    But there's the next rub. C has never been popular on
    IBM mainframes. Cobol is used almost exclusively. In
    the unusual circumstance that Cobol isn't used, it's
    PL/1 instead. C meanwhile is a latecomer and a bit of
    a black sheep, although that is less true these days.
    So an organization may well have no interest in C,
    and thus no reason to buy a C compiler, and it is
    difficult/impossible to cost-justify buying one.

    Which means that a hypothetical (actually, not that
    hypothetical, given that as recently as the last week
    someone mentioned that management had decided to
    axe their z/OS C compiler to save money) programmer, who
    loves the C language, regardless of why or how that came
    about, may one day find himself being asked by his
    boss (current or future) to program on a z/VSE machine.
    One that doesn't have a C compiler, since it doesn't
    come standard, and isn't part of the core business,
    and a solitary C programmer is unlikely to be able
    to get the required purchase order raised and approved
    in the first week he arrives to do the programming
    work. Or even the first year. Even if he has a collection
    of C utilities, originally written on a multitude of
    platforms, yet all conforming to ISO/IEC 9899:1990,
    so all will work on z/VSE, and considers them to be a
    productivity aid, it is still unlikely that the
    programmer will be able to get it cost-justified.

    The situation changes radically when there is no cost
    and no paperwork involved. When the question is
    transformed into "would it be OK if I load some
    free, open-source software onto the system to help
    me with the work you have assigned me?", there's a
    much higher chance of getting a reply of "sure,
    that's fine by me". A conversation that will typically
    take place exclusively in the programming department,
    no administration people involved. Yes, theoretically
    the answer could still well be "no", but it will be
    due to an unrelated policy that can't be avoided,
    rather than a cost barrier.

    So now we have the good news that there are already
    free, open-source C compilers available. There have
    been for decades. They may or may not be as good as
    their commercial counterparts, but programmers will
    rarely be in a position where the differences would
    be such that they would need to e.g. rewrite their
    utility in Cobol because the free C compiler wasn't
    good enough to do the job.

    Back to the bad news. The free C compilers don't
    support every single platform. It depends what CPU
    you are trying to target. In addition, even if the
    C compiler targets your CPU, it doesn't mean that
    the C compiler itself will run on your platform,
    because it may not have been written in a portable
    manner, e.g. it may have assumed that the characters
    'A' to 'Z' were consecutive in their binary representation,
    which is not true on an EBCDIC machine. This prevents
    it from ever being a normal hosted compiler. Next,
    even if it was written portably, there is still the
    C runtime library that is required. fopen() isn't
    going to magically know the documented API of your
    host machine.

    Now for some personal history. I started working as
    a tape jockey, I mean, Assistant Computer Operator,
    in 1986, when I was 18 years old. The system was
    MVS. I had prior programming experience both in my
    first year of uni (electrical engineering - which I
    hated), but mostly on my Commodore 64 (where I had
    learned assembler also). In the area that I worked,
    there were obviously more experienced people than me,
    and at least one of them had programming experience and
    appeared to be quite knowledgable. I thought I could
    bypass a lot of personal research by simply asking
    him "what is the best computer language?".

    His answer was NOT "C". His answer was a question back
    to me - "what is your definition of 'best'?". My answer
    to that was "I want to be able to write a program today,
    and regardless of how computers change in the next 10,
    20, whatever years, I want that program to be able to
    still run on that new system, without needing to change

    THAT was when he answered "C" without hesitation. He
    even mentioned that where there are differences, it
    normally just involves some minor header file changes
    for the different machines. I was sold! So off I went
    to learn and use the universal language for computers.
    It wasn't long before I bumped into my first barrier -
    we didn't actually have a C compiler at work! So much
    for being the world's universal language. How frustrating
    is it when you wish to prepare for the decades ahead
    and can't even start?

    Fortunately I changed positions (to be a trainee systems
    programmer) soon after, and I had a nice boss who was
    willing to fill out the paperwork to get a C compiler.
    And it was truly a beauty to behold - especially when
    it changed from being a Program Offering to a Program
    Product in the form of C/370. I would look at the
    assembler listings and find code that was too complicated
    (for maintenance purposes) to be the sort of thing that
    would be hand-coded, but the compiler was free to do as
    it pleased. So in some instances, generated better code
    than I would write myself, at least performance-wise.

    But eventually I changed companies, and found myself
    back where I started - still on MVS, but without a C
    compiler again! Back to handcoding stuff in assembler
    that could so easily have been generated. Just what
    was the barrier to having a universal language for
    computers? Shouldn't someone "in charge" be "doing
    something"? Why would there be a "no child left
    behind" policy without a "no programmer left behind
    policy" for when the child took up programming?!

    I spent what appeared like the next 40 years wandering
    around the Sinai looking for the guy in charge of this
    mess (as well as the famed "dropped quarter"). My
    travels led me to GCC numerous times, which was
    actually able to generate S/370 code since about
    1989, around the time I was stuck without a C compiler
    (although that new company did eventually buy SAS/C,
    another thing of beauty). However, even though GCC
    was generating S/370 code, there were four problems:

    1. It came with a notice that the software (approx
    400,000 lines of C code, which we now know generates
    about 700,000 lines of S/370 assembler) itself didn't
    work on S/370.

    2. Even if it could cope with the hardware, it still
    wasn't written with the MVS API in mind.

    3. Even if the GCC application was written in 100%
    C90, someone still needs to write the C runtime

    4. The S/370 code generator had never been in a position
    of being tested in anger, and was riddled with bugs.

    In 1994 I set about on task number 3, because I thought
    it was more valuable, achievable and strategic to
    concentrate on that, while waiting for the guy in charge
    to eventually show up. I had this in a sufficiently
    operational state by 1997, working with IBM's C compiler.

    The guy in charge appears to have been Dave Pitts, and
    he mostly took care of the first issue, by around 2002.

    Another thing happened in this timeframe - the Hercules
    (IBM mainframe emulator) became available, plus old public
    domain IBM mainframe operating systems became available.
    One of the beauties of IBM operating systems is their
    upward compatibility. So if you coded according to the
    rules of the day, your executables would continue to

    With the enormous help of Phil Roberts and Dave Wade,
    and starting in 2003, I addressed issue 2, by working
    around the GCC Posix assumptions, and also dealing with
    numerous other environmental considerations, and by
    2004, GCCMVS was born, and self-compiling natively on
    MVS. MVS (aka z/OS) was by far the most important of
    the three general-purpose IBM mainframe operating

    By 2006, the only other operating system of any real
    relevance - CMS - was also covered, mainly via the
    appropriate PDPCLIB changes (ie issue 3).

    By 2009, issue 4 had been dealt with, as I finally
    had the skills to fix the machine definitions myself.

    Also in 2009 I asked in comp.lang.c if anyone could
    name a commercially used operating system besides
    z/VSE, that didn't have either a C compiler as
    standard (or that it would be unthinkable that one
    would not be available), or have a free one available.
    None could be named.

    So all that remained was for z/VSE users to please
    power off their systems, so that my mission in life -
    to ensure that no operating system would be left
    behind - could finally come to a close.

    By 2010 I finally cracked and decided to bite the
    bullet and learn enough about VSE (and I can honestly
    say, this is the most hostile API I have ever
    encountered - makes MVS look like a walk in the
    park, and took a while to encapsulate so that C
    programs could run unchanged as God/Dennis Ritchie
    intended - although the encapsulation of MVS took
    far longer, and was a precursor). And that's what
    this release is about. The final nail in the coffin.
    Absolutely everything is covered, as far as I know.
    No programmer need ever fear going to a job where
    he can't point out that a plethora of C tools exist,
    and are already supported on this platform, if he
    is just given 5 minutes alone with a broadband

    When I started writing this message, I was still
    doing the MVS-targetted build - it takes about
    2 hours to get GCC to recompile itself on my laptop
    with the Hercules emulator. And that's a minimalist
    rebuild, avoiding the bison generation, and cheating
    (but still kosher) by using the PC natively to do
    a stage. Normally I would do the full regeneration,
    but this release the focus is on GCCVSE, which,
    while natively hosted, is not currently set up
    (supporting scripts etc) to rebuild itself. It is
    however, fully functional. I completed the message
    shortly before the CMS build finished, leaving just
    the VSE build, and with www.worldtime.org informing
    me that in less than 2 hours, the rest of continental
    USA will have ticked over.

    So I will upload the software when Los Angeles ticks
    over, send this email to you, wait 1 hour, then post
    everywhere else. I doubt that when you were inventing
    the C language you had any idea just how much impact
    it would have on the world. Nor how much it would
    guide an individual's entire life (career spent
    wandering around new computer systems to find out
    what their C compiler looked like). But the story
    will not be ending there, as I have used GCCMVS
    to write a new MVS-API-compatible operating system
    (PDOS/390) in C, so that as far as possible I can
    stick to clean living - ie using an OS written
    in C, using a C compiler written in C, using a C
    runtime library written in C, and using an editor
    written in C (I do my editting on Windows - written
    in C - before uploading the code via emulated tape
    to the mainframe in question - although that's
    mainly so that I can use a source control system
    written in C, rather than to avoid using a
    mainframe editor not written in C).

    Anyway, I realise that you nor anyone much else has
    a use for it, but for posterity, the GCCVSE compiler
    can be found here:


    And will also be part of VSE/380, a 31-bit variant
    of DOS/VS R34, available here:


    And for completeness, the C runtime library has its
    own project website too:


    I'd also like to note that none of the targets
    would be in the state they are currently in if it
    weren't for the assistance of members of the
    Hercules community - e.g. Gerhard Postpischil's
    rewrite of the assembler portion of PDPCLIB's
    MVS target.

    So thankyou Dennis, and good luck with whatever you
    are currently doing, which hopefully isn't writing
    any new languages, since in practice it took many
    many years after the C standard was released before
    the C compiler I was using at work - even on Unix -
    would e.g. do a free(NULL) without coredumping.
    kerravon, Jan 1, 2011
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Chris Kettenbach

    Truly Sign out a user

    Chris Kettenbach, Oct 14, 2005, in forum: ASP .Net
    Ken Cox [Microsoft MVP]
    Oct 15, 2005
  2. Harald Hein
    Andrew Thompson
    Aug 17, 2003
  3. Ian Pilcher

    A truly uninstantiable class?

    Ian Pilcher, Oct 13, 2005, in forum: Java
    Ross Bamford
    Oct 16, 2005
  4. Jay Laury
    Jay Laury
    Nov 10, 2004
  5. Ron Stephens
    Ron Stephens
    Apr 12, 2004

Share This Page