Menu

Tree [1608f9] master staging /
 History

HTTPS access


File Date Author Commit
 build-aux 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [f0182e] build: Update release procedure.
 doc 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [c824c6] doc: Add `ANNOUNCE-0.24.2'.
 guix 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [1608f9] guix: mes: Update to 0.24.2.
 include 2022-10-29 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [bc1fa5] lib: stat: Use SYS_stat64 for 32bit platforms.
 lib 2023-02-12 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [43fe67] lib: Fix compile warnings.
 mes 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [756233] build: Release 0.24.2.
 module 2022-10-19 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [cfb620] mescc: Fix Guile warnings.
 scaffold 2022-05-07 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [ec1222] scaffold: Remove obsolete malloc.
 scripts 2020-12-15 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [8b2c4d] mescc: Make sure includedir, libdir are set.
 src 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [756233] build: Release 0.24.2.
 tests 2020-12-30 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [94643f] mes: Remove PEG.
 .dir-locals.el 2020-12-30 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [ed62c4] .dir-locals: Add test macro indentation.
 .gitignore 2022-10-29 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [bc1fa5] lib: stat: Use SYS_stat64 for 32bit platforms.
 AUTHORS 2021-01-02 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [c82c8d] doc: Update 'AUTHORS'.
 BLURB 2019-11-04 Jan Nieuwenhuizen Jan Nieuwenhuizen [ac9c18] doc: Release update.
 BOOTSTRAP 2021-05-22 Andrius Štikonas Andrius Štikonas [f553d8] doc: Migration to Libera Chat.
 COPYING 2022-10-30 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [c1f93c] doc: Use HTTPS.
 ChangeLog 2018-07-26 Jan Nieuwenhuizen Jan Nieuwenhuizen [f68b16] Add missing copyright headers and READMEs.
 HACKING 2022-10-30 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [c1f93c] doc: Use HTTPS.
 INSTALL 2022-04-30 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [28a828] doc: Update dependencies, add M2-Planet.
 NEWS 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [029a89] doc: Update `NEWS'.
 PORTING 2022-06-01 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [ac1fab] doc: Update `PORTING'.
 README 2022-10-30 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [c1f93c] doc: Use HTTPS.
 ROADMAP 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [56fed8] doc: Update `ROADMAP'.
 configure 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [756233] build: Release 0.24.2.
 configure.sh 2023-02-13 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [756233] build: Release 0.24.2.
 guix.scm 2022-04-30 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [796dc2] doc: Use `guix shell' instead of `guix environm...
 kaem.run 2022-10-29 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [bc1fa5] lib: stat: Use SYS_stat64 for 32bit platforms.
 simple.make 2022-05-03 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [5f73e6] simple.make: Resurrect.
 simple.sh 2022-10-29 Jan (janneke) Nieuwenhuizen Jan (janneke) Nieuwenhuizen [bc1fa5] lib: stat: Use SYS_stat64 for 32bit platforms.

Read Me

#+COMMENT:                                                            -*- org -*-
#+TITLE: About GNU Mes

#+SUBTITLE: Maxwell Equations of Software

[[https://www.gnu.org/software/mes][GNU Mes]] is a Scheme interpreter and C compiler for bootstrapping the GNU
System.  Since version 0.22 it has again helped to halve the size of
opaque, uninspectable binary seeds that are currently being used in the
[[https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25][Further Reduced Binary Seed bootstrap]] of [[https://www.gnu.org/software/guix][GNU Guix]].  The final goal is to
help create a full-source bootstrap as part of the [[https://bootstrappable.org][bootstrappable builds]]
effort for UNIX-like operating systems.

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 [[https://github.com/oriansj/m2-planet][M2-Planet]] and [[https://savannah.nongnu.org/projects/mescc-tools][Mescc-Tools]].

Mes has a Garbage Collector, a library of loadable Scheme modules--
notably Dominique Boucher's [[https://github.com/schemeway/lalr-scm][LALR]], Pre-R6RS [[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][portable syntax-case]] with
R7RS ellipsis, Matt Wette's [[https://www.nongnu.org/nyacc][Nyacc]] --and test suite, just enough to
support a REPL and a C99 compiler: mescc.

Mes + MesCC + Mes C Library can build a [[https://gitlab.com/janneke/tinycc][bootstrappable TinyCC]] that is
self-hosting.  Using this tcc and the Mes C library we now have a
Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5,
binutils-2.20.1, gcc-2.95.3.  This is enough to bootstrap Guix for
i686-linux, x86_64-linux, armhf-linux and aarch64-linux.

Mes is inspired by The Maxwell Equations of Software: [[https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf][LISP-1.5]] -- John
McCarthy page 13, GNU Guix's source/binary packaging transparency and
Jeremiah Orians's [[https://github.com/oriansj/stage0][stage0]] ~500 byte self-hosting hex assembler.

We are very grateful to NLNet for sponsoring the [[https://nlnet.nl/project/GNUMes][Reduced Binary Seed
bootstrap]], the [[https://nlnet.nl/project/GNUMes-arm][ARM port]], and the [[https://nlnet.nl/project/GNUMes-ARM_RISC-V][Full Source Bootstrap.]]

GNU Mes is free software, it is distributed under the terms of the GNU
General Public Licence version 3 or later.  See the file [[file:COPYING][COPYING]].

* Get it

   #+BEGIN_SRC bash
   git clone git://git.savannah.gnu.org/mes.git
   #+END_SRC

* Build it (see [[file:INSTALL][INSTALL]] for full instructions)

   #+BEGIN_SRC bash
   ./configure
   make all
   make check
   #+END_SRC

* REPL it

   #+BEGIN_SRC bash
   ./pre-inst-env mes
   #+END_SRC

* MesCC compiler

   #+BEGIN_SRC bash
   ./pre-inst-env mescc -c scaffold/main.c
   #+END_SRC

* Bugs

    Please send Mes bug reports to [[mailto:bug-mes@gnu.org][bug-mes@gnu.org]].

* Links
  [0] https://www.gnu.org/software/mes
  [1] https://guix.gnu.org/blog/2020/guix-further-reduces-bootstrap-seed-to-25
  [2] https://www.gnu.org/software/guix
  [3] https://bootstrappable.org
  [4] https://github.com/oriansj/m2-planet
  [5] https://savannah.nongnu.org/projects/mescc-tools
  [6] https://github.com/schemeway/lalr-scm
  [7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
  [8] https://www.nongnu.org/nyacc
  [9] https://gitlab.com/janneke/tinycc
  [10] [[https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf]]
  [11] https://savannah.nongnu.org/projects/stage0
  [12] https://nlnet.nl/project/GNUMes
  [13] https://nlnet.nl/project/GNUMes-arm
  [14] https://nlnet.nl/project/GNUMes-ARM_RISC-V

* Legalese
Copyright © 2016,2017,2018,2019,2020,2021,2022 Jan (janneke) Nieuwenhuizen <[[mailto:janneke@gnu.org][janneke@gnu.org]]>

  Copying and distribution of this file, with or without modification,
  are permitted in any medium without royalty provided the copyright
  notice and this notice are preserved.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.