Erlang
In 1986, in the offices of the Ericsson Telecom AB computer laboratory, Joe Armstrong faced a technical puzzle: how to program telephony applications that defied all the conventions of the time? Telephone switches handled thousands of simultaneous calls, these operations were naturally distributed across multiple machines, and the slightest failure made headlines. Nothing like a desktop application that crashes without consequence.
Armstrong first explored different approaches, developed prototypes in Smalltalk, and invented a graphical notation to describe telephony operations. It was Roger Skagervall who made the decisive observation: this notation resembled Prolog. Armstrong then switched to this language, and thus Erlang was truly born.
The technical context at Ericsson influenced the design of the new language. PLEX, created by Göran Hemdahl to program AXE switches, imposed its constraints: modifying code without stopping the system, avoiding at all costs the pointer errors that had handicapped previous generations. Armstrong and his team integrated these lessons into Erlang's DNA.
Robert Virding joined the project, and together they developed the first versions of the language, still in Prolog. The moment of truth came in 1989 with the ACS/Dunder project. The team developed 25 telephony features in Erlang, roughly one-tenth of those in the MD110. The results exceeded their expectations: depending on the features, development accelerated from 3 to 25 times compared to PLEX.
These successes attracted attention, and Erlang gained maturity. In 1993, Bogumil Hausman developed the Turbo Erlang system, renamed BEAM (Bogdan's Erlang Abstract Machine), which drastically improved performance. Claes Wikström added distribution support, enabling execution across multiple machines.
But it was an unexpected event that would propel Erlang beyond Ericsson's walls. In 1998, Ericsson Radio Systems banned the use of the language for new developments. This decision, which could have spelled the end of Erlang, produced the opposite effect. In December, Ericsson released the source code, and part of the original team left the company to found Bluetail AB, a company that would use Erlang as its core technology.
Erlang's technical architecture reflects its original mission. The language structures programs around concurrent processes that share no memory and communicate through asynchronous messages. These processes belong to the language, not the operating system, which makes them remarkably lightweight. If one of them fails, the others continue their work as if nothing had happened.
The message reception system constitutes one of Erlang's most remarkable innovations. A process can selectively wait for certain types of messages while leaving others pending. This approach greatly simplifies the programming of complex communication protocols, a considerable asset in the telecommunications world.
The AXD301, an ATM switch developed by Ericsson, is Erlang's technological showcase. In 2001, this system comprised 1.13 million lines of code distributed across 2,248 modules. It achieved the coveted availability of 99.9999999%, demonstrating that the language was capable of handling large-scale industrial projects with exceptional reliability.
The OTP (Open Telecom Platform) system, developed from 1996 onward, enriched the Erlang ecosystem. This collection of libraries and design patterns offered "behaviours," abstractions that encapsulated common patterns such as the client-server model or event handling. OTP transformed Erlang from an experimental language into an industrial platform.
The arrival of multicore processors retrospectively confirmed the relevance of the initial choices. The concurrency model without data sharing naturally adapted to hardware parallelism. Erlang programs exploited multicore architectures without modification, a considerable advantage at a time when other languages struggled to take advantage of this evolution.
Beyond telecommunications, Erlang found its place in various domains. The ejabberd messaging server (Erlang Jabber Daemon) handled millions of simultaneous connections, CouchDB stored and distributed data at large scale, and RabbitMQ routed messages between distributed applications. These successes validated the original approach: the constraints of telephone systems were found in many contemporary applications.
The language initially addressed the particular requirements of Ericsson, but its solutions proved relevant for many current problems. The initial architectural choices, particularly the message-passing concurrency model, seemed radical but today enable natural exploitation of modern parallel architectures.