El gestor de arranque es un pequeño programa en el flash del AVR que nunca se sobrescribe y se ejecuta en el encendido. El trabajo del gestor de arranque es leer los datos del programa desde el UART y escribirlos en la memoria flash interna. Sin un gestor de arranque, la única forma de cargar código es utilizando ISP.
El AVR ATMega8 viene sin código en el flash. El código se puede cargar a través de los pines ISP (programación en el sistema), utilizando un programador AVR ISP (o incluso otro Arduino).
Para Arduino, el ISP se usa solo una vez (en la fabricación), para cargar un pequeño gestor de arranque. En el encendido, el gestor de arranque se ejecuta y se comunica con el UART serie (pines TX + RX). Ahora, Arduino se puede programar a través de los pines seriales usando el protocolo STK500.
Como los pines en serie están (típicamente) conectados a un USB FTDI a un chip en serie, el Arduino también se puede programar a través de USB.