GNU Mes is a Scheme interpreter and C compiler for bootstrapping the GNU System. It has helped to decimate the number and size of binary seeds that were used in the bootstrap of GNU Guix 1.0. Recently, version 0.24.2 has realized the first Full Source Bootstrap for Guix. The final goal is to help create a full source bootstrap as part of the bootstrappable builds effort for any UNIX-like operating system.

The Scheme interpreter is written in ~5,000 LOC of simple C, and the C compiler written in Scheme and these are mutual self-hosting. Mes can now be bootstrapped from M2-Planet and Mescc-Tools.

Mes has a Garbage Collector, a library of loadable Scheme modules– notably Dominique Boucher's LALR, Pre-R6RS portable syntax-case with R7RS ellipsis, Matt Wette's Nyacc –and test suite, just enough to support a REPL and a C99 compiler: mescc.

Mes + MesCC + Mes C Library can build a bootstrappable TinyCC that is self-hosting. Using this bootstrappable-tcc and the Mes C library we can build an ancient version of the GNU tools triplet: glibc-2.2.5, binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for i686-linux, x8664-linux, armhf-linux and aarch64-linux.

Mes was inspired by The Maxwell Equations of Software: LISP-1.5 – John McCarthy page 13, Guix's source/binary packaging transparency and Jeremiah Orians's stage0, a ~500-byte self-hosting hex assembler.

We are very grateful to NLNet for sponsoring the Reduced Binary Seed bootstrap, the ARM port, and the Full Source Bootstrap. Logo NGI Zero: letterlogo shaped like a tag

GNU Mes is free software, it is distributed under the terms of the GNU General Public Licence version 3 or later.

Downloading Mes

git clone

Mes can be found on the main GNU ftp server: (via HTTP) and (via FTP). It can also be found on the GNU mirrors; please use a mirror if possible.


Documentation for Mes is available online, as is documentation for most GNU software. You may also find more information about Mes by running info mes or man mes, or by looking at <prefix>/share/doc/mes/, /usr/doc/mes/, /usr/local/doc/mes/, or similar directories on your system. A brief summary is available by running mes --help.

Mailing lists

Mes uses the following mailing lists:

Announcements about Mes and most other GNU software are made on info-gnu (archive).

Security reports that should not be made immediately public can be sent directly to the maintainer. If there is no response to an urgent issue, you can escalate to the general security mailing list for advice.

Getting involved

Development of Mes, and GNU in general, is a volunteer effort, and you can contribute. For information, please read How to help GNU. If you'd like to get involved, it's a good idea to join the discussion mailing list (see above).

Join the #bootstrappable channel on the Libera Chat IRC network to chat with the Bootstrappable and GNU Mes community or to get help in real time.

Test releases
Trying the latest test release (when available) is always appreciated. Test releases of Mes can be found at (via HTTPS) and (via FTP).
For development sources, issue trackers, and other information, please see the Mes project page at
Mes is currently being maintained by Janneke Nieuwenhuizen. Please use the mailing lists for contact.


Mes is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.