Fri, 23 Nov 2007

Multics source reveals le jetteur des gazongues

The Multics operating system project started in 1965, the last host running it was shut down in 2000, and last week its code was open sourced. It was and still is a very influential system. The Multicians.org site gathers a wealth of information on Multics and lists those who contributed to it.

I have been lucky to encounter Multics when a student and experimented with this OS while learning about computer science. Even though students were only supposed to use tedEmacs soon became my favourite editor (I eventually got a fast modem with a throughput of 1200 bits per seconds so that I could use Multics Emacs from home as well as when at the University). One amusing defect I encountered was a reproducible way to crash Multics Emacs so that it would fill the screen with the word ‘pgazonga’. This word stuck in my mind.

Ten years later, while working at EXE Magazine, I got in touch with Bernard S Greenberg, the author of Multics Emacs, to eventually ask him ‘Do you remember this word? Does it have any meaning?’ Here's Bernie's reply as published in the September 1996 issue of EXE Magazine:

Mais certainement!

This will require some familiarity with Lisp. I doubt it ‘filled the screen’ with it, it probably mentioned it in an error message.

Lisp supports a facility called catch/throw, which effects a nonlocal transfer of control, from an active environment to a calling environment, aborting all called environments in between. The form which invokes this looks (in Maclisp) like this:

(throw value foobar)

and the form

(catch (do-this-here) foobar)

returns either the value of (do-this-here) or the value of value when the throw above is evaluated someplace within the execution of (do-this-here).

The symbol foobar (in this case) is known as a ‘catch tag’, and is used to associate catches with throws.

Now for the specifics:

‘Gazonga’ is a comic-strip phony-Italian word probably dating from the 30's or 40's. It might have occasionally shown up in my childhood (born '50) in old movies or comics. It has no meaning as far as I know, except it sounds Italian and colourful. Perhaps somebody might say it to accompany a punch in the nose or other crude violent act, the wave of a handkerchief over a magician's hat, or some other situation appropriate to a talismanic utterance. It is what today would be called ‘Manga word’ in Japan.

In Multics Emacs, the catch tag for ‘top level’, ie, the command loop, was ‘gazonga’. I probably chose this term because it evoked an onomatopoeic sense of a speedy projectile being shut downward, in this case, control, from the deep levels of Emacs execution to the top-level command loop. It should never have been visible to anyone, even extension writers, because the primitive (command-abort) was provided to throw it, and it's no one's business who catches it.

Multics Emacs, like its author, is very fond of foreign-language terms and expressions (language being one of my life-long interests), and included a panoply of functions (let alone code comments) borrowing from German, Latin, and French, but most of which (but not all!) were invisible to the extension writer (let alone end-user). A documented variable (der-wahrer-mark) was even, as can be seen, (inadvertently) in incorrect German syntax (should be ‘die wahre’).

So the internal function that threw to command level, that threw gazonga, as it were, was named jetteur-des-gazongues, the latter being what I assumed the reasonable translation of this non-term into French.

Now when the minibuffer was up, and some command caused an abort, ie, called (command-abort), this normally would be caught by the minibuffer, so that editing in the minibuffer could continue – the minibuffer's recursive command level would set up a recursive (catch ... gazonga) that would trap these aborts.

But in those days it came to pass that this was found not to be adequate - when you type ‘control g’ to abort out of the minibuffer, you do not want it to be caught by the recursive catch. So for this, I invented ‘les petites gazongues’, the ‘p’ is for ‘petites’, and hence ‘pgazonga’ – the ‘petites gazongues’ were continued ‘smaller’ and more agile than the regular ones because they deftly slip through a catcher of ‘regular’ gazongas, such as the net set up by the minibuffer, and sink all the way down to the bottom, ie, top command level (pardon the upside-down confusion, Multics was highly ‘stack oriented’, ie, top of stack = more levels into code). So control-G invoked the function jetteur-des-petites-gazongues to throw back to top level.

Of course, the were supposed to be caught by top level, and that's how it was all supposed to work. The bug you are somewhat belatedly reporting is almost certainly some esoteric case (during startup, perhaps?) wherein the catch for petites gazongues (pgazonga) was not set up, and a throw to that tag failed to find a catch, and hence the error that you probably saw.

Have I made myself perfectly clear?

Reader Robert Sproat contributed the following additional etymological data (found ‘utterly fantastic’ by Bernard Greenberg) in the October 1996 issue:

Bernard Greenberg's letter explaining the pgazonga message in Multics Emacs was fascinating and amusing, but Bernard might care to know, as a self-confessed language buff, that ‘gazonga’ did not originate as a comic-strip phoney Italian word from the 30's or 40's. It's cod German and dates from the First World War.

In the same way that homecoming Tommy Atkins Franglaised countless French idioms (eg, ‘ça ne fait rien’ into ‘San fairy Ann’), he changed Jerry's exclamation of Gezundtheit! when someone sneezed (roughly our ‘Bless you!’) to ‘Gazonga!’ or, more commonly, ‘Gazonka!’, ‘Gazonks!’ or even ‘Bazonka!’ This has long since died out of colloquial English but used to be very widespread and survived for many decades.

As late as 1960 or so in darkest South Pembrokshire, my mate's seventy-something Grandad would still merrily cry ‘Gazonks!’ if you sneezed near him, And at around the same time, Spike Milligan published a poem starting:

Say Bazonka! every day!
That's what Grandma used to say

Hardly IT-related, but interesting, ja?

Forward to November 2007, when the source of Multics is released, including that of Multics Emacs and one can start to hunt gazonga, pgazonga, gazongues and petites gazongues in the source tree:

Small historical note: since these events, ‘gazonga’ has evolved in some ideolects to mean ‘Incredibly large, voluptuous breasts’. As evidenced by the fact that this code (and 1996 reportage) were unremarkable at the time, it was not common parlance as that then.

(Another software archeology spelunking I've been involved with for close to twenty years is open sourcing Microsoft's original Basic 4K.)

SMALL HISTORICAL NOTE ADDED ON 2007-11-23
FIRST PUBLISHED ON 2007-11-14

websiteblogblog archivenews feedfeedback