Elixir is a relatively new functional programming language that runs on the Erlang virtual machine. For a look into the history of this young language, we have to start in the 1980s.
It was 1982 when Ericsson, the leader in telecommunication systems at the time, was looking for a new programming language for its telephone switches and routers. Ericsson tried various languages, but none completely answered the requirements of availability, robustness, and concurrency.
The company decided to implement their own languages, and in 1986, they began developing Erlang, using Prolog. Over the next few years they developed a series of prototypes that would eventually become the foundation of what Erlang is today.
In 1990, the first version of Erlang (rewritten in C++) was used in a real project. It was a mobility server for Digital Enhanced Cordless Telecommunication (DECT) used in private offices. The project was successful, and was used to gather feedback for the next version of Erlang. This is when the Open Telecom Platform (OTP) framework was developed.
At that time, the core team was composed of three developers: Joe Armstrong, Robert Virding, and Mike William.
Erlang was used a lot in Ericsson until 1999, when they decided to ban it inside the company in favor of a more popular language. This decision was in some ways the trigger that permitted Erlang to reach outside of Ericsson and become a commonly used language.
Erlang became open source, and its peculiarities were suddenly appreciated. To understand why Erlang was (and still is) very appreciated, we have to remember that in 1998, Ericsson announced the AXD301 switch, which contains over a million lines of Erlang code, and was reported to achieve the nine “9”s availability, meaning that it was “down” for only 0.63 seconds in 20 years!
How could such level of availability be achieved?
Joe Armstrong talked a lot in his speeches about robustness, and he explained why Ericsson had to write its own language. The main driver was concurrency: if a language is not designed to cope with concurrency from the beginning, it’s very difficult to add it later; whatever developers try to do it will create problems or be sub-optimal.
Erlang was designed with concurrency at its core: processes are truly independent, there are no penalties for massive concurrency, and distribution and concurrent behavior work the same on all operating systems.
With these principles, Erlang developed the maturity and stability it has today. These peculiarities are exactly what today’s developers need to build applications with high availability and scalability.