--- freem/README.md 2025/01/19 02:04:04 1.1 +++ freem/README.md 2025/05/17 17:04:22 1.4 @@ -14,7 +14,7 @@ FreeM has several unique features: FreeM started its life as FreeMUMPS, written for MS-DOS and ported to Linux and SCO UNIX by a mysterious individual going by the name of "Shalom ha-Ashkenaz". It was released to MUG/Deutschland in 1998, and maintenance was taken over by the GUMP (Generic Universal M Project) thereafter, which changed its name first to PSM (Public Standard MUMPS) and then by popular request to FreeM. -When GT.M was open-sourced in late 1999, FreeM and GUMP were essentially abandoned. L.D. Landis, the owner of the original GUMP SourceForge project, and one of FreeM's significant contributors, passed maintenance of FreeM and ownership of its SourceForge project to John Willis in 2015. At this point, FreeM would not compile or run on modern Linux systems, so steps were taken to remedy the most pressing issues in the codebase. Limitations on the terminal size (previously hard-coded to 80x25) were lifted, and new $VIEW functions were added to retrieve the terminal size information. $X and $Y intrinsic special variables were updated to support arbitrary terminal sizes, and FreeM was once again able to build and run. +When GT.M was open-sourced in late 1999, FreeM and GUMP were essentially abandoned. L.D. Landis, the owner of the original GUMP SourceForge project, and one of FreeM's significant contributors, passed maintenance of FreeM and ownership of its SourceForge project to Serena Willis in 2015. At this point, FreeM would not compile or run on modern Linux systems, so steps were taken to remedy the most pressing issues in the codebase. Limitations on the terminal size (previously hard-coded to 80x25) were lifted, and new $VIEW functions were added to retrieve the terminal size information. $X and $Y intrinsic special variables were updated to support arbitrary terminal sizes, and FreeM was once again able to build and run. ## License @@ -27,32 +27,65 @@ This program is distributed in the hope You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/. -This README document is Copyright (C) 2020 John P. Willis +This README document is Copyright (C) 2020, 2025 Serena Willis Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover texts, and with no Back-Cover Texts. -## Building +## Building and Installation -If you wish to build this software, and have downloaded it with git, you will need to run `autoreconf --install` prior to the first run of `./configure; make; sudo make install`. +FreeM has four methods of installation: -You will need GNU autotools, autoconf, texinfo and libtool, and optionally (but highly recommended), GNU readline (the development version, including the headers). +### Binary Repository +For recent versions of the Ubuntu and Debian distributions of GNU/Linux, we provide package repositories from which FreeM may easily be installed. See the [FreeM Wiki](https://freem-wiki.coherent-logic.com) for more information, and the [Coherent Logic package repository](https://packages.coherent-logic.com) for instructions. -The software is known to build and run on Linux (amd64, i386, armv6l, armv7l, aarch64, and s390x), SCO OpenServer 5.0.7, Solaris 10 (sparc64), Solaris 11.3 (sparc64), Solaris 11.4 (i86), GNU/Hurd 0.9 (i386), macOS Mojave (with the real gcc compiler installed), FreeBSD 12.1 (amd64), NetBSD 9.0 (vax and amd64), and OpenBSD 6.6 (amd64). +If available, this is the simplest method of installing FreeM. -## Running +### Binary Packages +We provide binary packages of FreeM for _dpkg_ and _rpm_-based distributions of GNU/Linux, and _pkgadd_ packages for Solaris 8-10 and Illumos distributions. If you cannot use repositories, this is the easiest option. -Before running any instance of the FreeM interpreter, you must launch the FreeM daemon, which coordinates shared memory access for the lock table, job table, and interprocess communication. This is accomplished by passing the `--daemon` flag to the `freem` executable. As the daemon is still under heavy development, we recommend also passing the `--nofork` flag to run the daemon in the foreground, e.g. `freem --daemon --nofork`. +See [Binaries](https://freem.coherent-logic.com/binaries.cfm) for downloads and instructions. -If FreeM hangs or otherwise goes sideways, kill the daemon and run the `cleanup_shm.sh` script in the root of the FreeM distribution. This will remove shared memory resources and allow you to start the daemon again. You may also need to run `tset` and/or `reset` after killing the daemon in order to restore terminal parameters to sane values. The particular incantation I use in development is `freem --daemon --nofork; tset`. I also like to run the daemon inside of either a dedicated terminal emulator tab or a dedicated GNU Screen window. Using `tmux` would likely work as well, though I do not use `tmux` and have not tested it. +### Source Tarball +If you prefer installing from source, we recommend that you download the latest _.tar.gz_ file from [Downloads](https://freem.coherent-logic.com/downloads.cfm) and follow these steps: -Once the daemon reaches a more complete state of development, these workarounds will no longer be required. +``` +$ gunzip freem-.tar.gz +$ tar xvf freem-.tar +$ cd freem +$ ./configure +$ make +$ sudo make install +``` -After the daemon is running correctly, FreeM instances may be launched as normal (i.e. without having `--daemon` passed to them). To minimize lock-ups of the daemon in this early phase of development, avoid killing FreeM processes with `kill -9`. +Once this is done, you may proceed to _Initial Configuration (Source Installs)_. + +### CVS +This installation method is by far the most complicated, and is intended only for those who wish to contribute to FreeM development. It is not intended for end users, and no technical support will be provided. + +See the _Contributor Guide_ on the [FreeM Wiki](https://freem-wiki.coherent-logic.com) for more information about this build type. + +If you wish to try the bleeding-edge development version of FreeM, you may do so by following these steps: + +``` +$ cvs -d :pserver:anonymous@cvs.coherent-logic.com:/home/cvsroot co freem +$ cd freem +$ ./autogen.sh +$ ./configure +$ make +$ sudo make install + +Once this is done, you may proceed to _Initial Configuration (Source Installs)_. + +## Initial Configuration (Source Installs) + +* Create a _freem_ user and a _freem_ group +* Add any accounts wishing to use FreeM to the _freem_ group +* Run `sudo fmadm configure` to generate the `DEFAULT` environment +* Run `sudo fmadm start environment` to start the `DEFAULT` environment -The daemon is being developed in order to improve the reliability of SSVNs like `^$JOB`, enable transaction processing, and improve the performance of `LOCK`. Eventually, the daemon will also coordinate database replication and allow for multiple environments running on the same host. ## Documentation @@ -72,6 +105,7 @@ Current contributors denoted with a plus * Greg Kreis (Hardhats coordination, Dependencies) * [Larry Landis](https://www.rosecroft.net) (Coordination, Code, Documentation) * Frederick D.S. Marshall (MDC Standards Conformance) + +* Ken McGlothlen (Apple Silicon build/test environment, proofreading of documentation) + * Lloyd Milligan (Code, Testing, Documentation) * Steve Morris (Code, Microsoft) * John Murray (Code, Conformance) @@ -82,5 +116,5 @@ Current contributors denoted with a plus * Dick Walters (Project Lead, Chief Coordinator, MTA) * David Whitten (QA Test Suite, MDC, Advice) + * [David Wicksell](https://gitlab.com/dlwicksell) (Debugging, Code, Testing) + -* John Willis (Current Maintainer and Project Lead) + +* Serena Willis (Current Maintainer and Project Lead) + * Steve Zeck (Contributions to Symbol Table Management, Code)