12

In Michael Crichton's novel Jurassic Park, disgruntled programmer Dennis Nedry sets up a backdoor in the computer code controlling the park. To untangle Nedry's mess, park engineer Ray Arnold goes "behind the scenes to look at the code — the line-by-line instructions that told the computer how to behave. Arnold was unhappily aware that the complete Jurassic Park program contained more than half a million lines of code, most of it undocumented, without explanation."[page 219] Crichton gives us at least three examples of Nedry's code, which you can find at the bottom of this question.

Now, I'm a programmer myself. I'm well aware that this "code" is not any living language, is not syntactically plausible for any computer language, and is clearly fabricated on Crichton's part. However, with that as a given, there are still some semantics we can infer from this code, right? What can we infer about the purpose of these code snippets? and how do they accomplish their purpose? In-universe and out-of-universe explanations are equally welcome. :)

(page 219)

*/Jurassic Park Main Modules/
*/
*/ Call Libs
Include: biostat.sys
Include: sysrom.vst
Include: net.sys
Include: pwr.mdl
*/
*/Initialize
SetMain [42]2002/9A{total CoreSysop %4 [vig. 7*tty]}
if ValidMeter(mH) (**mH).MeterVis return
Term Call 909 c.lev { void MeterVis $303 }  Random(3 #*MaxFid)
on SetSystem(!Dn) set shp_val.obj to lim(Val{d}SumVal)
  if SetMeter(mH) (**mH).ValdidMeter(Vdd) return
  on SetSystem(!Telcom) set mxcpl.obj to lim(Val{pd})NextVal

(page 230)

curV = GetHandl {ssm.dt} tempRgn {itm.dd2}.
curH = GetHandl {ssd.itl} tempRgn2 {itm.dd4}.
on DrawMeter(!gN) set shp_val.obj to lim(Val{d})-Xval.
if ValidMeter(mH) (**mH).MeterVis return.
if Meterhandl(vGT) ((DrawBack(tY)) return.
limitDat.4 = maxBits (%33) to {limit .04} set on.
limitDat.5 = setzero, setfive, 0 {limit .2 - var(szh)}.
on whte_rbt.obj call link.sst {security, perimeter} set to off.
vertRange = {maxRange+setlim} tempVgn(fdn-&bb+$404).
horRange = {maxRange-setlim/2} tempHgn(fdn-&dd+$105).
void DrawMeter send_screen.obj print.

(page 238)

Vg1 = GetHandl {dat.dt} tempCall {itm.temp}
Vg2 = GetHandl {dat.itl} tempCall {itm.temp}
if Link(Vg1,Vg2) set Lim(Vg1,Vg2) return
if Link(Vg2,Vg1) set Lim(Vg2,Vg1) return
on whte_rbt.obj link set security (Vg1), perimeter (Vg2)
limitDat.1 = maxBits (%22) to {limit .04} set on
limitDat.2 = setzero, setfive, 0 {limit .2 - var(dzh)}
on fini.obj call link.sst {security, perimeter} set to on
on fini.obj set link.sst {security, perimeter} restore
on fini.obj delete line rf whte_rbt.obj, fini.obj
Vg1 = GetHandl {dat.dt} tempCall {itm.temp}
Vg2 = GetHandl {dat.itl} tempCall {itm.temp}
limitDat.4 = maxBits (%33) to {limit .04} set on
limitDat.5 = setzero, setfive, 0 {limit .2 - var(szh)}

(page 239)

Vg1 = GetHandl {dat.dt} tempCall {itm.temp}
Vg2 = GetHandl {dat.itl} tempCall {itm.temp}
if Link(Vg1,Vg2) set Lim(Vg1,Vg2) return
if Link(Vg2,Vg1) set Lim(Vg2,Vg1) return
limitDat.1 = maxBits (%22) to {limit .04} set on
limitDat.2 = setzero, setfive, 0 {limit .2 - var(dzh)}
Vg1 = GetHandl {dat.dt} tempCall {itm.temp}
Vg2 = GetHandl {dat.itl} tempCall {itm.temp}
limitDat.4 = maxBits (%33) to {limit .04} set on
limitDat.5 = setzero, setfive, 0 {limit .2 - var(szh)}

And here's the trace that KeyCheck recorded of Nedry's actions right before the security shut off.[page 228] For the record, the ASCII codes are garbage (.*y XM..z.,4MZ.c.d.m7g?.cW<.,...+?..9Ygz.,4X.....9bdfg.p.?...MCX...) indicating either that Nedry was just banging on the keyboard ("Probably just killing time," Wu said. "Until he finally decided to get down to it"[page 228]) or else that he was in a GUI using the keyboard codes for navigation (but that's implausible given the range of keys he's hitting).

13,42,121,32,88,77,19,13,122,13,44,52,77,90,13,99,13,100,13,109,55,103
144,13,99,87,60,13,44,12,09,13,43,63,13,46,57,89,103,122,13,44,52,88,9
31,13,21,13,57,98,100,102,103,13,112,13,146,13,13,13,77,67,88,23,13,13
system
nedry
goto command level
nedry
040/#xy/67&
mr goodbytes
keycheck off
safety off
sl off
security
whte_rbt.obj
11
  • 5
    I feel like this is really close to being a discussion question... what specifically are you looking for answers to?
    – FuzzyBoots
    Commented Jul 26, 2016 at 4:08
  • 3
    Perhaps if you asked what each of the code snippets is trying to accomplish. At this moment your saying "look at this code and tell me what you think about it".
    – Möoz
    Commented Jul 26, 2016 at 4:44
  • 2
    In the acknowledgments, Crichton says "the computer programs of Bob Gross inspired some of the graphics" - I can find nothing via Google on that front however. Maybe more resourceful folks can and it could lead to some insight.
    – NKCampbell
    Commented Jul 26, 2016 at 22:56
  • 4
    This seems to be a classic example of Hollywood Coding, with human-readable words like "{security, perimeter} set to on" mixed in with gibberish. There's an example in each code block.
    – Valorum
    Commented Jul 27, 2016 at 8:09
  • 4
    @Valorum Agreed. The first time I read those bits (ahem) I immediately discarded them as a combination of insanely readable code (the "on fini.obj" in the third code block) and computer alchemy (the "SetMain" in the first code block), obviously intended for those readers who know nothing about computer languages. I also spotted the bit about the language having to be interpreted for the code changer to do anything at all -- a complete absurdity in large systems.
    – user45485
    Commented Jul 27, 2016 at 9:36

2 Answers 2

17

From a purely out-of-universe perspective, these snippets seem to be a perfect example of the Hollywood Hacking trope, with each code block containing a chunk of human-readable text

on whte_rbt.obj call link.sst {security, perimeter} set to off.

squashed into a chunk of meaningless rubbish (to make the reader work for it and feel smart). There's an example of this in pretty much every snippet;

on fini.obj call link.sst {security, perimeter} set to on
on fini.obj set link.sst {security, perimeter} restore
on fini.obj delete line rf whte_rbt.obj, fini.obj


For the record, Crichton was actually a pretty accomplished programmer in his own right. Indeed, his 'Oscar' was actually a technical award given to him in 1995 for pioneering the movie scheduling and accounting software still used by many studios, so he would definitely have known the difference between software that actually did something, as opposed to software that merely looked like software but serves no actual purpose.

3
  • 1
    I want to complaint there’re not enough warnings on this article about the tvtropes nature of one of the links, which is dangerous and can cause lots of harm. Commented Oct 6, 2017 at 21:13
  • 1
    @JorgeCórdoba - You gotta learn to mouse-over the links before clicking them.
    – Valorum
    Commented Oct 6, 2017 at 21:23
  • 2
    On the phone I couldn’t... there go 30 minutes of my life... and I’m lucky to have escaped :P Commented Oct 6, 2017 at 21:25
11

This discussion was originally posted as part of the question, but I'm moving it into an answer instead:

  • One snippet ends most of its statements with a period .; the other doesn't use any statement terminator at all (except for newlines). I guess this was just an oversight on Crichton's part, but there are some real languages in which statement terminators are optional: e.g. Javascript.

  • In a couple of places, the code has if (some-condition) some-expression return, as if it were a Subject-Object-Verb language. The only remotely mainstream S-O-V language I know is Forth. Would Crichton have been acquainted with Forth? I'm not sure how plausible it would have been for Nedry to write the computer system in Forth (and half a million lines of Forth, for that matter).

  • One of the least plausible aspects of the code, IMHO, is the wild variety of punctuation characters it uses. Expressions like [42]2002/9A and 3#*MaxFid strike me as completely implausible... but are there any languages in which such expressions are meaningful? What about the repeated use of prefix-! (does it mean "not" as in C?) and prefix-%?

  • One of the most powerful features of Crichton's language seems to be the on construct, which seems to set up what today we'd call an "event handler" to monitor the system and take action when a given condition is satisfied. Nedry's code contains the clauses on SetSystem(!Dn), on SetSystem(!Telcom) (nested inside the former clause, which is exciting), and on whte_rbt.obj — the last of which is actually somehow listening for the text whte_rbt.obj to be typed on the command prompt! (Page 230: "The fat bastard put in what looked like an object call, but it's actually a command...") What's the closest precedent for this kind of thing in real computer systems? The tight integration of the language with the command parser suggests to me that this is more like an old mainframe system (i.e., this is not Unix; I do not know this.)

  • The final nifty feature of Nedry's code is that "The command called fini.obj resets the linked parameters ... But it does something else. It then erases the code lines that refer to it. It destroys all evidence it was ever there. Pretty slick."[page 238] I'm not aware of any languages except maybe INTERCAL that support such easy self-modification. And just "eras[ing] the code lines" wouldn't actually be good enough, unless the language were interpreted... or unless what we're seeing here is actually a disassembled dump of the real binary code! But the idea that this is someone's idea of a readable assembler dump is even harder for me to swallow.

3
  • 8
    If those symbols seem implausible, check out APL
    – Izkata
    Commented Jul 26, 2016 at 4:53
  • 1
    Well, I know APL, but I don't know the ASCII-based languages J and K (nor whether those languages existed in Nedry's era). Does the use of the ASCII symbols !, &, %, ** seem similar to anything from those languages? I suspect not, but I don't really know. (Post an answer! :)) Commented Jul 26, 2016 at 22:03
  • 2
    Perl uses a wide variety of ASCII symbols in a wide variety of combinations. Especially Perl6. Commented Nov 18, 2017 at 6:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.