Here is a brief description of it, plagiarized from LucFrench and Zarf's descriptions on raif:
GLK is a spec for porting Input/Output code across platforms. In order to understand why it's necessary, one must understand a bit about I/O.
A Unix machine has a different way of printing to the screen than a Mac, since one is primarily text based, and the other is a graphical windowing enviroment. As such, they have two *very* different ways of outputting data, particularly for some of the special effects that many high level IF systems need (e.g., a status line, picture, color, etc.).
So, porting the I/O can be difficult. What Glk attempts to do is specify a set of calls to the Glk system that allows for easy porting across multiple platforms.
The Glk calls are intended to be not only portable, but to be *easily* portable: abstracted in such a way that they give the interpreter maximum flexibility. This allows interpreters on different platforms to take advantage of particular UI features.
A port of Dungeon, a scripting language, interpreters for the major IF languages, and a few demos have been ported to Glk. If you are writing an IF interpreter or similar program, consider using Glk. It'll make everyone happy.