What is the GUMP?
Overview
GUMP is an acronym standing for Generic Universal M Project, a project started by the late Dr. Richard F. Walters at UC Davis, along with LD Landis, Terris Linenbach, Steve Morris, Dr. Cui Zhang, and others[1]. Its stated goal was to produce a public domain or free software implementation of the M programming language, in response to InterSystems' June 19th, 1998 announcement of its acquisition of Micronetics, then the vendor of MSM (Micronetics Standard MUMPS).
InterSystems had gone on a spree of acquiring commercial M vendors in the 1990s: Data Tree MUMPS in 1993, Digital Standard MUMPS in 1995, and finally Micronetics Standard MUMPS in 1998[2]. InterSystems had also indicated that the M Development Committee (the organization which formerly produced ANSI and ISO standards for the M programming language) moved too slowly for commercial markets. This had nearly eliminated competition in the M vendor market, leaving only InterSystems and Sanchez Computer Associates (then the owners of GT.M) as active players in the commercial M market.
This shift in the M market left the community nervous: without a critical mass of vendors participating in the MDC, and InterSystems by far the dominant vendor, it appeared that InterSystems--and not the community itself--would control the future direction of M: if users came to rely on InterSystems' proprietary extensions to M, they would be at the mercy of that vendor for pricing and support. The GUMP was started as a counter to this development.
Design Goals
GUMP intended to produce modular foundational components that could be mixed-and-matched to build new M systems easily.
Global Handler
GUMP initially developed a global handler--that is, the component of an M implementation that stores and queries persistent, sparse M arrays--as a C API allowing C programmers to make use of M's distinctive data structure. This implemented the typical get/set operations, plus $ORDER
, $DATA
, and $QUERY
.
The idea was to provide a "reference" implementation of a global handler that potential new M implementers could use to get off the ground quickly.
Interpreter/Compiler
The team planned on implementing an interpreter or compiler for the M programming language, that would use the already-developed global handler. This was never completed, but had it been, it would have been another reference implementation, and together, the two components would have constituted a complete M system.
FreeM
When Shalom ha-Ashkenaz gifted FreeM to MUG-D in 1998, the GUMP team saw this as an answer to the missing interpreter/compiler component, and intended to replace FreeM's global handler with the one that GUMP had developed, as well as making the interpreter portion modular enough to meet the project's goals.
Unfortunately, once GT.M was released under the GPL, progress on the GUMP and the main branch of FreeM halted for the next fourteen years, as the community felt that GT.M solved the problem. However, once GT.M was forked into YottaDB, FIS, the owners of GT.M, de-emphasized the product, and YottaDB took the InterSystems approach of hiding from its M heritage. YottaDB stopped innovating in the M language space, and focused instead on bindings allowing M globals to be accessed from other languages. Though YottaDB remains firmly committed to GPL licensing, they are uninterested in the M language and standardization efforts, so FreeM is once again important.
FreeM remains committed to the M language as a whole, and one of our stretch goals is to modularize it in a GUMP-like manner, with the addition of distributed computing features. We believe the inherent value of M is in the coupling of an expressive, dynamic language with fast and flexible persistent storage.