# Memtest86

MemTest86 e Memtest86+ sono due software di diagnostica studiati per testare la memoria RAM dei computer.
Entrambe le applicazioni vanno avviate prima del caricamento del sistema operativo tramite un floppy disk, un Compact disc (CD-ROM), una chiave USB oppure direttamente dal disco principale tramite un boot loader compatibile (ad esempio GRUB). Durante l'esecuzione vengono scritte in RAM lunghe sequenze di bit ed eseguiti test di diverso tipo volti ad individuare eventuali errori di indirizzamento, danni ai chip di memoria e problemi con la cache.

## MemTest86
### Storia

MemTest86 è stato sviluppato da Chris Brady nel 1994 in C e Assembly e rilasciato sotto licenza GPL. Il codice di avvio era originariamente derivato da quello del kernel Linux 1.2.1. Il programma era compilato come codice position-independent così da avere la possibilità di essere trasferito in altre locazioni e testare nel complesso tutte le regioni di memoria, comprese quelle che precedentemente occupava (la versione proprietaria successivamente sviluppata da PassMark non avrà questa possibilità a causa di alcune limitazioni dovute al supporto UEFI).

#### Patch BadRAM

Dalla versione 2.3 di MemTest86, il programma può produrre una lista di regioni danneggiate della RAM nel formato atteso per la patch BadRAM per il kernel Linux.. Attualmente, GRUB 2 può fornire le stesse informazioni a un kernel senza tale patch, rendendo così la BadRAM non necessaria). Anche Microsoft Windows possiede una funzione simile (badmemorylist/badmemoryaccess), ma richiede una conversione manuale per effetturare la configurazione.

#### Ultima versione GPL e acquisizione di PassMark

Nel periodo tra il 2004 e il 2013 è stata rilasciata la versione 4.0 di MemTest86, l'ultima sotto licenza GPL.
Nel Febbraio 2013, l'originale MemTest86 è stato ceduto da Chris Brady alla PassMark Software, che ha proseguito lo sviluppo. Il codice sorgente è stato riscritto per il supporto al UEFI, reso disponibile (insieme, tra le altre cose, ad un'interfaccia che consente l'utilizzo del mouse) col rilascio della versione 5.0, il 3 Dicembre 2013. Tutte le versioni compatibili con UEFI (5.0 e successive) sono rilasciate sotto licenza freeware e proprietaria. Quando l'UEFI non è disponibile nel sistema, le versioni dalla 5.0 alla 9.0 eseguono l'avvio in modalità BIOS legacy caricando la versione 4.0; quest'ultima è stata aggiornata fino alla versione 4.3.7, ed è disponibile per il download sempre sotto licenza GPL.
La versione 6.0 (13 Febbraio 2015) ha aggiunto il supporto per le RAM DDR4, nonché un test row-hammer basato su ricerche di Yoongu Kim, et al.. Di recente è stato introdotto il supporto anche allo standard DDR5, oltre a supportare tutti gli attuali chipset e processori (CPU) AMD e Intel.
Dalla versione 10.0 non è più possibile l'avvio BIOS, per il quale viene consigliato il download della versione 4.3.7.

## Memtest86+
### Storia

Nel 2004, dopo che l'originale MemTest86 era rimasto fermo alla versione 3.0 (rilasciata nel 2002), Samuel Demeulemeester ha creato il fork Memtest86+ per aggiungere il supporto a nuovi processori e chipset. Da quel momento MemTest86 e Memtest86+ sono stati sviluppati parallelamente. Una proposta di merge dei due progetti è stata avanzata nel 2013 a Demeulemeester, che ha preferito però proseguire lo sviluppo separatamente.
Dalla versione 1.60 di Memtest86+, il programma produce una lista di regioni RAM danneggiate per la patch BadRAM (similmente a MemTest86 2.3).
Lo sviluppo di Memtest86+ è proseguito fino al rilascio della versione 5.01 nel Settembre 2013. Dopo un periodo di stallo, nell'Aprile 2020 la versione 5.31 beta, l'ultima a supportare solo l'avvio BIOS, è stata rilasciata accompagnata da un breve changelog che annunciava la risoluzione di molteplici bug.
Nel Maggio 2020, Martin Whitaker ha realizzato un fork della versione 5.31 di Memtest86+, chiamato PCMemTest, riscrivendo il codice per aggiungere supporto a UEFI, RAM DDR4 e DDR5 e ai recenti processori e chipset AMD e Intel. Nell'Ottobre 2022, è stato effettuato il merge di questo progetto con Memtest86+, a cui è seguito il rilascio della versione 6.0 di quest'ultimo. Lo sviluppo viene ora portato avanti congiuntamente da Whitaker e Demeulemeester.

### Diffusione

Memtest86+ è distribuito di default o opzionalmente in molte distribuzioni Linux, come ad esempio Debian, Ubuntu e Arch Linux. Ubuntu include il programma nell'installazione di default, ed è possibile avviarlo tramite GRUB. La versione 5.01 di Memtest86+ richiedeva l'applicazione di patch significative da parte delle versioni più recenti delle distribuzioni per mantenere funzionante il codice del 2013, mentre dalla versione 6.0 non è richiesta un'applicazione così estesa di patch per eseguire il programma.

## Caratteristiche comuni

L'interfaccia grafica (GUI) e le funzionalità dei due programmi sono state pressoché le stesse fino alle versioni 5.0 di Memtest86+ e 4.3 di MemTest86.
Dalla versione 5.0, MemTest86 ha aggiunto una GUI utilizzabile tramite mouse e il supporto a UEFI; quest'ultimo è stato fornito da Memtest86+ a partire dalla versione 6.0.
Entrambi i programmi funzionano con quasi tutte le architetture PC-compatibili, dai computer equipaggiati con Intel 80386 e Intel 80486 fino agli ultimi sistemi con processori a 64 bit. Ogni nuovo rilascio aggiunge supporto per nuovi chipset e CPU.
I due software sono progettati per essere eseguiti come programmi stand-alone e self-contained da dispositivi USB avviabili, CD-ROM, floppy disk, oppure da un boot manager compatibile senza che venga avviato un sistema operativo.. Questa configurazione è necessaria in quanto i due software devono controllare direttamente l'hardware da testare e lasciare altresì più RAM possibile libera da esaminare.
I test effettuati dai due programmi sono molto esaustivi, e possono individuare problemi altrimenti nascosti su sistemi che sembrano funzionare normalmente. Con diversi chipset, MemTest86 consente di rilevare i failure nelle RAM ECC (senza gestioni speciali, i circuiti di memoria con correzione d'errore possono mascherare eventuali problemi con i chip di memoria sottostanti).
Alcuni errori possono manifestarsi in maniera intermittente oppure dipendono dalla sequenza di bit memorizzata, e non vengono rilevati ad ogni esecuzione (pass) di uno dei due programmi; tali failure possono venire scoperti eseguendo più pass per un periodo esteso di tempo. Alcuni test ricorrono a pattern di bit diversi al fine di rilevare gli errori dato-dipendenti.
Entrambi i software ad oggi supportano gli attuali processori multicore e i relativi chipset.