Menu
Coddy logo textTech

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.

Di Kevin Spektor, Cofondatore e CTO

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:

  1. 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.
  2. Una libreria standard. Funzioni pronte per testo, matematica, date, file e rete, come il modulo json di Python o il package java.util di Java.
  3. 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ù.
  4. 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.
  5. 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:

NomeSignificaCosa contieneA chi serve
JVMJava Virtual MachineIl motore che esegue il bytecode (file .class) e gestisce la memoriaFa parte di entrambi i successivi
JREJava Runtime EnvironmentLa JVM più le librerie di classi standardA chi esegue soltanto programmi Java
JDKJava Development KitIl JRE più gli strumenti per sviluppatori: javac, jar, javadoc, jdbA 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?
Il Java Runtime Environment (JRE) è l'esempio classico: la JVM più le librerie standard di Java. Node.js è un ambiente di runtime per JavaScript fuori dal browser, e il browser stesso è un altro. Per Python, il runtime è l'interprete CPython con la sua libreria standard.
Node.js è un ambiente di runtime?
Sì. Node.js è un ambiente di runtime JavaScript costruito sul motore V8 di Google. Permette a JavaScript di girare fuori da un browser e aggiunge moduli per file, rete e processi. Non è un linguaggio di programmazione né un framework; i framework come Express girano al suo interno.
Cosa significa davvero runtime?
"Runtime" ha due significati. È il periodo in cui un programma è in esecuzione, in contrapposizione al tempo di compilazione, ed è per questo che gli errori che compaiono solo allora si chiamano errori di runtime. È anche l'abbreviazione di ambiente di runtime, il software che sostiene un programma in quel periodo.
Devo installare il JRE o il JDK?
Installa il JDK se scrivi codice Java, perché include il compilatore 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?
JDK sta per Java Development Kit, JRE per Java Runtime Environment e JVM per Java Virtual Machine. La JVM esegue il bytecode, il JRE è la JVM più le librerie standard, e il JDK è il JRE più gli strumenti di sviluppo come javac.
Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA