Cos'è runjaic?

runjaic: Il Runner per Judge

runjaic è il runner principale (o "execution sandbox") utilizzato dal sistema Judge, una piattaforma per la valutazione automatica di soluzioni di programmazione (come in contest di programmazione o compiti a casa). In sostanza, runjaic prende in input un programma, lo esegue in un ambiente controllato e sicuro, e monitora il suo comportamento per rilevare violazioni di limiti di tempo, memoria o sicurezza.

Ecco alcune caratteristiche importanti di runjaic:

  • Isolamento: runjaic crea un ambiente isolato (sandbox) per l'esecuzione del programma candidato. Questo impedisce al programma di accedere a risorse non autorizzate del sistema host, come il filesystem o la rete, garantendo la sicurezza e la stabilità della piattaforma di valutazione. Questo è cruciale per prevenire comportamenti malevoli o accidentali da parte del codice degli utenti.
  • Controllo delle Risorse: runjaic impone limiti rigidi sull'utilizzo delle risorse da parte del programma candidato, come https://it.wikiwhat.page/kavramlar/tempo%20di%20esecuzione, https://it.wikiwhat.page/kavramlar/utilizzo%20della%20memoria, https://it.wikiwhat.page/kavramlar/dimensione%20dello%20stack, https://it.wikiwhat.page/kavramlar/dimensione%20dell'output, numero di processi e accessi al file system. Quando uno di questi limiti viene superato, runjaic interrompe l'esecuzione del programma e segnala l'errore corrispondente.
  • Monitoraggio: runjaic monitora attentamente il comportamento del programma durante l'esecuzione. Registra informazioni dettagliate sull'utilizzo delle risorse, eventuali segnali ricevuti dal programma (come segmentation fault), e lo stato di uscita.
  • Configurabilità: runjaic è altamente configurabile e consente di adattare l'ambiente di esecuzione alle esigenze specifiche di diversi linguaggi di programmazione e tipi di problemi. Questo include la possibilità di specificare i comandi da eseguire per compilare il codice, le librerie da includere, e i parametri per la sandbox.
  • Sicurezza: La sicurezza è una priorità fondamentale. runjaic utilizza diverse tecniche per prevenire attacchi e vulnerabilità, tra cui la limitazione dei system call, la separazione dei privilegi, e la randomizzazione dello spazio di indirizzi.
  • Integrazione: runjaic è progettato per integrarsi facilmente con altri componenti del sistema Judge, come il compilatore, il valutatore e l'interfaccia utente. Fornisce un'API chiara e ben documentata per la comunicazione e il controllo.

In sintesi, runjaic è un componente essenziale di un sistema Judge, fornendo un ambiente sicuro, controllato e monitorato per l'esecuzione di codice potenzialmente non attendibile. La sua configurabilità e le sue caratteristiche di sicurezza lo rendono adatto a una vasta gamma di applicazioni di valutazione automatica.