We're wrapping up our vacation week with a look at something really scary. A GHOST. A spooky GHOST, not the Swedish metal band, which isn't really spooky. Original. --Remy
Some developers look at a problem and say, “Let’s solve it. With code!” Then there are other developers, who say, “This specific problem is a subset of a general class of problem, which, if we solve the general class, will automatically solve the specific class.” The best programmers know when it’s time to keep it simple, and when they really should shoot for the stars.
Chris worked for a startup run by former academics. They wanted to shoot for the stars, some black holes, and maybe, if there was budget left over, the primordial galaxies that formed after the Big Bang. They had an idea for a product which would… well, Chris had no idea what it did.
The vision was codenamed SPRIT. Walter, the wizard behind it, couldn’t explain its purpose in terms anyone else understood. The only thing he could explain was that SPIRIT needed to be implemented in the in-house language, GHOST. “It’s a joke,” Walter explained once, “It stands for ‘Generic Hybrid Script for Transactional Objects’. The acronym is out of order because GHOST is all about parallel processing. It’s funny.”
GHOST wasn’t terribly funny to use. It terrified Chris. The syntax loved short-hand and unusual special characters, which made it read like the demon offspring of MUMPS and APL. Worse, it wasn’t truly a language in its own right- it compiled down into C#. The generated C# code read like Franz Kafka on LSD, and depended on syntax conventions which had been deprecated in 2003, meaning it depended on .NET 1.1.
The language was cluttered with all sorts of things it didn’t need. To demonstrate its “expressive power”, Walter built syntax primitives to do non-primitive things. With a single line of code, you could generate 500 users and add them to the domain, or scan the network for every printer or network drive and map it to the local machine. There was a built-in method named “NPR”, which calculated the nth prime using a brute force (but highly parallelized) algorithm.
GHOST was Walter’s pride and joy. The fact that only the generated C# was debuggable, and not GHOST itself, or that the advanced “transactional primitives” rarely worked did nothing to dull his pride. Like a proud father, Walter wanted every chance to show off his offspring.
The first chance was an upcoming trade show. Walter pulled out all of the stops, bought the best booth their budget allowed, and booked travel for the entire team. The lack of a demo-ready product meant nothing to him. “We’ll just have to go into crunch mode!” Walter led by example and took a week’s vacation.
This left Chris, and his allies Peter and Ray, to slave away late each night. The night before the trade show, they worked in silence. The lights were dimmed, the floor was littered with yesterday’s pizza boxes and tonight’s Chinese take-out. Chris wrestled with his GHOST, trying to get the system to do whatever it was it was supposed to do. He had some tests as his guide, even if he didn’t know what they meant. Peter and Ray scrambled to prepare the other booth materials and printouts.
Shortly before midnight, Chris found his triumph. The inputs he in the spec generated the outputs they were supposed to. Peter and Ray were still scrambling- the main printer had just died, and in a rush, they hooked up a dusty, ancient replacement. Everything seemed fine, until the clock struck midnight.
Something happened, someplace between the hardware, the operating system, and the GHOST software. Ray’s print job finished, and a new one started. Page after page of the arcane, eldritch code of the system spewed forth. GHOSTly code danced across the pages like the gibberings of a mad-man. It was only Chris’s quick thinking that saved their sanity- he tore the printer’s power cable from the wall.
No one knew why it happened. No one wanted to know. Maybe it was the printer, or perhaps it was something stuck in the print queue. Maybe one of them triggered some unknown feature in the application. Maybe… maybe it was the GHOST in the machine. They swore to never discuss it, and agreed to run off the last few print jobs at Kinko’s the next day, and went home for the night.
The first day of the trade show was a mild disaster. Their booth was tucked away in a remote corner, between the trash bins and one of those pushy training companies that promised to turn novices into veteran programmers in six weeks, “Or your money back!” When anyone wandered past, Walter did his best to rope them in, and demo SPIRIT and discuss the power of GHOST. Each demo triggered bugs and crashes, but since no one actually understood the application, only Walter noticed the issues.
They stayed through the day, into the opening night party. The free drinks ran out at 11PM, and so everyone wandered out into the streets of the city, looking for nightlife. This meant only security and the cleanup crew were there at midnight…
The second day opened as a scene of bedlam
. Several acres of forest had been converted into the cracked scrawl of GHOST code. Each and every vendor with a poorly-secured printer on the network (all of them) had been taken over by GHOST. Most ran out of paper early in the evening, although with that many print jobs hitting the network, a number of them were only just starting on their insane quest to print the entirety of SPIRIT’s GHOST code.
Chris pulled the demo machine off the network, which crushed Walter. “Now I can’t demonstrate the great networking features of GHOST!” They never found the underlying cause. Like most hauntings, in cropped up at midnight for a few weeks, then slowly drifted away into a bad memory. SPIRIT never found a market, and when the company folded, they gave up the GHOST.
Chris thought that was the end of the story, until he went to clean out his attic. He found an old, unmarked box. Inside were reams of paper, completely covered with GHOSTs.
Ghost image by Lionel Allorge (Own work) GFDL, CC-BY-SA–3.0 or FAL, via Wikimedia Commons