Cos'è un ambiente di runtime?
Un ambiente di runtime (runtime environment) è il software di cui un programma ha bisogno attorno a sé mentre è in esecuzione: il motore che esegue il suo codice, le librerie standard che chiama e i servizi che gestiscono memoria, errori e accesso al sistema operativo. La JVM, Node.js e CPython ne sono esempi.
Aggiornato il 24 settembre 2026
Esegui console.log(typeof process) in Node.js e stampa object. Incolla la stessa riga nella console di Chrome e stampa undefined. Il linguaggio è lo stesso JavaScript in entrambi i posti, ma il programma gira dentro due ambienti di runtime diversi, e ognuno gli fornisce strumenti diversi.
console.log(typeof process); // "object" in Node.js, "undefined" in a browser
console.log(typeof document); // "undefined" in Node.js, "object" in a browser
Cosa fornisce un ambiente di runtime
Il tuo codice descrive solo cosa fare. Quando viene eseguito, si appoggia a uno strato di software che era installato prima che tu scrivessi una riga. Quello strato di solito ha cinque parti:
- Un motore di esecuzione. Qualcosa deve eseguire il codice: un interprete, una macchina virtuale o un compilatore just-in-time. CPython, la Java Virtual Machine (JVM) e V8 sono motori di esecuzione.
- Una libreria standard. Funzioni pronte per testo, matematica, date, file e rete, come il modulo
jsondi Python o il packagejava.utildi Java. - Gestione della memoria. Il runtime alloca la memoria per i tuoi oggetti e, in Python, Java e JavaScript, la libera di nuovo con un garbage collector quando niente la usa più.
- Gestione degli errori. Quando qualcosa va storto, il runtime ferma il programma in modo controllato e segnala dove, con un traceback o uno stack trace.
- Accesso al sistema operativo. Leggere file, aprire connessioni di rete, leggere variabili d'ambiente e argomenti da riga di comando passa tutto per il runtime, che lo chiede al sistema operativo per conto del tuo programma.
Puoi chiedere al runtime di Python informazioni su se stesso:
Le risposte dipendono da dove gira il codice. Su un server Linux platform.system() restituisce 'Linux', su un Mac 'Darwin' e su Windows 'Windows'. Il limite di ricorsione (1000 per impostazione predefinita in CPython) è una regola stabilita dal runtime, non dal linguaggio Python, e le decine di moduli già caricati prima della tua prima riga sono il runtime che si prepara.
Java: JDK, JRE e JVM
Java rende visibili gli strati perché ognuno ha il proprio nome:
| Nome | Significa | Cosa contiene | A chi serve |
|---|---|---|---|
| JVM | Java Virtual Machine | Il motore che esegue il bytecode (file .class) e gestisce la memoria | Fa parte di entrambi i successivi |
| JRE | Java Runtime Environment | La JVM più le librerie di classi standard | A chi esegue soltanto programmi Java |
| JDK | Java Development Kit | Il JRE più gli strumenti per sviluppatori: javac, jar, javadoc, jdb | A chi scrive programmi Java |
Il flusso è questo: javac Main.java (uno strumento del JDK, il compilatore) trasforma il codice sorgente in Main.class, e java Main avvia la JVM, che carica la classe e la esegue con le librerie dell'ambiente di runtime. La JVM è il motivo per cui un unico file .class gira su Windows, macOS e Linux: ogni sistema operativo ha la propria JVM, e tutte capiscono lo stesso bytecode.
Da Java 11, Oracle distribuisce solo il JDK, senza un download separato del JRE. Alcune distribuzioni, come Eclipse Temurin, pubblicano ancora un pacchetto JRE. Se stai imparando Java, installa un JDK: contiene tutto ciò che contiene il JRE. La guida per installare Java ti accompagna passo per passo.
JavaScript: il browser e Node.js
JavaScript è nato per girare dentro le pagine web, quindi il suo primo ambiente di runtime è stato il browser. Un runtime del browser dà al tuo codice il document della pagina, window, i timer e fetch per le richieste di rete, e blocca di proposito l'accesso diretto ai tuoi file.
Node.js porta il motore V8 di Google fuori dal browser e lo avvolge in un runtime diverso: niente document, ma moduli come fs per i file, http per i server e l'oggetto process per variabili d'ambiente e argomenti. Deno e Bun sono runtime più recenti per lo stesso linguaggio, con i propri strumenti. Tutti eseguono lo stesso nucleo di JavaScript; la differenza è ciò che lo circonda. Le pagine sul runtime Node.js e sull'event loop vanno più a fondo.
Python: CPython e dintorni
Quando si dice "installa Python" si intende installare un ambiente di runtime: l'interprete CPython, la libreria standard e pip per aggiungere pacchetti. Per lo stesso linguaggio esistono altri runtime. PyPy aggiunge un compilatore JIT per la velocità, e MicroPython è abbastanza piccolo da girare sui microcontrollori.
Un ambiente virtuale (python3 -m venv .venv) non è un nuovo runtime. Punta a un interprete esistente e dà a un progetto il proprio insieme di pacchetti installati, così due progetti possono usare versioni diverse della stessa libreria. Vedi ambienti virtuali.
Tempo di compilazione e tempo di esecuzione
"Runtime" indica anche un momento: il periodo in cui il programma è in esecuzione, in contrapposizione al tempo di compilazione, quando il sorgente viene tradotto. Un errore che il compilatore rifiuta è un errore in fase di compilazione; uno che compare solo mentre il programma gira, come dividere per zero, è un errore di runtime. L'ambiente di runtime è il software presente durante quel secondo periodo.
Anche C, che compila direttamente in codice macchina, ha un piccolo runtime. Un programma C parte da un codice di avvio fornito dalla toolchain del compilatore, e funzioni come printf e malloc vengono dalla libreria standard C (glibc sulla maggior parte dei sistemi Linux, la Universal C Runtime su Windows). Semplicemente non ci sono né una macchina virtuale né un garbage collector.
Falsi miti comuni
- "L'ambiente di runtime è il sistema operativo." Il sistema operativo gestisce l'hardware per ogni programma. L'ambiente di runtime è lo strato di un singolo programma sopra di esso. La JVM stessa è un programma eseguito da Windows, macOS o Linux; non li sostituisce.
- "Node.js è un linguaggio o un framework." Node.js è un ambiente di runtime per JavaScript. I framework come Express sono librerie che girano al suo interno.
- "Installare un IDE installa il runtime." VS Code non include Python né Java. L'editor e l'ambiente di runtime si installano separatamente, anche se alcuni IDE, come IntelliJ IDEA, possono scaricare un JDK per te.
- "Stesso linguaggio, stesso comportamento ovunque." Le funzionalità fornite dal runtime, come l'accesso ai file, i limiti predefiniti e i moduli disponibili, possono cambiare. Il codice che gira in Node.js può fallire in un browser proprio per questo motivo.
Cosa leggere dopo
Il motore di esecuzione dentro la maggior parte dei runtime è un interprete, e quella pagina lo confronta anche con un compilatore. Sotto ogni runtime c'è il sistema operativo. Per esercitarti in un runtime che non hai ancora usato, inizia il corso Java o il corso JavaScript.
Domande frequenti
Qual è un esempio di ambiente di runtime?
Node.js è un ambiente di runtime?
Cosa significa davvero runtime?
Devo installare il JRE o il JDK?
javac e tutto ciò che c'è nel JRE. Il JRE da solo esegue solo programmi Java già esistenti. Da Java 11, Oracle distribuisce solo il JDK, quindi per le versioni attuali di Java il JDK è la scelta normale.Cosa significano JDK, JRE e JVM?
javac.