GNU Compiler Collection

Como GCC era software libre, había programadores que querían trabajar en otras direcciones, por ejemplo, escribiendo interfaces para otros lenguajes distintos de C, estos fueron libres de desarrollar sus propias bifurcaciones del compilador.

Al principio, GCC estaba escrito en C, pero en 2008 comenzó un intento, liderado por Ian Lance Taylor, de adaptar GCC para que pudiese ser compilado con un compilador de C++, con vistas a poder utilizar ciertas construcciones del lenguaje C++ para su desarrollo.

[3]​ En su versión 4.6 incluye front ends para C (gcc), C++ (g++), Java (gcj), Ada (GNAT), Objective-C (gobjc), Objective-C++ (gobjc++) y Fortran (gfortran).

[7]​ También está disponible, aunque no de forma estándar, soporte para Go (gccgo), Modula-2, Modula-3, Pascal (gpc), PL/I, D (gdc), Mercury, y VHDL (ghdl).

Los usuarios llaman un programa controlador llamado gcc, que interpreta los argumentos dados, decide qué compilador usar para cada archivo y ejecuta el ensamblador con el código resultante, después posiblemente ejecuta el enlazador para producir un programa completo.

Recientemente se han incluido dos nuevas formas de árbol independientes del lenguaje.

El análisis ahora es realizado creando árboles temporales dependientes del lenguaje y convirtiéndolos a GENERIC.

El back end utiliza estas para la generación de RTL, aunque en GCC este es independiente del procesador y la secuencia inicial de instrucciones abstractas es adaptada a la arquitectura objetivo.