GT.M is a key-value database engine optimized for transaction processing. GT.M includes a development platform, and a compiler for the ISO standard M programming language, also known as mumps.

GT.M, an abbreviation for Greystone Technology M, was developed in 1980 at Greystone Technology Corp. It is an implementation of ANSI standard M for Unix systems and OpenVMS. In addition to the traditional M- functions, GT.M also offers a compiler that generates machine code directly.

The database engine, which was published in 2000 as open source, is maintained by Fidelity Information Services.

GT.M is used in application of the FIS -profile banks, which is in use at the ING DIRECT banks in the U.S., Canada, Spain, France, Italy, Holland and the UK.

Technical Overview

GT.M consists of a programming language, a database and utilities. The programming language and the database are integrated together, but is not useful without the other. Programming and database use the same file organization and typing.

Data organization and typing

GT.M has only two data types: Natural numbers and strings. A string is any string of characters (including zeros). A string like " 42" includes a natural number. The typing is dynamic and the conversion between the types is done on the fly: 1 " 42" gives the result 43, and the first character of 43 is 4

There is only one data structure, multidimensional arrays ( key-value nodes, sub-tree, and Associative Memory are evenly matched descriptions ) with up to 32 subscripts. A scalar can be thought of as an array element with a subscript 0. Nodes with different numbers of subscripts (including a node with no subscript ) can exist in the same array. For example, if someone wants to represent the list of U.S. capitals:

Variable are generated in the first assignment when required. The first set command above generates the variable capital. Variables are part of the programming language and are called local variables. A database access looks like a array access, for example:

But the caret (^) means a database access. Variables in the database only have a global scope and are naturally persistent and are shared by all processes. There are so-called global variables. The first 31 characters of a variable variable name are significant.

The kill command and ZKill be used to delete subtrees of the variables.

Numbers in GT.M are 18 digits exactly (before or after the decimal point). The Scientific notation used in larger numbers.

GT.M uses the Unicode ( ISO/IEC-10646 ).

Integrated database

The logical database of a GT.M process contains one or more Global Variable Namespaces, everyone has an unlimited number of global variables. A database file is up to 224M ( 276,168,704 ) data blocks. A global variable can be up to 1,792 GB.

The database supports transactions. The following code implements an ACID transaction:

Integrated programming

Local variables can be up to one megabyte in size. The GT.M run-time environment uses dynamic memory allocation and garbage collection. GT.M routines are dynamically compiled and linked before execution.

With few exceptions, GT.M includes the complete implementation of the ISO standard M.

The M- C- code program can call, and vice versa, that is, as a main program, a normal C main program ( main () ) are used.


GT.M supports the following platforms:

  • AIX on IBM System p
  • GNU / Linux on IBM System z, Itanium, x86 -64 and IA-32 Architectures
  • HP -UX on Itanium
  • Solaris on SPARC
  • Z / OS on IBM System z

GT.M is also available for the following platforms:

  • HP -UX on HP 9000 (PA- RISC)
  • OpenVMS on Alpha / AXP
  • Tru64 UNIX on Alpha / AXP


The GNU / Linux on x86 -64 and IA -32 ( x86), and OpenVMS on Alpha / AXP, GT.M is a Free / Open Source Software ( FOSS ) published under license: GNU Affero General Public License, version 3 The other platforms are proprietary.

SQL and ODBC access to GT.M are offered as commercial products.