From virtual machine code to your screen

You may be familiar with the concept of an emulator. An emulator is a piece of software which allows you to run programs compiled for a different platform on your computer, by translating the foreign machine code into your computer's native machine code. Many Mac users have an emulator called Virtual PC that allows them to run Microsoft Windows, for instance. IF makes heavy use of this concept: every virtual machine has a number of associated interpreters, which are programs that allow game files compiled for that VM to be played on a particular kind of computer. MaxTADS, for instance, is an interpreter that takes TADS-VM games and runs them on the Macintosh. WinFrotz is an interpreter that takes Z-machine games and runs them on Windows machines. The Z-machine in particular has interpreters for a frightening number of platforms, including the GameBoy (!). So while some games are in fact released as executable files (using a program like JZEXE, which bundles the game file with a platform-specific interepreter), the most common way to play IF is to separately download the game file you want to play and an interpreter that can run it on your machine, start the interpreter, load in the game, and start playing. And that's how a game gets from the author's head onto your screen.

You may be asking, doesn't the intermediate step of specifying a virtual machine just make more work? True, it means you don't have to compile your game for dozens of different platforms -- but you do have to compile interpreters for all those different platforms, so how is that more efficient? The answer is: it's not, if only one game is ever written for the VM in question. But as soon as you write a second game, it becomes obvious why using a VM is worth it: you compile your new game for the VM, and the game file can be played on all the interpreters that have already been created. So if you write a game in Inform, you don't need to worry about compiling it for Windows and for Macs and for Acorns and for GameBoys -- you just compile it for the Z-machine, and the people on Windows and Mac and Acorn and GameBoy machines can instantly play it on interpreters written years ago.

And until fairly recently, that would be the end of it. But as of late a new effort-saving step has been introduced, which goes by the (much-maligned) name of Glk.


Next section: Glk
Or return to the table of contents