3 Obtaining Erlang/OTP and books/articles about it
3.1 Where can I get Erlang/OTP?
Open Source Erlang/OTP can be downloaded from the open source Erlang site. The site provides full source code as well as binaries for Windows machines. This is probably the best place to go to make sure you're getting the latest version.
Erlang Solutions provide binaries for a variety of platforms (Ubuntu, CentOS, MacOS X, Debian, Windows, Fedora and Raspian).
The Debian Distribution of GNU/Linux, and derivatives such as Ubuntu, includes various versions Erlang in different releases, under interpreters. The version tends to lag a long way behind Erlang Solutions' package (above).
For the BSDs, the 'ports' collection has up to date versions of Erlang.
Users within Ericsson can use Ericsson's internally supported version of Erlang from www.erlang.se.
3.2 What's the current version of (Open Source) Erlang?
Erlang/OTP 19.3 was released in March 2017.
Prior to 17.0, Erlang used a slightly unusual version numbering scheme, e.g. the previous version was called R16B-3.
Major releases typically come somewhere between 12 and 18 months apart.
Components of Erlang have their own version numbers, for instance the virtual machine in 17.0 has version 6.0.
3.3 Which licence is Open Source Erlang shipped with?
The Open Source Erlang Licence is essentially the Mozilla (Netscape) Public Licence with a few modifications to make it compatible with Swedish law.
As far as I understand, this means you can obtain Erlang for free, use it to build cool systems and sell them without Ericsson coming around to charge you money. For an authoritative statement, you'll need a lawyer.
3.4 Where is the Erlang documentation?
The language itself is best described by the Language Reference Manual.
The documentation delivered with open source erlang, as both man pages and html, is the most up-to-date reference to both the OTP libraries and Erlang itself. On unix systems, an easy way to read the man pages is erl -man gen_tcp .
3.5 Which book about Erlang should I read?
Different books are aimed at different audiences, so recommending one in particular is difficult. The currently available books in English, starting with the most recently published, are:
Introducing Erlang by Simon St. Laurent, 2013, is a very gentle introduction to Erlang for beginners. It's available directly from the publisher.
Learn You Some Erlang for Great Good! by Fred Hebert is a beginners' book about Erlang, published in 2013. It's available directly from the publisher and also for reading online.
Erlang and OTP in Action by Martin Logan, Eric Merritt and Richard Carlsson was published in 2010. You can buy it from various online bookstores, or directly from the publisher.
Erlang Programming (A Concurrent Approach to Software Development) by Francesco Cesarini and Simon Thompson was published in 2009. Get it from Amazon etc or directly from the publisher.
Programming Erlang: Software for a Concurrent World (Joe Armstrong) is a book about Erlang written by one of the original inventors, published in 2007. You can buy it on paper from Amazon and other online bookstores, or directly from the publisher.
There are also some books in languages other than English:
French: Erlang Programmation (Mickaël Rémond) can be ordered from the publisher or via Amazon.
Spanish: Erlang/OTP Un Mundo Concurrente (Manuel Rubio) can be ordered directly from the publisher.
Of historical interest only: Concurrent Programming in Erlang (2nd. Edition, 1993) (Armstrong, Virding, Wikström & Williams). Archaeologists can download the first half of the book from erlang.org.
Also only of historical interest: Maurice Castro's book, Erlang in Real Time (1998).
3.6 What advanced Erlang documentation is there?
The only way to keep completely up to date with Erlang internals is to examine the source code. This section lists some material which can help with understanding the code, but keep in mind that they all age, i.e. the article/paper/presentation describes the code as it was at a particular moment, which is often some time ago.
The BEAM book describes Erlang's virtual machine, called BEAM.
The Standard Erlang spec (1999) aims to define the Erlang language. There is currently no compiler which actually implements everything exactly the way Standard Erlang specifies. This specification is quite precise; it's intended as a reference, not a bedtime read! Compiler and tool implementors will find this useful, as will advanced Erlang programmers.
Core Erlang (2004) is an effort to define an Erlang-like language which is nicer to compilers and language tools and can be automatically generated from Erlang. Erlang compilers from R10 onwards can generate Core Erlang from normal Erlang code. They can also generate .beam files from Core Erlang.
The proceedings from the Erlang User Conferences contain many interesting articles. The proceedings for conferences from 1999 to 2008 are also still online.
The internals of the BEAM file format are described on Björn's homepage (2000) . Eventually this will/might include a description of the virtual machine's instructions. Björn also includes some benchmarks comparing different versions of the BEAM machine. You may also want to take a look at the beam_lib module.
Joe Armstrong's Thesis, (2003) Making reliable distributed systems in the presence of software errors contains a lot of interesting information, including a compact overview of the language, a number of case studies and some discussion of the language's evolution, somewhat similar to Bjarne Stroustrup's Design and Evolution of C++.
Secure Distributed Communication in SAFEERLANG (2000), which was a student thesis, contains a good, if dated, overview of Erlang's distribution mechanisms (Section 5).
Enhancing Security in Distributed Erlang by Integrating Access Control (2000) contains a good overview of some of Erlang's implementation aspects, including memory allocation (section 7).
The (Ex-Ericsson) computer science laboratory has a collection of papers about Erlang-related topics.
The source-code release includes a directory with some of the internal build documentation in the subdirectory erts/emulator/internal_doc/ .
Stuff Goes Bad: Erlang in Anger (2014) contains tips and tricks to help understand where failures come from in production Erlang systems, with pointers on how to debug and solve them live.
3.7 What documentation is there in related subjects?
There are a couple of books about specific types of applications which use Erlang as the main language in the book:
Building Web Applications with Erlang by Zachary Kessin
Handbook of Neuroevolution Through Erlang by Gene I. Sher
The standard text about data structures in functional languages is Purely Functional Data Structures by Chris Okasaki. The parts about laziness (about half of the book) do not apply to Erlang, but are interesting nonetheless. An early version of the book is available online, the book itself is available from many online booksellers.
Structure and Interpretation of Computer Programs is a standard introductory text to functional programming. It is available both on paper and online.
3.8 Is there public repository for the Erlang source?
Erlang has an official Git repository maintained by the Erlang/OTP group. There is also an unofficial repository which includes history all the way back to 1999.
3.9 How can I contribute to Erlang?
When you write Erlang code you want to share, there are quite a number of ways to share it. The place to announce such things is the Erlang Questions mailing list, or, in the case of patches, the Erlang Patches mailing list. Where you put the actual code is up to you.
If your code is a correction, modification or extension to an existing part of OTP, the usual way of spreading it is via github.
If your code is a new application or library, some common ways of distributing it are:
Starting your own github or Google code project
Putting the code on a personal homepage
3.10 How can I propose changes to the language itself?
Even though Erlang is a fairly mature language with a large established code-base, changes and enhancements are still being incorporated. There is a mechanism called the Erlang Enhancement Proposal which formalises the process.
3.11 How do I report a bug?
Use the bug tracker.
3.12 Where is Erlang discussed in the real world?
Conferences
Erlang Factory organises regular Erlang conferences around the world. By tradition, the annual Erlang User Conference is held in May in Stockholm (Erlang's birthplace).
Erlang crops up in other conferences every so often, e.g. Strange Loop usually has a presentation or two about Erlang.
Academic conferences about functional programming are also attended by a few Erlang users. The International Conference on Functional Programming usually includes an Erlang workshop.
Erlounge and User Groups
Every so often, someone puts out an invitation on erlang-questions to informally discuss Erlang over a few beers. Past Erlounges have been in Sweden (Stockholm), Scotland, the USA (Atlanta, New York, Chicago, North Carolina, Schaumburg, Seattle, SF Bay area, Arlington, Washington DC), France (Paris), China (Zhuhai, Shanghai, Hangzhou), Italy, Germany (Aachen), Poland (Krakow), New Zealand (Wellington) and others. There's a events page on erlangcentral.org listing some meetings, others are organised locally.
3.13 Where is Erlang discussed online?
There are several mailing lists devoted to Erlang:
erlang-questions
This is intended for general discussion about Erlang. Anyone can send mail to erlang-questions@erlang.org, and anyone can subscribe.
erlang-announce
This list carries announcements about new releases of Erlang, patches, etc. All posts to erlang-announce also appear in erlang-questions.
Web forums and mailing list archives
The erlang-questions list is archived on the Erlang website.
Erlang Central has some Erlang-related forums. It also has a good calendar of Erlang events (hack nights, local meetups, etc.)
IRC channel
There's an IRC channel, #erlang, on irc.freenode.net
3.14 Where can I find Erlang programmers/employers?
Posting a short note to erlang-questions@erlang.org is a good start, especially if the subject-line clearly identifies the post as a job request/advert.
There are several sites with a high concentration of Erlang jobs:
Several consultant groups have Erlang-certified people, including erlang-solutions.com (based in London, take assignments worldwide), Process-one (based in France) and ENEA data (Sweden)
If you want to be listed here, send some mail to matthias@corelatus.com.
Kontakten (Contact), an Ericsson-internal newspaper, may also be useful as it carries many job ads.