Nella programmazione di computer e nello sviluppo di software, un kit di sviluppo nativo (NDK) è solitamente un’interfaccia di programmazione astratta (API) che fornisce a uno sviluppatore la possibilità di utilizzare funzioni o eseguire codice direttamente attraverso il sistema operativo principale. Questo metodo di esecuzione di un programma è nettamente diverso dall’esecuzione di codice gestito o programmi interpretati, in cui il codice scritto viene eseguito da una macchina virtuale o da un interprete che funge da livello software tra le funzioni principali del sistema operativo e il codice scritto dall’utente . L’utilizzo di un kit di sviluppo nativo può essere essenziale nelle applicazioni che richiedono tempi di esecuzione ed elaborazione più rapidi possibili, perché può fornire accesso diretto all’hardware e alle librerie utilizzate dal sistema operativo. A seconda del tipo di programma scritto e del sistema operativo di destinazione, l’uso di un kit di sviluppo nativo potrebbe non aumentare affatto la velocità del programma e potrebbe rendere il codice difficile da mantenere, leggere e trasferire su altri sistemi.
Le applicazioni scritte per alcuni dispositivi, come gli smartphone, o che utilizzano linguaggi di computer interpretati non vengono eseguite direttamente dai processi principali del sistema operativo o dal kernel. Invece, il codice del programma viene eseguito da un programma separato noto come macchina virtuale (VM) o interprete. La macchina virtuale legge il codice, espande e risolve i comandi e si interfaccia con il kernel per eseguire il codice. Questo può essere vantaggioso per alcuni sviluppatori, perché fornisce un buon livello di astrazione per la portabilità e lascia molti dettagli complessi, come la gestione delle risorse e la gestione dei file, ai creatori della macchina virtuale.
In alcuni casi, tuttavia, la macchina virtuale può rappresentare un ostacolo per alcuni tipi di programmi. La VM può rallentare l’esecuzione o non fornire l’accesso ad alcune funzioni all’interno del kernel host. Un kit di sviluppo nativo per il sistema operativo o il dispositivo di destinazione espone le funzioni del kernel all’applicazione in fase di scrittura. A seconda dell’estensione del kit, questo può consentire a un programma di accedere direttamente all’hardware, caricare le proprie librerie personalizzate nel kernel o utilizzare ottimizzazioni specifiche del sistema.
Un kit di sviluppo nativo viene spesso utilizzato solo per le parti critiche di un programma. Questi possono essere calcoli di elaborazione grafica, output sul display o input e output di file. Non tutti i programmi che utilizzano funzioni o routine native vedranno un vantaggio in termini di velocità, poiché la macchina virtuale potrebbe già apportare ottimizzazioni al codice gestito in modo che il codice macchina risultante sia identico, indipendentemente dal fatto che vengano utilizzate funzioni native. Inoltre, il codice nativo lega un programma a un’implementazione specifica di un sistema operativo e talvolta a una versione specifica di un dispositivo, il che significa che il codice che utilizza un kit di sviluppo nativo potrebbe non essere facilmente trasferibile su altri sistemi.