wydanie narzędzi , zapewniający proces bootstrapowania dla GCC i umożliwiający osiągnięcie zamkniętej pętli ponownej kompilacji z kodów źródłowych.
Narzędzie to rozwiązuje problem weryfikowanej początkowej kompilacji kompilatora w dystrybucjach, przerywając łańcuch cyklicznej ponownej kompilacji (do budowy kompilatora wymagane są pliki wykonywalne już zbudowanego kompilatora, a binarne zestawy kompilatora są potencjalnym źródłem ukrytych backdoorów, co nie pozwala na pełne gwarantowanie integralności kompilacji z etalonowych kodów źródłowych).
W GNU Mes samodzielny interpreter języka Scheme, napisany w C, oraz najprostszy kompilator dla języka C (MesCC), napisany w języku Scheme. Oba komponenty są wzajemnie kompilowalne. Interpreter Scheme pozwala na stworzenie kompilatora C MesCC, który następnie umożliwia zbudowanie okrojonej wersji kompilatora (tcc), którego możliwości są wystarczające do kompilacji GCC.
Interpreter języka Scheme jest dość kompaktowy, zajmuje około 5000 linii kodu w najprostszym podzbiorze języka C i może być przekształcony w plik wykonywalny przy użyciu uniwersalnego kompilatora lub najprostszy kompilator C zbudowany przy użyciu samokompilującego się assemblera , nie wymagający zewnętrznych zależności. Interpreter ten zawiera w pełni funkcjonalny zbieracz śmieci i oferuje bibliotekę modułów do załadowania.
W nowym wydaniu wprowadzono wsparcie dla powtarzalnych kompilacji z użyciem zestawów mes+mescc lub guile+mescc w dystrybucjach GNU Guix, Debian GNU/Linux i NixOS. Dodano możliwość uruchamiania interpretera Scheme Mes w GNU Hurd, ale kompilator C mescc jeszcze nie działa z powodu braku wsparcia dla wymaganych wywołań systemowych (na przykład fork/exec). Dodano początkowe wsparcie dla tworzenia plików wykonywalnych FreeBSD. Ulepszono wsparcie dla bootstrapowania dystrybucji Guix przy użyciu tylko komponentów w języku Scheme (powłoka Gash (Guile as Shell) zamiast bash i Gash Core Utils zamiast coreutils, grep, sed, gzip, make, awk i tar).
W kolejnych wydaniach oczekiwane jest dodanie wsparcia dla bootstrapingu w NixOS, możliwość uruchamiania bootstrapingu z wykorzystaniem wyłącznie komponentów w języku Scheme w gałęzi wip-bootstrap, wsparcie dla architektury ARM, możliwość kompilacji Mes.c z użyciem M2-Planet, pełne wsparcie dla modułów Guile oraz zapewnienie działania mescc z jądrem Hurd.
Źródło: opennet.ru
