Erlang is a functional, compiled, dynamically typed, fault-tolerant and concurrent programming language. Erlang is an exotic language as it addresses concurrency different than mainstream programming languages.
While in more common programming languages, such as C or Java, programmers have to use locks and mutexes to write concurrent applications, Erlang uses a message based, shared nothing approach, in which individual threads of execution called processes execute in a concurrent fashion and communicate via message passing.
Erlang is used to build massively scalable soft real-time systems with requirements on high availability. Some of its uses are in telecoms, banking, e-commerce, computer telephony and instant messaging. Erlang's runtime system has built-in support for concurrency, distribution and fault tolerance.
OTP is set of Erlang libraries and design principles providing middle-ware to develop these systems. It includes its own distributed database, applications to interface towards other languages, debugging and release handling tools.