Critical Mass Modula-3 (CM3)

Welcome to the official home page of Critical Mass Modula-3 (CM3).

(Google results open in new window)

What is CM3?

CM3 is the first open source release of Critical Mass Modula-3. It is a complete easy-to-use and easy-to-install Modula-3 system that contains considerable enhancements over its ancestor DEC SRC Modula-3. Read About CM3 to learn more.

All the sources are available under the free DEC SRC style copyright. Please read COPYRIGHT-CMASS and COPYRIGHT-DEC. Elego Software Solutions has supported the CM3 project but does not own any copyrights; the release of the code has been done on request and with explicit authorization from Critical Mass, Inc.

Please read all the available information before downloading any archives.

What is Modula-3

This paragraph is borrowed from the Modula-3 FAQ.

Modula-3 is a systems programming language that descends from Mesa, Modula-2, Cedar, and Modula-2+. It also resembles its cousins Object Pascal, Oberon, and Euclid.

The goal of Modula-3 is to be as simple and safe as it can be while meeting the needs of modern systems programmers. Instead of exploring new features, we studied the features of the Modula family of languages that have proven themselves in practice and tried to simplify them into a harmonious language. We found that most of the successful features were aimed at one of two main goals: greater robustness, and a simpler, more systematic type system.

Modula-3 retains one of Modula-2's most successful features, the provision for explicit interfaces between modules. It adds objects and classes, exception handling, garbage collection, lightweight processes (or threads), and the isolation of unsafe features.


News About CM3 CM3 IF Changes and Performance
About Reactor CM3 5.X Documentation Installation Notes
Upgrading CM3 Things To Do Package Status
Known Problems Booting CM3 using M3 Porting CM3
Download Downloading CM3 with CVSup Downloading CM3 with Anonymous CVS
CM3 CVS Repository online CM3 Configuration Management Rules CM3 Problem Report
M3 Mailing Lists Plans CM3 and Elego ComPact
Complete CM3 CVS ChangeLog Tinderbox Regression Tests

Contributions and Acknowledgements

A lot of people have contributed to the original M3 release by DEC SRC, and the 5.1 code release is almost entirely the work of members of Critical Mass. I don't know all the names and cannot provide a list here. It would also not have been possible for me to setup this distribution without PM3 Modula-3.

Several people have contributed to the open source releases of CM3 5.1, 5.2, 5.3 and 5.4 since the announcement of its availability for test. The latest release notes contain some names, but I still haven't got around to provide a complete list. Please don't be annoyed if you don't find your name mentioned here yet; just send me some lines with the contributions you would like to be mentioned, and I'll put together a list and publish it.

A Note about Reactor

Critical Mass used to distribute their CM3 compiler as the core component of the Reactor GUI. Unfortunately, this software is not available yet as open source. (Actually, we do have the sources, but no permission yet to distribute them.) We're working on the issue, but cannot give any estimate about an open source release date for Reactor.



Some new bootstrap archives are now available from the download page labelled d5.5.0. This should help overcome the problems people run into when trying to build the current sources with the 5.4.0 release. Since the last release the compiler has been extended by a 64 bit LONGINT type; work on the threading system and garbage collector has continued. This makes updating to current sources a bit more difficult. See the recently added CM3 ChangeLog for details.

This is no official release with the usual release engineering and testing, but just some compilations from the current CVS head. Nonetheless installations with these archives may be much easier for unexperienced users.

Hopefully more archives will be built during the next days.


The CM3 5.4.0 release is now available from the download page. The release announcement didn't make it into the 5.4.0 download archives, but is available online.


There is now a web page about the status of the upcoming cm3 5.4 release.


Recently, a lot of work has been done on CM3, its compiler, runtime, and further library support, which hasn't been communicated very well to interested parties. For some time, only development snapshots have been available as releases. The next complete release will be 5.4 and will very likely contain the following features:

I'm pretty sure this list is still incomplete and should be extended by the contributor's.


Rodney M. Bates provides a new version of the m3gdb debugger. This version of m3gdb is based on gdb version 6.4. It is available for download from this site.


A new version d5.3.2 for CM3 is available for download from this website for the following OSs


Stefan Sperling added support for NetBSD 2.x. His installation archive can be found at cm3-min-POSIX-NetBSD2_i386-d5.2.7-2005-03-31.tgz At this stage, bug reports should be sent directly to stsp at elego dot de.


A new pre-release archive for CM3 5.2.7, labelled d5.2.7-2005-03-31, has been put up for HTTP access. The d5.2.7-2005-03-31 release fixes several bugs on recent Linux distributions, like Fedora 3 and Gentoo Linux.

It has been compiled and tested on the following Linux systems:


Several pre-release archives for CM3 5.2.7, labelled d5.2.7-2004-10-31, have been put up for HTTP access. So far, d5.2.7-2004-10-31 has been compiled successfully on the following systems:

Patches to compile CVSup with this latest release have also been put up on the download page.


As the binary installation archive for the SOLgnu platform of the cm3 5.2.6 release contained compilation errors for which there is no workaround, the archive has been replaced with cm3-min-POSIX-SOLgnu-d5.2.7.tgz which is a snapshot of the current development tree and can be used instead.


CM3 5.2.6 has been released. Apart from the new target platform PPC_LINUX (Linux running on PowerPCs), this release contains an upgrade of the code generator to gcc 3.2.3, errno fixes for the latest glibc versions, and several more bug fixes and small extensions. Have a look at the RELNOTES_5_2_6 for details.


Additional information about know problem for the 5.2.X releases of CM3 has been added to the Known Problems page.


CM3 5.2.4 has been released. This is a maintenance release with several bug fixes and small extensions. Have a look at the RELNOTES_5_2_4 for details.


CM3 5.2.0 has been released. It features a completely new code generation back-end based on gcc 3.2.1 and support for the new target platform PPC_DARWIN (Darwin, MacOS X on PowerPC). The new code generator has one flaw: it cannot work with the table based exception frame implementation of the current front end, so this needs to be re-done. As a consequence, the new back-end is not recommended for all target platforms supporting stack walkers. This release is made to make support for the new target platform available for everybody. See RELNOTES_5_2_0 for details.


The document archive has been updated. cm3-doc-5.1.8.tgz now contains all the current generated package documentation as of 2002-04-08. CM3 now also includes m3browser, the well-known HTTP server that generates HTML documentation about installed packages on the fly, fully cross-referenced down to the type-level. m3browser has been imported from the PM3 distribution, together with the packages m3scan and m3markup, all of which reside in m3-tools. At the same time, some buffer implementations used in several packages have been extracted into their own library, libbuf. These changes are currently only available via CVS and CVSup.


I've added another 5.1.8 fix archive for those without CVSup and CVS ambitions. This archive contains all changed files since the 5.1.8 release of CM3.


You can now browse the CM3 CVS repository online with your webbrowser.


A bug in the binary installation archives of 5.1.8 for all POSIX platforms has been found. It is easy to fix, though. See 4.2 [Release 5.1.8] Linkage failure on POSIX platforms due to wrong paths (/pub/lang/m3/cm3-dist) in binary installation archives for details. As this can be easily corrected manually after the installation, no new distribution archives have been created.


The master CVS repository for CM3 has been moved to This means that everybody who wants to work on the CM3 sources directly can get write access if he provides an ssh key (protocol version 2 (DSA) preferred). Send email to m3-support{at} if you are interested, and have a look at the CM3 configuration management rules.


A bug in the installation program has been fixed. See 4.1 Linkage failure: missing -L before library paths (installer bug) for details. As this can be easily corrected manually after the installation, no new distribution archives have been created.


As always with new releases, some bugs appear right after creating the archives :-( Instead of building new release archives, I've created a 5.1.8 fix archive for those without CVSup and CVS ambitions.


CM3 5.1.8 has been released. New distribution archives have been placed on the servers for most of the active platforms. Changes include bug-fixes to the compiler (backend and quake interpreter), extraction of the system call wrappers from m3core into m3gc-enhanced, and addition of and fixes for lots of packages, concerning obliq, shared objects, graphics, and general useful libraries. A more detailed list of the changes can be found here.


Some new distribution archives have been placed on the server, including some fixes to the compiler and documentation. The current release number is now 5.1.6. Those who have installed 5.1.3 or 5.1.4 should rather get the updates via CVSup or CVS than download the big distribution archives. Not all binary installation packages have been rebuilt and updated yet; a full build will probably be deferred until some of the more substantial changes currently in work are finished.


In addition to CVSup access, now anonymous CVS pserver access has been set up, too.


src-update-2001-09-19.tgz has been added, which adds a fix for compilation of m3core on Linux systems using glibc 2.2, some minor package fixes, and the parser tools and template generator distribution from the California Institute of Technology, contributed by Karl Papadantonakis.

Some progress has been made on improving the infrastructure of the cm3 source distribution: A cm3 CVSup server has been installed, and the cm3 repository is replicated once every night. As there are still unresolved issues with the domain registration for the machine the server is located on, it can currently only be contacted as or via IP number The CVSup server currently knows about the collections cm3, cm3-caltech-parser, cm3-doc, cm3-m3-comm, cm3-m3-db, cm3-m3-demo, cm3-m3-games, cm3-m3-lectern, cm3-m3-libs, cm3-m3-mail, cm3-m3-obliq, cm3-m3-pkgtools, cm3-m3-sys, cm3-m3-tools, cm3-m3-ui, cm3-m3-www, cm3-scripts, cm3-www. Anonymous CVS pserver access will be added soon, too.


src-update-2001-05-12.tgz has been added, which contains the differences between releases 5.1.3 and 5.1.4. These are: (1) A fix for m3core/src/text/TextSub.m3, (2) the addition of the Juno-2 packages, which contain a graphical constraint based editor, (3) a do-cm3-std.bat script (untested), and (4) several minor script fixes and improvements.

5.1.4 is also available as the source archive cm3-src-std-5.1.4.tgz, and as a binary installation archive for FreeBSD3. I haven't yet been able to build more distribution archives, but hope to get round to it next week. This should be no big problem, since everybody can easily use the update archive to upgrade his/her system.


Put up another binary installation archive for WIN32, cm3-min-WIN32-NT386-5.1.3a.tgz, for download. The libraries and programs in this archive are built with a recent version of the Microsoft C tools.


A simple build script for NT/Win2000 cmd shells has been added to the latest scripts archive. Some obsolete passages from the web pages have been removed, and some final adjustments before the official release have been made.


The first archives of the official CM3 5.1.3 release have been created. CM3 5.1.3 contains a work-around for the DLL creation / linker problem on NT386 (which actually seems to be a C compiler problem), a last-minute fix for dynamic linked executable on LINUXLIBC6, an almost completely fixed HTML documentation tree, and several minor fixes. The binary installation still supports only four platforms: NT386 Windows 95/98/ME/NT/2000 on x86), LINUXLIBC6 (Linux with glibc 2.1 on x86), FreeBSD3 (FreeBSD 3.X (4.X, 5.X?)) on x86, and Solaris (SunOS 5.6, 5.7, 5.8) on SPARC. On all these platforms dynamic linking and incremental and generational garbage collection is implemented.

Once all archives are created and uploaded, some old stuff will be removed, cm3-unofficial will be renamed cm3, and an announcement will be posted to the m3 newsgroup.


A chapter about CM3 5.1 Interface Changes and Performance has been added, as well as some updates to the TODO lists.

A new source update archive src-update-2001-03-11.tgz has also been created which contains the following latest changes: updates and fixes for packages cm3 (minimal profiling support for some POSIX systems), cminstall (win32 improvements), libm3 (changed ProcessWin32 module), m3core (FreeBSD4 dtoa fix), scripts, and CMASS copyright texts.

The scripts archive has been updated, too.


Added a new installer for WIN32 which replaces filenames with spaces by their 8.3 equivalent.

2001-03-01 (20 hours later)

Several source and binary distributions have been upgraded to patch level 1 (cm3 5.1.1). This patch level includes all the fixes and extensions prior to 2001-03-01 (described below) plus the following recent changes:

The TODO and package status lists have been updated. Some platform notes have been added on the installation page.


A problem report page has been added. Problem reports will be sent to the GNATS database at elego Software Solutions GmbH.


The most important news is that now documentation is available for CM3 5.1. Much is still missing and not everything is up-to-date, but there is a complete set of documents for all standard packages and interfaces; the nice interfaces overview page from Critical Mass' Reactor distribution has been updated.

The m3tohtml program (which was broken due to several interface changes in the standard libraries) has been fixed. I have also added a user-friendlier frontend, some documentation (try `-h'), and made it more robust. It has been used to generate all the current package documentation in HTML, and you should also be able to use it for your own purposes without much effort.


Several items have been added today:

A binary boot archive for the SOLgnu target (SunOS on SPARC) is now available. See the Download Page.

About CM3 5.1 · CM3 5.1 IF Changes and Performance · CM3 5.1 Documentation · Installation Notes · Upgrading · Things to do · Package Status · Known Problems · Booting CM3 using M3 · Porting CM3 · CM3 and Elego ComPact · CM3 Problem Report · Download · CVSup Access · CVS PServer Access · CM3 Configuration Management Rules· M3 Mailing Lists · Plans