paper

A History of Erlang

  • Authors:

📜 Abstract

Erlang was designed for writing concurrent programs that “run forever.” Erlang uses concurrent processes to structure the program. These processes have no shared memory and communicate by asynchronous message passing. Erlang processes are lightweight and belong to the language, not the operating system. Erlang has mechanisms to allow programs to change code “on the fly” so that programs can evolve and change as they run. These mechanisms simplify the construction of software for implementing non-stop systems. This paper describes the history of Erlang. Material for the paper comes from a number of different sources. These include personal recollections, discussions with colleagues, old newspaper articles and scanned copies of Erlang manuals, photos and computer listings and articles posted to Usenet mailing lists.

✨ Summary

Paper summary

  • Erlang originated at Ericsson’s Computer Science Laboratory in 1986 as an attempt to improve the development of highly concurrent, distributed, fault-tolerant telecommunications systems. Its requirements were shaped by telephone exchanges, which had to manage very large numbers of simultaneous activities, tolerate software and hardware failures, operate under soft real-time constraints, and support maintenance and code upgrades without service interruption.

  • The language’s central architectural decisions were lightweight language-level processes, isolated memory, asynchronous message passing, and copying rather than shared mutable data. These choices were intended to prevent one process from corrupting another, simplify distributed failure recovery, and make systems easier to compose. Selective receive, mailboxes, links, supervision-oriented recovery, and dynamic code replacement emerged from practical experimentation with telephony applications.

  • Erlang evolved from experiments combining Prolog, functional programming, and concurrency. Early implementations were written in Prolog; the JAM virtual machine and later BEAM substantially improved execution speed and code compactness. The language subsequently gained functional features, binary and bit-level processing, distributed execution, real-time databases through Mnesia and ETS, static analysis through Dialyzer, and reusable OTP behaviors for client-server systems, event handling, finite-state machines, and supervision.

  • Industrial use was decisive in Erlang’s maturation. The ACS/Dunder prototype reported substantially higher productivity than comparable PLEX implementations, although Erlang was initially considered too slow for production. The AXD301 project demonstrated that Erlang and OTP could support a large, distributed, highly reliable telecommunications product with millions of lines of code, dynamic reconfiguration, processor failover, and reported nine-nines reliability.

  • The paper identifies two unplanned historical turning points: the collapse of Ericsson’s AXE-N project in 1995, which created an opportunity to deploy Erlang in a major product, and Ericsson’s 1998 ban on Erlang for new development, which encouraged the 1998 open-source release and accelerated adoption outside Ericsson. Armstrong characterizes the resulting programming model as concurrency-oriented programming: systems consist of isolated components that communicate through asynchronous protocols.

  • The paper’s broader lessons are that prototypes can guide language design before formal specifications are feasible, practical demonstrations are often more persuasive than theory, and implementation constraints can distort programming practice. It also identifies unresolved issues, including atom-table limits, imperfect process isolation, weak distributed security, difficult foreign-code integration, insufficient protocol specification, and limited support for treating modules and code versions as first-class entities.

Documented subsequent influence

The paper is repeatedly cited as a historical and technical source in later work concerning Erlang’s concurrency model, secure distributed Erlang systems, and language implementations. For example, a dissertation on concurrency support for Idris and Erlang cites it when introducing Erlang’s process-based model; a later workshop paper on secure Erlang systems cites it as background for Erlang’s design and history; and other academic bibliographies use it as the standard historical account of Erlang’s development. These citations demonstrate continued use as a foundational reference, although they do not by themselves establish that specific technical mechanisms were directly derived from this paper. (lenary.co.uk)

Publication metadata identifies the work as a peer-reviewed HOPL-III conference paper presented in San Diego on June 9–10, 2007. (explore.openaire.eu)