Annotation of freem/doc/freem_history.txt, revision 1.1
1.1 ! snw 1:
! 2:
! 3:
! 4:
! 5:
! 6:
! 7:
! 8:
! 9:
! 10: [1mThe History of FreeM[0m
! 11:
! 12:
! 13: [4mSerena[24m [4mWillis[0m
! 14: Coherent Logic Development
! 15:
! 16:
! 17: [4mABSTRACT[0m
! 18:
! 19: The history of M, as well as the specifics of
! 20: FreeM--the implementation maintained by the author for
! 21: the last decade--are extensive and complex topics.
! 22: Here, we will present an overview of the M language and
! 23: its history in general, proceeding thence specifically
! 24: to the historical background and development of FreeM
! 25: itself, as well as its current status and goals. Though
! 26: publicly-available information is sparse, efforts have
! 27: been made to cite as many sources* as possible.
! 28:
! 29:
! 30: [1m1. M LANGUAGE OVERVIEW[0m
! 31:
! 32: [4mMUMPS[24m--now generally referred to as [4mM[24m to distance it from
! 33: the infectious disease--is an imperative, general-purpose, com-
! 34: mand-oriented programming language supporting persistent, hierar-
! 35: chical, sparse arrays. It includes high-level support for multi-
! 36: user, multi-processing applications with flexible concurrency
! 37: control.
! 38:
! 39: MUMPS, being an acronym for [4mM[24massachusetts General Hospital
! 40: [4mU[24mtility [4mM[24multi-[4mP[24mrogramming [4mS[24mystem, was developed by Neil Pap-
! 41: palardo, Robert A. Greenes, and Curt Marble of Dr. Octo Barnett's
! 42: lab at Massachusetts General Hospital in 1966-1967[1]. Inspired
! 43: by RAND Corporation's JOSS, and the TELCOMP and STRINGCOMP lan-
! 44: guages from Bolt, Beranek and Newman, MUMPS' earliest and most
! 45: prominent use cases were in the field of health informatics[2,
! 46:
! 47: -----------
! 48: * Note that all world wide web URLs have been shortened
! 49: for readability. Following these URLs will automatically
! 50: redirect the reader to the appropriate, original source. All
! 51: such URLs were accessed by the author on 27 April 2025, un-
! 52: less otherwise specified.
! 53: [1] Greenes, R.A., Pappalardo, A.N., Marble, C.W., and
! 54: Barnett, Dr. G. Octo, "Design and Implementation of a Clini-
! 55: cal Data Management System," [4mComputers[24m [4mand[24m [4mBiomedical[24m [4mRe-[0m
! 56: [4msearch[24m [1m2[22m(5), Laboratory of Computer Science, Massachusetts
! 57: General Hospital, Boston (10 Mar 1969).
! 58: [2] Greenes, R.A., Barnett, Dr. G. Octo, Klein, Dr. Stuart
! 59: W., Robbins, Dr. Anthony, and Prior, Roderick E., "Record-
! 60: ing, Retrieval and Review of Medical Data by Physcian-Com-
! 61:
! 62:
! 63:
! 64:
! 65:
! 66:
! 67:
! 68:
! 69:
! 70: -2-
! 71:
! 72:
! 73: 3].
! 74:
! 75: MUMPS code is divided into program units referred to as [4mrou-[0m
! 76: [4mtines[24m, which are roughly analagous to [4mmodules[24m or [4mcompilation[0m
! 77: [4munits[24m in more mainstream languages. Routines are then further di-
! 78: vided into labels (or [4mtags[24m in MUMPS parlance), which serve as en-
! 79: try points into the routine. Subroutines and functions (the lat-
! 80: ter known as [4mextrinsic[24m [4mfunctions[24m) are introduced as tags with an
! 81: optional, parenthesized [4mformallist[24m, being a list of parameters
! 82: expected by the subroutine or extrinsic function.
! 83:
! 84: Perhaps the most unique feature of M, the [4mglobal[24m, is a per-
! 85: sistent, hierarchical, sparse array allowing developers to easily
! 86: implement database features directly in the application's primary
! 87: development language:
! 88:
! 89:
! 90: ROUTINE ;
! 91: SET ^PEOPLE("Willis, Serena","DOB")="1980-12-01"
! 92: SET ^PEOPLE("Willis, Serena","SEX")="F"
! 93: SET ^PEOPLE("Willis, Serena","COUNTRY")="US"
! 94:
! 95: The above routine would be called with [4mDO[24m [4m^ROUTINE[24m, result-
! 96: ing in a data structure in fixed storage where the elements
! 97: (known in M parlance as [4msubscripts[24m), i.e., [4m"Willis,[24m [4mSerena"[24m, are
! 98: automatically sorted on insertion, allowing for rapid retrieval.
! 99: Rough analogues can be found in the [4mPICK[24m operating system, as
! 100: well as BBN [4mFILECOMP[24m, the latter of which was a direct influence
! 101: in the early development of M.
! 102:
! 103:
! 104:
! 105:
! 106:
! 107:
! 108:
! 109:
! 110:
! 111:
! 112:
! 113:
! 114:
! 115:
! 116:
! 117:
! 118: -----------
! 119: puter Interaction," [4mNew[24m [4mEngland[24m [4mJournal[24m [4mof[24m [4mMedicine[24m [1m282[22m(6),
! 120: Laboratory of Computer Science, Massachusetts General Hospi-
! 121: tal, Boston (5 Feb 1970).
! 122: [3] Pendergrass, Henry P., Greenes, R.A., Barnett, Dr. G.
! 123: Octo, Poltras, James W., Pappalardo, A. Neil, and Marble,
! 124: Curtis W., [4mAn[24m [4mOn-Line[24m [4mComputer[24m [4mFacility[24m [4mfor[24m [4mSystematized[24m [4mIn-[0m
! 125: [4mput[24m [4mof[24m [4mRadiology[24m [4mReports,[24m Massachusetts General Hospital,
! 126: Boston (1 Mar 1969).
! 127:
! 128:
! 129:
! 130:
! 131:
! 132:
! 133:
! 134:
! 135:
! 136: -3-
! 137:
! 138:
! 139: Early versions of M included [4mMGH[24m [4mMUMPS[24m from Massachusetts
! 140: General Hospital, and [4mDigital[24m [4mStandard[24m [4mMUMPS[24m from Digital Equip-
! 141: ment Corporation. Notably, early commercial versions of M were
! 142: commercial software, somewhat limiting the language's spread out-
! 143: side of its ecological niche of health informatics.
! 144:
! 145: [1mVendor Implementation[0m
! 146: Mass. General Hospital MGH MUMPS
! 147: Digital Equipment Corp. Digital Standard MUMPS (DSM)
! 148: InterSystems Corp. InterSystems Standard MUMPS (ISM), Open M, Cache, IRIS Data Platform
! 149: Data Tree Data Tree MUMPS (DTM)
! 150: Micronetics Micronetics Standard MUMPS (MSM)
! 151: Patterson & Gray PSM-11, PSM-32, PSM-V
! 152: MGlobal International Inc. CCSM, MacMUMPS, M Global MUMPS, M3 Lite
! 153: U.C. Davis MicroMUMPS
! 154: Ray Newman MUMPS V1
! 155: Fourth Watch Software LC Reference Standard M (RSM)
! 156: Kevin O'Kane Mumps-II, Open Mumps, GPL Mumps
! 157: M21 Ltd. M21
! 158: Fidelity National Information Services GT.M (Greystone Technology MUMPS)
! 159: YottaDB YottaDB
! 160: Eugene Karataev MiniM
! 161:
! 162: [4mFigure[24m [4m1.[24m [4mPartial[24m [4mlist[24m [4mof[24m [4mM[24m [4mimplementations.[0m
! 163:
! 164:
! 165: [1m2. EARLY HISTORY OF FREEM[0m
! 166:
! 167: FreeM was developed in Germany in the mid-1990s by a devel-
! 168: oper who went by the pseudonym [4mShalom[24m [4mha-Ashkenaz[24m, whose actual
! 169: identity remains unknown[4], though it is thought by some that
! 170: they are a dentist who learned C and developed FreeM on their own
! 171: time. Shalom developed FreeM at a time when InterSystems Corpora-
! 172: tion (the company that developed the ISM implementation of M) was
! 173: acquiring the majority of its competitors and absorbing their
! 174: technology into their [4mOpen[24m [4mM[24m product, which would later become
! 175: [4mInterSystems[24m [4mCache[24m[5].
! 176:
! 177:
! 178:
! 179:
! 180:
! 181:
! 182:
! 183:
! 184:
! 185:
! 186:
! 187:
! 188: -----------
! 189: [4] Walters, Dr. Richard F., "History and Continuing Evo-
! 190: lution of FreeM: A Concept Whose Time Has Come (Again)," [4mM[0m
! 191: [4mComputing[24m [1m7[22m(2), p. 19 (May 1999). See https://l.mumps.dev/4.
! 192: [5] [4mIbid.[24m p. 18.
! 193:
! 194:
! 195:
! 196:
! 197:
! 198:
! 199:
! 200:
! 201:
! 202: -4-
! 203:
! 204:
! 205: [1mImplementation Year[0m
! 206: DataTree MUMPS (DTM) 1993
! 207: Digital Standard MUMPS (DSM) 1995[6]
! 208: Micronetics Standard MUMPS (MSM) 1998
! 209:
! 210: [4mFigure[24m [4m2.[24m [4mM[24m [4mimplementations[24m [4mabsorbed[24m [4mby[24m [4mInterSystems[24m [4mCorp.[0m
! 211:
! 212:
! 213: Shalom wished to provide a community-driven, open-source im-
! 214: plementation of M as a bulwark against the growing threat of sin-
! 215: gle-vendor hegemony over the M language. Its design--as well as
! 216: some of the documentation included with the original sources--in-
! 217: dicate that FreeM was originally targeted to the MS-DOS family of
! 218: operating systems. It made use of a very limited subset of the C
! 219: library, and included instructions for renaming the MS-DOS style
! 220: 8.3 filenames in order to compile under UNIX[7].
! 221:
! 222: At one point in FreeM's early history, Shalom ported FreeM
! 223: from MS-DOS to SCO UNIX, the UNIX System V Release III-derived
! 224: descendant of Microsoft XENIX, now known as SCO OpenServer--a
! 225: platform still supported by FreeM today[8]. This port brought
! 226: support for the [4mscoansi[24m terminal type, including colors and ANSI
! 227: X3.64 control mnemonics.
! 228:
! 229: [1m3. INITIAL INVOLVEMENT[0m
! 230:
! 231: The author's mentor in computer programming and UNIX was
! 232: Lawrence Landis, who involved himself heavily in the M program-
! 233: ming language ca. 1991. Mr. Landis promoted the M language to the
! 234: author from 1991 forward, and first demonstrated FreeM to her in
! 235: August 1998. In 2010, the author incorporated her company, Coher-
! 236: ent Logic Development, learned M, and began doing contract work
! 237: in M through Mr. Landis's company, Fourth Watch Software.
! 238:
! 239: Mr. Landis was the owner of FreeM's SourceForge reposi-
! 240: tory[9] , which had not been touched in a number of years, fol-
! 241: lowing Fidelity National Information Services' decision to re-
! 242: lease GT.M under a free software license. In August 2011, the au-
! 243: thor downloaded the source code for FreeM and did enough work on
! 244: it to enable building and running under modern GNU/Linux systems
! 245: and posted it to the [4mmumpster.org[24m forums[10].
! 246:
! 247: -----------
! 248: [6] Goelz, Larry and Paladino, John, [4mCover[24m [4mLetter[24m [4mre[24m [4mDSM,[0m
! 249: Compaq Computer Corporation, Houston (31 May 1999). See
! 250: https://l.mumps.dev/r [dead link].
! 251: [7] ha-Ashkenaz, Shalom, "README," [4mGeneric[24m [4mUniversal[24m [4mMUMPS[0m
! 252: [4mProject[24m (18 Jun 1998). See https://l.mumps.dev/7.
! 253: [8] Willis, Serena, "Platform Notes (SCO OpenServer),"
! 254: [4mFreeM[24m [4mWiki[24m (3 Aug 2023). See https://l.mumps.dev/8.
! 255: [9] Landis, Lawrence D., "Generic Universal MUMPS
! 256: Project," [4mSourceForge[24m (1999). See https://l.mumps.dev/6.
! 257: [10] Willis, Serena, "FreeM 0.1.4," [4mMumpster[24m (2011). See
! 258: https://l.mumps.dev/2.
! 259:
! 260:
! 261:
! 262:
! 263:
! 264:
! 265:
! 266:
! 267:
! 268: -5-
! 269:
! 270:
! 271: In 2014, Mr. Landis gave the author administrator access to
! 272: the FreeM SourceForge repository and transferred maintainership
! 273: of the project to her[11].
! 274:
! 275: [1m4. GENERIC UNIVERSAL M PROJECT[0m
! 276:
! 277: The [4mGeneric[24m [4mUniversal[24m [4mM[24m [4mProject[24m was conceived by Richard F.
! 278: Walters, a professor from U.C. Davis. The GUMP, following the
! 279: rising popularity of object-oriented programming in the 1990s,
! 280: was intended to be a toolkit allowing M implementations to be
! 281: built from discrete components with a well-defined and well-spec-
! 282: ified public interface among these components. These components
! 283: included the global handler (supplying the functionality of per-
! 284: sistent global storage), and the interpreter/compiler (responsi-
! 285: ble for implementing M language commands). The components would
! 286: have been able to communicate over a network, or in-process on
! 287: the same host, enabling distributed computing functionality[12].
! 288:
! 289: Although the specification for the GUM interface to global
! 290: handlers attained a reasonably well-specified level of complete-
! 291: ness[13], and Lawrence Landis and others developed a mostly-com-
! 292: plete implementation of a GUM global handler[14], none of the
! 293: other envisioned components were ever completed, and specifi-
! 294: cally, the interpreter component was missing.
! 295:
! 296: [1m5. FREEM DONATED TO MUG DEUTSCHLAND[0m
! 297:
! 298: In July of 1998, Shalom ha-Ashkenaz donated the FreeM source
! 299: code (then known as FreeMUMPS) to the M User's Group-Deutschland
! 300: (MUG-D), hoping the community would take the nascent implementa-
! 301: tion from its infancy through to a state of production-ready com-
! 302: pleteness and robustness. Shalom also placed a few conditions on
! 303: his gift: a public release could not be made until a substantial
! 304: set of milestones were reached. Per his conditions, the FreeMUMPS
! 305: project must[15]:
! 306:
! 307: +o Implement the entirety of [4mANSI[24m [4mX11.1-1995[0m
! 308:
! 309: +o Use Structured System Variables instead of [4mVIEW[24m commands and
! 310: [4m$VIEW[24m functions
! 311:
! 312:
! 313: -----------
! 314: [11] Landis, Lawrence D., "Generic Universal MUMPS
! 315: Project," [4mSourceForge[24m (1999). See https://l.mumps.dev/6.
! 316: [12] Landis, Lawrence D., "C2M," [4mGeneric[24m [4mUniversal[24m [4mMUMPS[0m
! 317: [4mProject[24m (1998). See https://l.mumps.dev/9.
! 318: [13] Morris, Steve, "GUM API," [4mwww.rosecroft.net[24m (18 Nov
! 319: 1996). See https://l.mumps.dev/k.
! 320: [14] Walters, Dr. Richard F., Morris, Steve, and Landis,
! 321: Lawrence D., "Generic Universal M Project," [4mCoherent[24m [4mLogic[0m
! 322: [4mDevelopment[24m [4mGitLab[24m (12 Jun 1995). See https://l.mumps.dev/l.
! 323: [15] ha-Ashkenaz, Shalom, "README," [4mGeneric[24m [4mUniversal[0m
! 324: [4mMUMPS[24m [4mProject[24m (18 Jun 1998). See https://l.mumps.dev/7.
! 325:
! 326:
! 327:
! 328:
! 329:
! 330:
! 331:
! 332:
! 333:
! 334: -6-
! 335:
! 336:
! 337: +o Raise the string size limits
! 338:
! 339: +o Implement MWAPI, OMI, X11 bindings, and GKS bindings
! 340:
! 341: +o Be substantially free of major bugs
! 342:
! 343: Although MUG-D readily accepted the contribution of Free-
! 344: MUMPS, the organization itself lacked the manpower and expertise
! 345: to complete the implementation. Just as it is now, the intersec-
! 346: tion of M community members who know enough of the M language and
! 347: C language to work on a project this ambitious was quite small.
! 348:
! 349: [1m6. MERGING GUMP AND FREEM[0m
! 350:
! 351: Very shortly after the contribution of FreeMUMPS to MUG-D,
! 352: Richard F. Walters and a small team of developers and administra-
! 353: tive staff who had been working on the GUMP assumed maintainer-
! 354: ship of the FreeMUMPS source code, with Lawrence Landis managing
! 355: the development efforts[16]. This included representatives from
! 356: the [4mM[24m [4mTechnology[24m [4mAssociation[24m (an M vendor association having sev-
! 357: eral foreign branches), the [4mM[24m [4mDevelopment[24m [4mCommittee[24m (the M stan-
! 358: dards organization hosting the ANSI/ISO standards for the M lan-
! 359: guage, then sponsored by the M Technology Association), and oth-
! 360: ers[17]. The goals of this team were to:
! 361:
! 362: +o Meet Shalom's requirements for a public release of FreeMUMPS
! 363:
! 364: +o Convert FreeMUMPS into the first interpreter component of the
! 365: GUMP
! 366:
! 367: During this period, Ronald L. Fox of Diagnostic Laboratory
! 368: Services in Honolulu, HI (who passed in 2010)[18] ported Free-
! 369: MUMPS from SCO UNIX to Red Hat 5 and glibc-6[19]. Steve
! 370: "Saintly" Zeck of the U.C. Davis Veterinary Medical Teaching Hos-
! 371: pital[20] also attempted to rewrite the symbol table code to lift
! 372: string size limits[21], David Whitten enhanced some of the imple-
! 373: mentation-specific extensions, and Lawrence Landis integrated
! 374: Zeck's symbol table work.
! 375:
! 376: -----------
! 377: [16] Walters, [4mHistory,[24m p. 19.
! 378: [17] Landis, Lawrence D., "Contributers.txt [sic],"
! 379: [4mGeneric[24m [4mUniversal[24m [4mMUMPS[24m [4mProject[24m (1998). See
! 380: https://l.mumps.dev/a.
! 381: [18] Robinson, Angie and Utley, Mark, [4mRonald[24m [4mL.[24m [4mFox[0m
! 382: [4m(1951-2010),[24m Find a Grave, Lehi. See https://l.mumps.dev/e.
! 383: [19] Fox, Ronald L., "FreeMUMPS source and docs available
! 384: in tgz format," [4mmumps-l[24m [4mmailing[24m [4mlist,[24m Honolulu (19 Jan
! 385: 1999). See https://l.mumps.dev/d.
! 386: [20] Zeck, Steven, [4mAbout[24m [4mSteve[24m [4mZeck,[24m Davis (1998). See
! 387: https://l.mumps.dev/m.
! 388: [21] Zeck, Steven, "FreeM String Lengths," [4mGeneric[24m [4mUniver-[0m
! 389: [4msal[24m [4mM[24m [4mProject[24m [4mMailing[24m [4mList[24m (21 May 1999). See
! 390: https://l.mumps.dev/i.
! 391:
! 392:
! 393:
! 394:
! 395:
! 396:
! 397:
! 398:
! 399:
! 400: -7-
! 401:
! 402:
! 403: In FreeM 0.1.0, the name of the implementation was changed
! 404: from FreeMUMPS to Public Standard M, and again to Free Standard
! 405: MUMPS and then FreeM when it was discovered leading up to the
! 406: FreeM 0.2.0 release that the PSM acronym was already in use for
! 407: Patterson & Gray's[22] M implementation[23]. Dr. Walters also
! 408: received the implementation ID of 49 from then secretary of the M
! 409: Development Committee, Don Piccone[24].
! 410:
! 411: One of the contributors to FreeM at this stage--primarily in
! 412: the area of M vendor routines--was Axel Trocha, who would later
! 413: maintain a private fork of FreeM[25].
! 414:
! 415: [1m7. GT.M RELEASED AS FREE SOFTWARE[0m
! 416:
! 417: GT.M, an acronym for [4mGreystone[24m [4mTechnology[24m [4mMUMPS[24m, is an M im-
! 418: plementation that was released by Greystone Technology in 1986.
! 419: Greystone was later acquired by Sanchez Computer Associates,
! 420: which was in turn acquired by Fidelity National Information Ser-
! 421: vices[26].
! 422:
! 423: When GT.M was released under the GNU General Public License
! 424: in 2000[27], it seemed to many to obviate the [4mraison[24m [4md'etre[24m for
! 425: FreeM, as GT.M was a well-established, robust, and high-perfor-
! 426: mance M implementation with which FreeM could not then compete.
! 427: Unfortunately, at this time, the GUMP and FreeM projects lost all
! 428: of their momentum, and new development along these lines rapidly
! 429: ceased. The final GUMP team release of FreeM was 0.5.0[28]. How-
! 430: ever, Axel Trocha's private port would continue to be developed
! 431: for some years.
! 432:
! 433: [1m8. FORKED BY AXEL TROCHA[0m
! 434:
! 435: When the free software release of GT.M stalled the GUMP
! 436: team's progress on the primary branch of development, Axel
! 437: -----------
! 438: [22] Landis, Lawrence D., "Generic Universal MUMPS
! 439: Project," [4mSourceForge[24m (1999). See https://l.mumps.dev/6.
! 440: [23] Landis, Lawrence D., "Changes.GUM," [4mGeneric[24m [4mUniversal[0m
! 441: [4mMUMPS[24m [4mProject[24m (18 Feb 2000). See https://l.mumps.dev/5.
! 442: [24] [4mIbid.[0m
! 443: [25] Trocha, Axel, [4mFree[24m [4mMumps[24m (2 Sep 2004). See
! 444: https://l.mumps.dev/3.
! 445: [26] Finextra, [4mFidelity[24m [4mNational[24m [4mFinancial[24m [4macquires[0m
! 446: [4mSanchez,[24m Finextra Research Limited, London (29 Jan 2004).
! 447: See https://l.mumps.dev/c.
! 448: [27] Ryan, Greg and Bhaskar, K.S., [4mSanchez[24m [4mOffers[24m [4mGT.M[0m
! 449: [4mDatabase[24m [4mas[24m [4mOpen[24m [4mSource[24m [4mFreeware[24m [4mto[24m [4mGNU/Linux[24m [4mUsers,[24m Linux
! 450: Today, Nashville (7 Nov 2000). See https://l.mumps.dev/b.
! 451: [28] Diamond, Jon, Dorman, Rod, Gerum, Winfried, Kreis,
! 452: Greg, Landis, Lawrence D., Milligan, Lloyd, Morris, Steve,
! 453: Murray, John, Pastoors, Wilhelm, Schell, Kate, Schofield,
! 454: Lyle, Trocha, Axel, Walters, Dr. Richard F., and Whitten,
! 455: David, [4mFreeM[24m [4m0.5.0,[24m Generic Universal M Project, Roseville
! 456: (15 Apr 1999). See https://l.mumps.dev/j.
! 457:
! 458:
! 459:
! 460:
! 461:
! 462:
! 463:
! 464:
! 465:
! 466: -8-
! 467:
! 468:
! 469: Trocha, an aforementioned contributor, continued development on
! 470: the FreeM source code. Trocha added many interesting features to
! 471: the FreeM codebase, including:
! 472:
! 473: +o A native port to Microsoft Windows
! 474:
! 475: +o Compiling FreeM as an Apache web server module, allowing FreeM
! 476: to be used easily for web development
! 477:
! 478: +o The ability to output HTML code in a heredoc-style format, with
! 479: any line of code beginning with a left angle bracket being in-
! 480: terpreted as HTML with support for interpolated M locals and
! 481: globals
! 482:
! 483: +o Extensions allowing FreeM to be used as a command-line shell,
! 484: along the lines of UNIX [4mbash[24m, Windows [4mcmd.exe[24m, etc.
! 485:
! 486: Trocha also maintains ownership of the [4mfreem.net[24m Internet
! 487: domain[29], and continued issuing public releases of his FreeM
! 488: port on that site until sometime after 2004, at which point this
! 489: fork was made entirely private. Currently, freem.net is a blank
! 490: page. However, Trocha's fork of FreeM continues to the
! 491: present[30] as the back-end storage engine and programming envi-
! 492: ronment for the [4mElven[24m [4mRunes[24m website[31]. The author has communi-
! 493: cated with Mr. Trocha on occasion, and though he is supportive of
! 494: the author's efforts, has chosen to remain in the background.
! 495:
! 496: [1m9. RESUMING PRIMARY DEVELOPMENT[0m
! 497:
! 498: In 2011, the author downloaded the FreeM source code from
! 499: the GUM Project's SourceForge repository--dormant since 2000--and
! 500: updated it just enough that it would compile and run on modern
! 501: GNU/Linux systems. The author also quickly updated FreeM to sup-
! 502: port terminal sizes larger than 80x24.
! 503:
! 504: [1m10. TAKING MAINTAINERSHIP[0m
! 505:
! 506: In 2014, Lawrence Landis transferred administrative access
! 507: of the GUMP repository, conferring maintainership of the primary
! 508: branch of FreeM development to the author. Since then, many fea-
! 509: tures have been added and many bugs corrected, including:
! 510:
! 511: +o Adding support for proper namespaces, configured through a
! 512: [4mfreem.conf[24m file, which standardizes routine and global storage
! 513: locations
! 514:
! 515:
! 516: -----------
! 517: [29] Whois.net, [4mWhois[24m [4mfreem.net[24m [4m(see[24m [4mName[24m [4mServers[24m [4mfields)[0m
! 518: (8 Feb 2025). See https://l.mumps.dev/n.
! 519: [30] Trocha, Axel, [4mFreeM[24m [4mdevelopment[24m [4mhas[24m [4mbeen[24m [4mrestarted[0m
! 520: [4m(E-mail)[24m (30 Mar 2020).
! 521: [31] Elizalde and Trocha, Axel, [4mElven[24m [4mRunes:[24m [4mA[0m
! 522: [4mTolkien/MUME[24m [4mFan[24m [4mSite.[24m See https://l.mumps.dev/q.
! 523:
! 524:
! 525:
! 526:
! 527:
! 528:
! 529:
! 530:
! 531:
! 532: -9-
! 533:
! 534:
! 535: +o Adding support for Structured System Variables
! 536:
! 537: +o Adding support for the asynchronous event specification from
! 538: MDC Type A proposal [4mX11/1998-28[24m[32]
! 539:
! 540: +o Adding support for constants via the [4mCONST[24m keyword
! 541:
! 542: +o Adding a [4mWITH[24m command allowing the specification of an implicit
! 543: prefix to all subsequent variable references
! 544:
! 545: +o Adding a runtime [4mWATCH[24m command, tracking changes to specified
! 546: local or global variables
! 547:
! 548: +o Adding an [4mASSERT[24m command, which will fail with an error message
! 549: if the following expression evaluates [4mfalse[0m
! 550:
! 551: +o Removing the Steve Zeck symbol table implementation--which was
! 552: unreliable--and reverting to the original implementation
! 553:
! 554: +o Adding support for the GNU [4mreadline[24m library, with persistent
! 555: command line history and editing
! 556:
! 557: +o Adding REPL-like functionality (in direct mode, any M expres-
! 558: sion beginning with a number will be prepended with an implicit
! 559: [4mWRITE[24m)
! 560:
! 561: +o Adding transaction processing
! 562:
! 563: +o Adding [4mKVALUE[24m and [4mKSUBSCRIPTS[0m
! 564:
! 565: +o Preparing to support the [4mM[24m [4mWindowing[24m [4mAPI[24m (MWAPI)
! 566:
! 567: +o Adding the [4mfmadm[24m command-line utility, for system administra-
! 568: tion functions
! 569:
! 570: +o Adding support for after-image journaling and forward recovery
! 571: of globals
! 572:
! 573:
! 574:
! 575:
! 576:
! 577:
! 578:
! 579:
! 580:
! 581:
! 582:
! 583:
! 584:
! 585: -----------
! 586: [32] Smith, Arthur B., "Event Processing," X11/1998-28,
! 587: MUMPS Development Committee SC15/TG4 (28 Jun 1998). See
! 588: https://l.mumps.dev/f.
! 589:
! 590:
! 591:
! 592:
! 593:
! 594:
! 595:
! 596:
! 597:
! 598: -10-
! 599:
! 600:
! 601: +o Writing a [4mtexinfo[24m manual, from which the HTML manual is derived
! 602:
! 603: +o Porting to Solaris/SPARC, Solaris/x86, Linux/s390x,
! 604: Linux/armv6l, Linux/armv7l, SCO OpenServer 5.0.7, Tru64
! 605: UNIX/alpha, AIX/ppc, Mac OS X/x86, GNU HURD, Cygwin, NetBSD,
! 606: FreeBSD, OpenBSD, and WSL1/2
! 607:
! 608: In addition, the FreeM web site[33] was created, to distribute
! 609: downloads and documentation.
! 610:
! 611: [1m11. FUTURE[0m
! 612:
! 613: FreeM is envisioned as a client-oriented desktop M implemen-
! 614: tation, for developing graphical user interfaces that will run on
! 615: mobile and desktop devices.
! 616:
! 617: The author also intends to adopt the original vision of the
! 618: GUMP team, dividing FreeM's functionality into discrete compo-
! 619: nents having a well-specified public interface, with the ability
! 620: to run in distributed computing environments over a network.
! 621:
! 622: FreeM's mission is to advance the state-of-the-art in M im-
! 623: plementations, and push the evolution of the language forward.
! 624: Maintaining portability to as many vintage and modern UNIX sys-
! 625: tems as possible is held as a high priority, while portability of
! 626: M routines and MDC standards compliance will be maintained
! 627: through the use of the new [4m$ZDIALECT[24m intrinsic special variable
! 628: to ensure that such compliance does not conflict with the primary
! 629: goal of elegantly advancing the state-of-the-art and finding new
! 630: audiences for the concepts originated by Neil Pappalardo and Octo
! 631: Barnett in 1966.
! 632:
! 633: The FreeM project is also strongly committed to free soft-
! 634: ware principles, and is firmly aligned with the goals of the GNU
! 635: Project and the Free Software Foundation, believing that the eth-
! 636: ical concerns surrounding proprietary software are at least as
! 637: important as the practical concerns espoused by the Open Source
! 638: movement[34].
! 639:
! 640: [1m12. CONCLUSION[0m
! 641:
! 642: FreeM has seen a colorful and turbulent history, touched by
! 643: many capable hands. Though public development of any strain of
! 644: the implementation was dormant for nearly a decade, fourteen
! 645: years of almost continuous development have passed since the
! 646: project resumed in 2011, and a decade since official maintainer-
! 647: ship passed in 2014, and great progress has been made.
! 648:
! 649: -----------
! 650: [33] Willis, Serena, [4mFreeM,[24m Coherent Logic Development,
! 651: Las Cruces. See https://l.mumps.dev/o.
! 652: [34] Stallman, Richard M., "Free Software, Free Society:
! 653: Selected Essays of Richard M. Stallman" (1-882114-98-1),
! 654: p. 57, Free Software Foundation, Boston (2002).
! 655:
! 656:
! 657:
! 658:
! 659:
! 660:
! 661:
! 662:
! 663:
! 664: -11-
! 665:
! 666:
! 667: FreeM--as is the case for all M projects--presses forward in
! 668: a period where the future of the M programming language is uncer-
! 669: tain. M Development Committee efforts concurrent with FreeM de-
! 670: velopment have been sporadic and have missed many milestones, the
! 671: community's most prominent members are aging, and many organiza-
! 672: tions have migrated from large M applications to what is per-
! 673: ceived as more "modern" replacements.
! 674:
! 675: It is the opinion of the author that the tight integration
! 676: of an expressive and dynamic language with a robust and perfor-
! 677: mant persistent storage engine makes M a natural candidate for
! 678: many new and general applications. Modern application development
! 679: is plagued by overwhelming bars to entry, requiring mastery of
! 680: many languages and database management systems and the bulky in-
! 681: terfaces connecting them.
! 682:
! 683: Though not without significant warts accreted over the
! 684: years, M has no such overhead. Thus, FreeM seeks to press its
! 685: philosophical advantages by mitigating the language's accumulated
! 686: cruft, and adding clean interfaces addressing the needs of today.
! 687: With these goals in mind, development proceeds apace.
! 688:
! 689: [1m13. ACKNOWLEDGMENTS[0m
! 690:
! 691: Certainly, the intellects responsible for giving us M are
! 692: too numerous to mention by name, but their importance cannot be
! 693: overstated. The author would like to especially credit Lawrence
! 694: Landis for his early and innumerable contributions to her devel-
! 695: opment, both generally as a practitioner of software development,
! 696: and specifically for introducing her to the M programming lan-
! 697: guage, and inculcating in her a love of exploration and innova-
! 698: tion.
! 699:
! 700: To the author's wife, Miriam--a brilliant technologist in
! 701: her own right--and daughters (without whose inestimable patience
! 702: and understanding as the author buries herself in countless pas-
! 703: sion projects, such projects would not be possible) the deepest
! 704: and most profound gratitude and love are due.
! 705:
! 706:
! 707:
! 708:
! 709:
! 710:
! 711:
! 712:
! 713:
! 714:
! 715:
! 716:
! 717:
! 718:
! 719:
! 720:
! 721:
! 722:
! 723:
! 724:
! 725:
! 726:
! 727:
! 728:
! 729:
! 730: -12-
! 731:
! 732:
! 733: [1m14. COPYRIGHT AND LICENSE[0m
! 734:
! 735: This document is Copyright (C) 2025 Serena Willis
! 736:
! 737: Permission is granted to copy, distribute and/or modify this doc-
! 738: ument under the terms of the GNU Free Documentation License[35],
! 739: Version 1.3 or any later version published by the Free Software
! 740: Foundation; with no Invariant Sections, with no Front-Cover
! 741: texts, and with no Back-Cover Texts.
! 742:
! 743: [4m$Id:[24m [4mfreem_history.ms,v[24m [4m1.21[24m [4m2025/04/28[24m [4m14:42:52[24m [4msnw[24m [4mExp[24m [4m$[0m
! 744:
! 745:
! 746:
! 747:
! 748:
! 749:
! 750:
! 751:
! 752:
! 753:
! 754:
! 755:
! 756:
! 757:
! 758:
! 759:
! 760:
! 761:
! 762:
! 763:
! 764:
! 765:
! 766:
! 767:
! 768:
! 769:
! 770:
! 771:
! 772:
! 773:
! 774:
! 775:
! 776:
! 777:
! 778:
! 779:
! 780:
! 781:
! 782:
! 783:
! 784: -----------
! 785: [35] Free Software Foundation, [4mGNU[24m [4mFree[24m [4mDocumentation[24m [4mLi-[0m
! 786: [4mcense[24m [4m1.3,[24m Boston. See https://l.mumps.dev/p.
! 787:
! 788:
! 789:
! 790:
! 791:
! 792:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>