En programación, ¿qué significa nativo?

Cuando se desarrolla software, el programador tiende a utilizar una plataforma informática particular para hacer el trabajo. Por ejemplo, uno podría elegir una plataforma Linux x86 de 64 bits utilizando alguna distro como Debian, o uno podría elegir una plataforma particular de PC con Windows, o un Mac de algún tipo. El software que se construya de forma nativa se ejecutará en esa plataforma concreta. Puede, pero no suele, funcionar también en otras plataformas. Esto es generalmente cierto en el caso de las aplicaciones Java, ya que se dirigen a la máquina virtual de Java y, en principio, cualquier plataforma que albergue una JVM podría ejecutar el software, independientemente de la arquitectura del host de construcción. Pero generalmente, sobre todo para los lenguajes compilados como C o C++, este no es el caso.

El caso opuesto sería cuando un host de compilación soporta el desarrollo cruzado utilizando algún tipo de cadena de herramientas cruzadas. Un ejemplo podría ser que un desarrollador utilice una cadena de herramientas cruzada alojada en Linux x86 para desarrollar código para algún sistema embebido que utilice una arquitectura de CPU completamente diferente, como ARM, por ejemplo. Esto es bastante común cuando la arquitectura de destino no soporta fácilmente un toolchain nativo, debido a las limitaciones de recursos como la memoria, el almacenamiento, la velocidad, etc.

Incluso es posible tener un sistema híbrido, llamado un toolchain cross-native. Esto podría ser algo así como un host de construcción Linux x86 de alguna versión particular, donde la arquitectura de destino es otra arquitectura Linux x86. Esto es bastante infrecuente, y es un poco difícil de configurar correctamente.