Erlang es un lenguaje de programación concurrente de propósito general, recolectado de basura y un sistema de tiempo de ejecución. El subconjunto secuencial de Erlang es un lenguaje funcional, con evaluación estricta, asignación única y escritura dinámica. Por concurrencia sigue el modelo de actor. Fue diseñado por Ericsson para admitir aplicaciones distribuidas, tolerantes a fallas, en tiempo real suave y sin interrupciones. Es compatible con el intercambio en caliente, por lo que el código se puede cambiar sin detener un sistema.
Si bien los subprocesos se consideran un tema complicado y propenso a errores en la mayoría de los idiomas, Erlang proporciona características de nivel de lenguaje para crear y administrar procesos con el objetivo de simplificar la programación concurrente. Aunque toda la concurrencia es explícita en Erlang, los procesos se comunican mediante el paso de mensajes en lugar de variables compartidas, lo que elimina la necesidad de bloqueos.
La primera versión fue desarrollada por Joe Armstrong en 1986. 2 Originalmente era un lenguaje propietario dentro de Ericsson, pero se lanzó como código abierto en 1998.