                                                              -*- org -*-
#+TITLE: Tentative GNU Mes Road Map

Copyright © 2016-2023,2026 Janneke Nieuwenhuizen <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.

The goals of the GNU Mes project are two-fold:

  - to bootstrap the GNU System purely from source, without using any binary
    seeds.

  - to aid the Reproducible-Builds.org effort; demonstrate the impact and
    importance of GNU and Software Freedom.

Since its inception, the project has gone a long way towards that goal.  Below
is a list of items we want for version "1.0" of GNU Mes.

You're welcome to discuss this road map on bug-mes@gnu.org or #bootstrappable
on Libera Chat!

* TODO
** 0.27.2
  - Accumulated bugfixes for last classic, interpreter-based Mes.
** 0.28
  - Change/re-invent/reshape Mes interpreter into a compiler.
  - Cleanup eval-apply.c.
** 0.29
  - Support unity build.
  - Bignum support.
** 0.30
  - Syntax-Case/R5RS/R7RS support: integrate popsyntax https://git.ngyro.com/popsyntax/.
** 1.0
  - Support native x86_64 bootstrap.
  - Support native Aarch64 bootstrap.
  - Support building of upstream tinycc in the bootstrap.
** 2.0
  - Split-off Mes C Library.
  - Split-off Mes CC.
  - Use BLUE build for development, see https://codeberg.org/lapislazuli/blue/.
** after release 2.0
  - Remove stage0 dependency
    + Bootstrap from s-exp'y assembly, see https://git.ngyro.com/germ/.
    + Use Scheme assember and linker.
  - Replace the initial gcc-2.95.3 with gcc-4.6.4.
  - Remove Guile as a dependency for the Guix Full Source Bootstrap.
  - Integrate Full Source bootstrap for ARM on GNU Guix.
  - Integrate Reduced Binary Seed bootstrap for ARM on GNU Guix.
  - Introduce the Reduced Binary Seed bootstrap to NixOS (Debian,
    Arch, Gentoo, ...?).
  - Build Guix packages using Mes: run or simplify (guix build utils),
    (guix build gnu-build-system).
  - Build Guix packages without guix-daemon.  See Ludovic's initrd build
    work.
  - Bootstrap support for the Hurd.  Most needed now are fork and exec.
  - FreeBSD, *BSD?
  - Skip Tiny CC: Build gcc using MesCC.
  - Better garbage collector.
  - mes/mescc: proper docstrings, api reference documentation.
  - mes/mescc: bootstrap a minimal Guile?
    + libguile/{eval,init,list,strings,values,..}.
    + ice-9/eval.scm
* DONE
  - 0.26 Full Guile module support.
  - 0.26 Run Gash and Gash-Utils on Mes.
  - 0.25: RISC-V support: Mes C Library and MesCC.
  - 0.24: Full Source Bootstrap:
    + integrate into GNU Guix; see branch wip-full-source-bootstrap.
  - 0.23 Full Source Bootstrap:
    + compile mes.c using M2-Planet; see branch wip-m2,
  - GNU Mes now supports building Tiny CC on ARM.
  - Merge the Scheme-only bootstrap which uses Gash and Gash Core
    Utilities to remove from bootstrap-binary seed : Awk, Bash, Core
    Utilities, Grep, Gzip, Sed, Tar.
  - 0.22 GNU Mes now builds reproducibly cross-platform, runs on the
    Hurd and has better support for other distributions and kernels.
  - 0.21 GNU Mes now supports a Scheme-only bootstrap and is packaged in
    Debian GNU/Linux.
  - 0.20 GNU Mes brings the Reduced Binary Source bootstrap to Guix.
  - 0.19 GNU Mes now compiles TinyCC in ~8min and supports building Bash and
    GNU Tar.
  - 0.18 GNU Mes now supports GuixSD bootstrap (x86,x86_64) and has native
    x86_64 support.
  - 0.17.1 GNU Mes now allows removing glibc, binutils and gcc from the GuixSD
    bootstrap.
  - 0.17 GNU Mes is now an official GNU project and bootstraps gcc-4.7.4.
  - 0.16.1 Mes now has info docs and installs ootb on Debian buster/testing.
  - 0.16 Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
  - 0.15: MesCC now has a libc+gnu that supports compiling binutils-2.14,
    gcc-2.95.3 and glibc-2.2.5.
  - 0.14: Mes+MesCC now compiles a slightly patched self-hosting tcc.
  - 0.13: Mes+MesCC now compiles a modified, functional tcc.c (~25,000LOC) in
    1h30'.
  - 0.12: Mes+MesCC now compiles mes.c (~3000LOC) in ~4min.
  - 0.11: MesCC now compiles a mes-tcc that passes 26/69 of mescc's C tests.
  - 0.10: Mescc now compiles a mes-tcc that compiles a trivial C to a running
    a.out.
  - 0.9: Mescc now writes M1 macro assembly files and compiles tcc.
  - 0.8: Mescc now writes object files in stage0's labeled hex2 format.
  - 0.7: Mescc supports -E, -c, -o options, include more complete set of
    header files, enough to work on compiling tinycc's tcc.c albeit a somewhat
    modified version.
  - 0.6: Work with unmodified, unbundled Nyacc; compile 33/55 tinycc's
    tests/test2 suite.
  - 0.5: Mutual self-hosting Scheme interpreter and C compiler: mes.c and
    mescc, Support call-with-current-continuation, refactor catch/throw
  - 0.4: Support Nyacc, Gcc-compiled Mes compiles minimal main.c using nyacc
  - 0.3: Garbage collector
  - 0.2: Support psyntax
  - 0.1: Mes eval/apply feature complete; support syntax-rules, compile main.c
    using LALR, dump ELF
