Annotation of papers/freem_history/freem_history.ms, revision 1.4

1.2       snw         1: \"
1.4     ! snw         2: \" $Id: freem_history.ms,v 1.3 2025/04/22 17:54:09 snw Exp $
1.2       snw         3: \"  History of FreeM
                      4: \"
                      5: \" Copyright (C) 2025 Serena Willis
                      6: \"
1.3       snw         7: \"   $Log: freem_history.ms,v $
1.4     ! snw         8: \"   Revision 1.3  2025/04/22 17:54:09  snw
        !             9: \"   Initial draft of FreeM History paper
        !            10: \"
1.3       snw        11: \"   Revision 1.2  2025/04/22 14:56:22  snw
                     12: \"   Add comment header to FreeM History
1.2       snw        13: \"
1.3       snw        14: \"
                     15: .R1
                     16: database ../references.bib
                     17: move-punctuation
                     18: .R2
1.1       snw        19: .TL
                     20: The History of FreeM
                     21: .AU
                     22: Serena Willis
                     23: .AI
                     24: Coherent Logic Development
                     25: .AB
1.4     ! snw        26: Since 2014, The author has been the maintainer of the primary fork of the FreeM implementation of the M programming language and persistent global storage engine. In this paper, we will share some of the history of FreeM, as well as its current status and goals.
1.1       snw        27: .AE
                     28: .SH
                     29: Initial Involvement
                     30: .PP
                     31: The author's mentor in computer programming and UNIX was Larry Landis, who got involved heavily in the M/MUMPS programming language ca. 1991. Mr. Landis promoted the M language to the author from 1991 forward, and first demonstrated FreeM to her in August 1998. In 2010, the author incorporated her company, Coherent Logic Development, learned M, and began doing contract work in M through Mr. Landis's company, Fourth Watch Software.
                     32: .PP
1.3       snw        33: Mr. Landis was the owner of FreeM's SourceForge repository
                     34: .[
                     35: gumpSF
                     36: .]
                     37: , which had not been touched in a number of years, following Fidelity National Information Services' decision to release GT.M under a free software license. In August 2011, the author downloaded the source code for FreeM and did enough work on it to enable building and running under modern GNU/Linux systems and posted it to the mumpster.org forums.
                     38: .[
                     39: freem014
                     40: .]
1.1       snw        41: .PP
                     42: In 2014, Mr. Landis gave the author administrator access to the FreeM SourceForge repository and transferred maintainership of the project to her.
1.3       snw        43: .[
                     44: gumpSF
                     45: .]
1.1       snw        46: .SH
                     47: Early History
                     48: .PP
1.3       snw        49: FreeM was developed in Germany in the mid-1990s by a developer who went by the pseudonym \fIShalom ha-Ashkenaz\fR, whose actual identity remains unknown,
                     50: .[
                     51: freemEvolutionShalom
                     52: .]
                     53: though it is thought by some that they are a dentist who learned C and developed FreeM on their own time. Shalom developed FreeM at a time when InterSystems Corporation (the company that developed the ISM implementation of M) was acquiring the majority of its  competitors and shutting them down.
                     54: .[
                     55: freemEvolutionISC
                     56: .]
                     57: . Shalom wished to provide a community-driven, open-source implementation of M as a bulwark against the growing threat of single-vendor hegemony over the M language. Its design\(emas well as some of the documentation included with the original sources\(emindicate that FreeM was originally targeted to the MS-DOS family of operating systems. It made use of a very limited subset of the C library, and included instructions for renaming the MS-DOS style 8.3 filenames in order to compile under UNIX.
                     58: .[
                     59: freemREADME
                     60: .]
                     61: .PP
                     62: At one point in FreeM's early history, Shalom ported FreeM from MS-DOS to SCO UNIX, the UNIX System V Release III-derived descendant of Microsoft XENIX, now known as SCO OpenServer\(ema platform still supported by FreeM today.
                     63: .[
                     64: portSCO
                     65: .]
                     66: This port brought support for the \fIscoansi\fR terminal type, including colors and ANSI X3.64 control mnemonics.
1.1       snw        67: .SH
                     68: Enter the GUMP
                     69: .PP
                     70: Around the time Shalom ha-Ashkenaz was developing FreeM, Richard F. Walters, a professor from U.C. Davis, conceived of the GUMP, an acronym standing for \fIGeneric Universal M Project\fR. The GUMP, following the object-oriented programming craze of the 1990s, was intended to be a toolkit allowing M implementations to be built from discrete components with a well-defined and well-specified public interface among these components. These components included the global handler (supplying the persistent functionality), and the interpreter/compiler (responsible for implementing M language commands). The components would have been able to communicate over a network, or in-process on the same host, enabling distributed computing functionality.
1.3       snw        71: .[
                     72: c2m
                     73: .]
                     74: .PP
                     75: Although the specification for the GUM interface to global handlers attained a reasonably well-specified level of completeness,
                     76: .[
                     77: gumapi
                     78: .]
                     79: and Larry Landis and others developed a mostly-complete implementation of a GUM global handler,
                     80: .[
                     81: gumpsrc
                     82: .]
                     83: none of the other envisioned components were ever completed, and specifically, the interpreter component was missing.
1.1       snw        84: .SH
                     85: Shalom's Gift
                     86: .PP
                     87: In July of 1998, Shalom ha-Ashkenaz donated the FreeM source code (then known as FreeMUMPS) to the M User's Group-Deutschland (MUG-D), hoping that the community would take the nascent implementation from its infancy through to a state of production-ready completeness and robustness. Shalom also placed a few conditions on his gift: a public release could not be made until a substantial set of milestones were reached. Per his conditions, the FreeMUMPS project must:
1.3       snw        88: .[
                     89: freemREADME
                     90: .]
1.1       snw        91: .IP \(bu 2
                     92: Implement the entirety of \fIANSI X11.1-1995\fR
                     93: .IP \(bu 2
                     94: Use Structured System Variables instead of \fIVIEW\fR commands and \fI$VIEW\fR functions
                     95: .IP \(bu 2
                     96: Raise the string size limits
                     97: .IP \(bu 2
                     98: Implement MWAPI, OMI, X11 bindings, and GKS bindings
                     99: .IP \(bu 2
                    100: Be substantially free of major bugs
                    101: .PP
                    102: Although MUG-D readily accepted the contribution of FreeMUMPS, the organization itself lacked the manpower and expertise to complete the implementation. Just as it is now, the intersection of M community members who know enough of the M language and C language to work on a project this ambitious was quite small.
                    103: .SH
                    104: Merging GUMP and FreeM
                    105: .PP
1.3       snw       106: Very shortly after the contribution of FreeMUMPS to MUG-D, Richard F. Walters and a small team of developers and administrative staff who had been working on the GUMP assumed maintainership of the FreeMUMPS source code.
                    107: .[
                    108: freemEvolutionShalom
                    109: .]
                    110: This included representatives from the \fIM Technology Association\fR (an M vendor association having several foreign branches), the \fIM Development Committee\fR (the M standards organization hosting the ANSI/ISO standards for the M language, then sponsored by the M Technology Association), and others.
                    111: .[
                    112: freemContributors
                    113: .]
                    114: The goals of this team were to:
1.1       snw       115: .IP \(bu 2
                    116: Meet Shalom's requirements for a public release of FreeMUMPS
                    117: .IP \(bu 2
                    118: Convert FreeMUMPS into the first interpreter component of the GUMP
                    119: .PP
1.3       snw       120: During this era, Ronald L. Fox of Diagnostic Laboratory Services in Honolulu, HI (who passed in 2010)
                    121: .[
                    122: ronFoxGrave
                    123: .]
                    124: ported FreeMUMPS from SCO UNIX to Red Hat 5 and glibc-6.
                    125: .[
                    126: ronFoxPort
                    127: .]
                    128: Steve "Saintly" Zeck of the U.C. Davis Veterinary Medical Teaching Hospital
                    129: .[
                    130: saintlyBio
                    131: .]
                    132: also attempted to rewrite the symbol table code to lift string size limits,
                    133: .[
                    134: saintlySymtab
                    135: .]
                    136: David Whitten enhanced some of the implementation-specific extensions, and Larry Landis integrated Saintly's symbol table work.
                    137: .PP
                    138: In FreeM 0.1.0, the name of the implementation was changed from FreeMUMPS to Public Standard M, a change which was changed to Free Standard MUMPS and then FreeM when it was discovered in the FreeM 0.2.0 release that the PSM acronym was already in use for Patterson & Gray's
                    139: .[
                    140: mdc_implementations
                    141: .]
                    142: M implementation.
                    143: .[
                    144: Changes.GUM
                    145: .]
                    146: Dr. Walters also received the implementation ID of 49 from then secretary of the M Development Committee, Don Piccone.
                    147: .[
                    148: Changes.GUM
                    149: .]
1.1       snw       150: .PP
                    151: One of the contributors to FreeM at this stage\(emmainly in the area of M vendor routines\(emwas Axel Trocha, who would go on to develop and maintain his own private fork of FreeM.
1.3       snw       152: .[
                    153: trochaFork
                    154: .]
1.1       snw       155: .SH
                    156: The GT.M Free Software Release
                    157: .PP
                    158: GT.M, an acronym for \fIGreystone Technology MUMPS\fR, is an M implementation that was released by Greystone Technology in 1986. Greystone was later acquired by Sanchez Computer Associates, which was in turn acquired by Fidelity National Information Services.
1.3       snw       159: .[
                    160: fisSanchezAcquisition
                    161: .]
                    162: .PP
                    163: When GT.M was released under the GNU General Public License in 2000,
                    164: .[
                    165: gtmRelease
                    166: .]
                    167: it seemed to negate the entire \fIraison d'etre\fR for FreeM, as GT.M was a well-established, robust, and high-performance M implementation with which FreeM could not then compete. Unfortunately, at this time, the GUMP and FreeM projects lost all of their momentum, and new development along these lines rapidly ceased. The final GUMP team release of FreeM was 0.5.0.
                    168: .[
                    169: freem050
                    170: .]
                    171: However, Axel Trocha's private port would continue to be developed for some years.
1.1       snw       172: .SH
                    173: Axel Trocha's Fork
                    174: .PP
                    175: After FreeM's momentum ceased within the primary branch of development under Richard F. Walters' leadership, Axel Trocha, an aforementioned contributor of M vendor routines and member of Dr. Walters' team, continued development on the FreeM source code. Axel added many interesting features to the FreeM codebase, including:
                    176: .IP \(bu 2
                    177: A native port to Microsoft Windows
                    178: .IP \(bu 2
                    179: Compiling FreeM as an Apache web server module, allowing FreeM to be used easily for web development
                    180: .IP \(bu 2
                    181: The ability to output HTML code in a heredoc-style format, with any line of code beginning with a left angle bracket being interpreted as HTML with support for interpolated M locals and globals
                    182: .IP \(bu 2
                    183: Extensions allowing FreeM to be used as a command-line shell, along the lines of UNIX \fIbash\fR, Windows \fIcmd.exe\fR, etc.
                    184: .PP
1.3       snw       185: Axel also maintains ownership of the \fIfreem.net\fR Internet domain,
                    186: .[
                    187: trochaDomain
                    188: .]
1.4     ! snw       189: and continued issuing public releases of his FreeM port on that site until sometime after 2004, at which point he took his port entirely private. Currently, freem.net is a blank page. However, Axel's fork of FreeM continues to this day as the back-end storage engine and programming environment for the www.elvenrunes.de website.
1.3       snw       190: .[
                    191: elvenRunes
                    192: .]
                    193: I have communicated with Axel on occasion.
1.1       snw       194: .SH
                    195: Resuming Primary Development Branch
                    196: .PP
                    197: In 2011, the author downloaded the FreeM source code from the GUM Project's SourceForge repository\(emdormant since 2000\(emand updated it just enough that it would compile and run on modern GNU/Linux systems. The author also quickly updated FreeM to support terminal sizes larger than 80x24.
                    198: .SH
                    199: Taking Maintainership
                    200: .PP
                    201: In 2014, Larry Landis transferred administrative access of the GUMP repository, conferring maintainership of the primary branch of FreeM development to the author. Since then, many features have been added and many bugs corrected, including:
1.3       snw       202: .IP \(bu 2
                    203: Adding support for proper namespaces, configured through a \fIfreem.conf\fR file, which standardizes routine and global storage locations
                    204: .IP \(bu 2
                    205: Adding support for Structured System Variables
                    206: .IP \(bu 2
                    207: Adding support for the asynchronous event specification from MDC Type A proposal \fIX11/1998-28\fR
                    208: .[
                    209: x119828
                    210: .]
                    211: .IP \(bu 2
                    212: Adding support for constants via the \fICONST\fR keyword
                    213: .IP \(bu 2
                    214: Adding a \fIWITH\fR command allowing the specification of an implicit prefix to all subsequent variable references
                    215: .IP \(bu 2
                    216: Adding a runtime \fIWATCH\fR command, tracking changes to specified local or global variables
                    217: .IP \(bu 2
                    218: Adding an \fIASSERT\fR command, which will fail with an error message if the following expression evaluates \fIfalse\fR
                    219: .IP \(bu 2
                    220: Removing the Steve Zeck symbol table implementation\(emwhich was unreliable\(emand reverting to the original implementation
                    221: .IP \(bu 2
                    222: Adding support for the GNU \fIreadline\fR library, with persistent command line history and editing
                    223: .IP \(bu 2
                    224: Adding REPL-like functionality (in direct mode, any M expression beginning with a number will be prepended with an implicit \fIWRITE\fR)
                    225: .IP \(bu 2
                    226: Adding transaction processing
                    227: .IP \(bu 2
                    228: Adding \fIKVALUE\fR and \fIKSUBSCRIPTS\fR
                    229: .IP \(bu 2
                    230: Preparing to support the \fIM Windowing API\fR (MWAPI)
                    231: .IP \(bu 2
                    232: Adding the \fIfmadm\fR command-line utility, for system administration functions
                    233: .IP \(bu 2
                    234: Adding support for after-image journaling and forward recovery of globals
                    235: .IP \(bu 2
                    236: Writing a \fItexinfo\fR manual, from which the HTML manual is derived
                    237: .IP \(bu 2
                    238: Porting to Solaris/SPARC, Solaris/x86, Linux/s390x, Linux/armv6l, Linux/armv7l, SCO OpenServer 5.0.7, Tru64 UNIX/alpha, AIX/ppc, Mac OS X/x86, GNU HURD, Cygwin, NetBSD, FreeBSD, OpenBSD, and WSL1/2
                    239: .PP
                    240: Also, the FreeM web site
                    241: .[
                    242: freemWebsite
                    243: .]
                    244: was created, to distribute downloads and documentation.
                    245: .SH
                    246: Future
                    247: .PP
                    248: FreeM is moving towards being a client-oriented desktop M implementation, for developing graphical user interfaces that will run on mobile and desktop devices.
                    249: .PP
                    250: The author also intends to adopt the original vision of the GUMP team, dividing FreeM's functionality into discrete components having a well-specified public interface, with the ability to run in distributed computing environments over a network.
                    251: .PP
                    252: FreeM's mission is to advance the state-of-the-art in M implementations, and push the evolution of the language forward. Maintaining portability to as many vintage and modern UNIX systems as possible is held as a high priority, while portability of M routines and MDC standards compliance will be maintained through the use of the new \fI$ZDIALECT\fR intrinsic special variable to ensure that such compliance does not conflict with the primary goal of elegantly advancing the state-of-the-art and finding new audiences for the concepts originated by Neil Pappalardo and Octo Barnett in 1966.
                    253: .PP
                    254: The FreeM project is also strongly committed to free software principles, and is firmly aligned with the goals of the GNU Project and the Free Software Foundation, believing that the ethical concerns surrounding proprietary software are at least as important as the practical concerns espoused by the Open Source movement.
                    255: .[
                    256: whyFreeSoftware
                    257: .]

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>