The HACTRN Once before a console dreary, while I programmed, weak and weary, Over many a curious program which did TECO's buffer fill, -- While I pondered, nearly sleeping, suddenly there came a feeping, As of something gently beeping, beeping with my console's bell. "'Tis my DDT," I muttered, "feeping on my console's bell: Once it feeped, and now is still." Ah, distinctly I remember that dark night in bleak December, And each separate glowing symbol danced before me, bright and chill. Eagerly I wished the morrow; vainly I had sought to borrow From my HACTRN aid for sorrow -- sorrow for the bugs which fill -- For the strange unknown and nameless bugs which ever all my programs fill -- Bugs which now I searched for still. And the coughing, whirring, gritty fan I heard inside my TTY Made me with fantastic terrors never known before to thrill; So that now, to still the beating of my heart I stood repeating, "'Tis some interrupt entreating DDT to signal me -- Some strange interrupt entreating DDT to signal me -- Its importance surely nil." Presently my soul grew stronger: hesitating then no longer I decided that I would respond to this strange program's call; TECO, which I then attended, to my soul more strength extended; With ^Z I ascended, going to my DDT -- ^[^[V I typed, and answered soon my DDT -- TECO there, and that was all! Dumbly at my console peering, as I sat there, wondering, fearing, Doubting now that any interrupt was ever there to call; But the silence was unbroken, and my HACTRN gave no token, And the only sound there spoken from my TTY's whirring fan -- The low and rough and distant sound came from my TTY's whirring fan -- TECO there, and that was all. Back into my TECO going, with my pounding heart now slowing, Soon again I heard a feeping, somewhat louder than before. "Surely," said I, "surely this is some strange bug of RMS's Which an interrupt professes, though I have no other job; Let me then ask DDT if it thinks there's another job -- 'Tis a bug, and nothing more!" Again I went up to my HACTRN while cold shivers up my back ran ^[^[V I typed, my jobs now once more to display. Only TECO was there listed; though my trembling heart resisted Yet I willed my hand, insisted, ^[J to quickly type -- To answer this bold query DDT did hesitantly type A ghostly "FOOBAR^[J". From ^[^[V protected, now, this phantom job, selected Gave no clue to why it had invoked that former beeping shrill. "Though," I said, "you're no inferior, I shall act as your superior And examine your interior, this strange matter to explore." Then I typed a 0/ this matter further to explore -- Quoth the HACTRN, ":KILL". Much I worried -- this outrageous bug might prove to be contagious, Though thus far it had not seemed to do my TECO any ill: For we cannot help concurring such a bug would cause a stirring, Feeping on a console whirring, disappearing then from sight -- An evanescent mystery subjob disappearing then from sight With no clue but ":KILL"! But my HACTRN, swapping, running, gave no further sign of cunning By this unknown phantom, which was in a thirty second sleep; None of this I comprehended; to my TECO I descended, And in terror I pretended that the bug had gone away -- I pretended that for good the mystery bug had gone away -- When my console gave a feep. Now I quickly, hoping, praying, started up a PEEK displaying All the the jobs and subjobs there which did the system fill: What I found was quite unpleasant, for there was no FOOBAR present: Only TECO was there present, underneath my DDT; I quit the PEEK, and "FOOBAR^[J" typed out my DDT -- Then quoth the HACTRN, ":KILL". But -- this FOOBAR now beguiling all my sad soul into smiling -- I tightly grinned, determined that this glitch should cause nobody ill; Now, into my armchair sinking, I betook myself to linking Fancy unto fancy, thinking why this unknown phantom job -- Why this grim, ungainly, ghastly, gaunt, and unknown phantom job Feeped and did a ":KILL". This I sat engaged in guessing, but conceived no thought expressing How a phantom job could sound those strange and ghostly beeps; This and more I sat divining, with my head at ease reclining, With the symbols coldly shining at me from the CRT, With the bright, sharp symbols coldly shining on the CRT -- Which suddenly gave seven feeps! Then methought the air grew denser, filled with clouds which grew immenser, As when under darkened daylight thick and stormy weather brews; With some bit of hesitation stemming from my trepidation Again I typed that incantation finding out how much I'd lose -- ^[^[V I typed again to find how much I'd lose -- TECO there, and seven FOOs! "Job!" said I, "with ghostly manner! -- subjob still, if LISP or PLANNER! Whether accident, or feeping as another hacker wills! Tell me now why I am losing, why my HACTRN you're abusing, Which no doubt is of your choosing: echo truly on my screen!" Then DDT as if in answer echoed quickly on my screen, Typing seven ":KILLs". "Job!" said I, "with ghostly manner! -- subjob still, if LISP or PLANNER! By the ITS above us which the DSKDMP doth fulfill, I shall be the system's saviour: I shall mend your crude behaviour, I shall halt your strange behaviour, and thee from the system lock!" Madly, wildly laughing I made DDT invoke a LOCK, And quickly typed thereat -- "5KILL"! "Be this now our sign of parting, phantom job!" I shrieked, upstarting, As my HACTRN now informed me ITS was going down in 5:00. "You have run your last instruction and performed your final function!" But, refuting this deduction HACTRN then my TTY grabbed -- To type out yet another message HACTRN now my TTY grabbed -- Quoth the HACTRN, "ITS REVIVED!" And the FOOBAR, never sleeping, still is beeping, still is beeping On the glaring console out from which I cannot even log! And other happenings yet stranger indicate inherent danger When bugs too easily derange or mung the programs of machines; When programs too "intelligent" start taking over the machines: Is this the end of AutoProg? -- The Great Quux (with apologies to Edgar Allan Poe) Notes for those not familar with the terms in this poem: TTY ("titty") = any terminal, not necessarily a teletype (in this case, a CRT); in particular, a terminal associated with and in control of a job tree (see "DDT" below). The terminal may be passed up and down the job tree; at any point in time only one job in the tree may use the tree's TTY. When ^Z is typed on the TTY, the system intervenes, stopping the job which has the TTY, and interrupts that job's superior in the tree, which may then grab the TTY from the inferior job. DDT ("dee dee tee") = HACTRN ("hack-tran") = top level debugging and job controlling procedure, capable of controlling up to eight simultaneous jobs (which may themselves be DDTs!) and performing other miscellaneous functions. HACTRN specifically denotes a DDT at the top of a job tree, while DDT is the more general term. The two terms refer to the same job in the poem, and are thus treated as synonymous. Note that DDT requires its subjobs to have unique names for obvious reasons; hence the concern over seven jobs all named FOO. PEEK = a program similar to the SYSTAT of certain PDP-10 monitor systems of dubious quality. PEEK is actually much more versatile, giving information in any of some dozen modes, such a job status, DECtape status, Arpanet sockets, terminal status, and scheduler variables and statistics. It also has provisions for maintaining a continuously updated display on a CRT, and for line printer usage. TECO ("teeko") = text editor and corrector (that is, the good version of several versions of TECO which are floating around). :KILL ("colon kill") = message typed out by DDT whenever it kills a subjob. Note that subjobs, if running, may request DDT to kill themselves. If the job does not have the TTY when it makes such a request, DDT merely rings the TTY's bell (which on the CRT in the poem above is a particularly obnoxious flavor of "beep"), and prints nothing until you ascend to DDT, and perhaps type ^[J (see below). LOCK = utility program, which interprets the particular command "nKILL" to mean "please bring the time-sharing system down in n minutes" (where it is required that n^]5). The system will then go down at the prescribed time unless the request is countermanded with a "REVIVE" request. ITS = Incompatible Timesharing System, the good timesharing system for the PDP-10. DSKDMP ("disk dump") = program used to, among other things, bootstrap ITS into a running state. ^[ = "altmode"; read it as such to preserve the meter. ^[^[V = command to DDT, requesting it to print out the names of all its subjobs. ^[J = command to DDT, asking that it select the job which has requested attention so that it may be dealt with. DDT responds "jobname^[J" so that you will know which job it was. ^Z ("control zee") = command to ITS to stop the job which currently has the TTY, and interrupt the next higher job in the job tree. Ordinarily this has the effect of returning to DDT. 0/ ("zero slash") = command to DDT, asking it to print out the contents of location zero of the selected subjob. This operation is theoretically transparent to the subjob itself. RMS = Richard M. Stallman, who does an admirable job of keeping DDT, as well as many other programs, relatively bug-free. (C) Copyright 1973, 1974 Guy L. Steele Jr. All rights reserved.