Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
478 lines (392 sloc) 16.5 KB
<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE chapter SYSTEM "chapter.dtd">
<chapter>
<header>
<title>Obtaining Erlang/OTP and books/articles about it</title>
<prepared>Matthias Lang</prepared>
<docno></docno>
<date>2007-09-12</date>
<rev>1.0</rev>
<file>obtaining.xml</file>
</header>
<section><title>Where can I get Erlang/OTP?</title>
<p>
Open Source Erlang/OTP can be downloaded from
<url href="http://www.erlang.org/">the open source Erlang
site</url>. 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.
</p><p>
Erlang Solutions provide
<url href='https://www.erlang-solutions.com/resources/download.html'>binaries</url>
for a variety of platforms
(Ubuntu, CentOS, MacOS X, Debian, Windows, Fedora and Raspian).
</p><p>
The <url href="http://www.debian.org/">Debian
Distribution</url> of <em>GNU/Linux</em>, and derivatives such
as Ubuntu, includes various versions Erlang in different
releases, under <em>interpreters</em>. The version tends to
lag a long way behind Erlang Solutions' package (above).
</p><p>
For the BSDs, the 'ports' collection has up to date versions of
Erlang.
</p><p>
Users within Ericsson can use Ericsson's internally supported
version of Erlang from <url href="http://www.erlang.se/">
www.erlang.se</url>.
</p>
</section>
<section><title>What's the current version of (Open Source) Erlang?</title>
<p>Erlang/OTP 19.3 was released in March 2017.</p>
<p>Prior to 17.0, Erlang used a slightly unusual version
numbering scheme, e.g. the previous version was called R16B-3.
</p><p>Major releases typically come somewhere between 12
and 18 months apart.
</p><p>
Components of Erlang have their own version numbers, for
instance the virtual machine in 17.0 has version 6.0.
</p>
</section>
<section><title> Which licence is Open Source Erlang shipped with?</title>
<p>
The Open Source Erlang <url
href="http://www.erlang.org/EPLICENSE">Licence</url> is essentially
the Mozilla (Netscape) Public Licence with a few modifications
to make it compatible with Swedish law.
</p><p>
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.
</p>
</section>
<section><title>Where is the Erlang documentation?</title>
<p>
The language itself is best described by the
<url href="http://www.erlang.org/doc/reference_manual/users_guide.html">
Language Reference Manual</url>.</p><p>
The documentation delivered with open source erlang,
as both man pages and <url href="http://www.erlang.org/doc.html">
html</url>, 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 <c>erl -man gen_tcp
</c>.
</p>
</section>
<section><title>Which book about Erlang should I read?</title>
<p>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:
</p>
<p>
<em>Introducing Erlang</em> by Simon St. Laurent, 2013,
is a very gentle introduction to Erlang for beginners.
It's available directly from the <url
href="http://shop.oreilly.com/product/0636920025818.do">publisher</url>.
</p>
<p>
<em>Learn You Some Erlang for Great Good!</em> by Fred Hebert
is a beginners' book about Erlang, published in 2013. It's
available directly from the <url
href="http://nostarch.com/erlang">publisher</url> and also
for reading <url href="http://learnyousomeerlang.com">online</url>.
</p>
<p>
<em>Erlang and OTP in Action </em> by Martin Logan, Eric
Merritt and Richard Carlsson was published in 2010. You can
buy it from various online bookstores, or directly from the
<url href="http://www.manning.com/logan/">publisher</url>.
</p>
<p>
<em>Erlang Programming (A Concurrent Approach to Software
Development) </em> by Francesco Cesarini and Simon Thompson
was published in 2009. Get it from Amazon etc or directly from
the <url
href="http://oreilly.com/catalog/9780596518189">publisher</url>.
</p>
<p>
<em>Programming Erlang: Software for a Concurrent World</em>
(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 <url href="http://pragmaticprogrammer.com/titles/jaerlang/index.html">publisher</url>.
</p><p>
There are also some books in languages other than English:
</p><p>
French: <em>Erlang Programmation</em> (Micka&euml;l R&eacute;mond)
can be ordered
<url href="http://www.eyrolles.com/Informatique/Livre/9782212110791/livre-erlang.php">from the publisher</url> or via
<url href="http://www.amazon.com/">Amazon</url>.
</p><p> Spanish: <em>Erlang/OTP Un Mundo Concurrente</em>
(Manuel Rubio) can be ordered directly from the <url
href='http://erlang.bosqueviejo.net'>publisher</url>.
</p><p>
Of historical interest only: <em>Concurrent Programming in
Erlang (2nd. Edition, 1993)</em> (Armstrong, Virding,
Wikstr&ouml;m &amp; Williams). Archaeologists can download the
<url href="http://www.erlang.org/doc.html"> first half of the
book</url> from erlang.org.
</p><p>
Also only of historical interest: Maurice Castro's book, <url
href="http://www.castro.aus.net/~maurice/serc/erlbk/"
>Erlang in Real Time (1998)</url>.
</p>
</section>
<section><title> What advanced Erlang documentation is there?</title>
<p>
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.
</p>
<p>
<url href="https://happi.github.io/theBeamBook/">The BEAM book</url>
describes Erlang's virtual machine, called BEAM.
</p>
<p>
The <url href="http://www.erlang.org/download/erl_spec47.ps.gz">
Standard Erlang</url> spec (1999) aims to define the Erlang language.
There is currently no compiler which actually implements everything
exactly the way <em>Standard Erlang</em> 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.
</p><p>
<url href="http://www.it.uu.se/research/group/hipe/cerl/">Core Erlang
</url> (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.
</p><p>
The proceedings from the
<url href='http://www.erlang-factory.com/'>Erlang User Conferences
</url> contain many interesting articles. The
<url href="http://www.erlang.se/euc/">
proceedings</url> for conferences from 1999 to 2008 are also still
online.
</p><p>
The internals of the BEAM file format are described on
<url href="http://www.erlang.se/~bjorn">
Bj&ouml;rn's homepage (2000) </url>. Eventually
this will/might include a description of the
virtual machine's instructions. Bj&ouml;rn also includes some
benchmarks comparing different versions of the BEAM machine.
You may also want to take a look at the <c>beam_lib</c>
module.
</p><p>
Joe Armstrong's Thesis,
<url href="http://erlang.org/download/armstrong_thesis_2003.pdf">
(2003)
Making reliable distributed systems in the presence of software errors</url> 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 <em>Design and Evolution of C++</em>.
</p><p>
<url href="http://www.erlang.se/publications/xjobb/Secure_Dist_Comm_in_SafeErlang.pdf">
Secure Distributed Communication in SAFEERLANG</url> (2000), which was
a student thesis, contains a good, if dated,
overview of Erlang's distribution mechanisms (Section 5).
</p><p>
<url href="http://www.erlang.se/publications/xjobb/d95-rgr.thesis.2s.pdf">
Enhancing Security in Distributed Erlang by Integrating Access Control</url> (2000) contains a good
overview of some of Erlang's implementation aspects, including
memory allocation (section 7).
</p><p>
The <url href="http://www.cs-lab.org/papers.html">
(Ex-Ericsson) computer science laboratory</url> has a collection
of papers about Erlang-related topics.
</p><p>
The source-code release includes a directory with some of the
internal build documentation in the subdirectory
<c>erts/emulator/internal_doc/
</c>.
</p><p>
<url href="http://www.erlang-in-anger.com">
Stuff Goes Bad: Erlang in Anger</url> (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.
</p>
</section>
<section><title> What documentation is there in related subjects?</title>
<p>
There are a couple of books about specific types of applications
which use Erlang as the main language in the book:
</p><p>
<em>Building Web Applications with Erlang</em> by Zachary Kessin
</p><p>
<em>Handbook of Neuroevolution Through Erlang</em> by Gene I. Sher
</p><p>
The standard text about data structures in functional languages
is <em>Purely Functional Data Structures</em> by
Chris Okasaki. The parts about laziness (about half of the book)
do not apply to Erlang, but are interesting nonetheless.
An <url href="http://www-2.cs.cmu.edu/~rwh/theses/okasaki.pdf">early
version of the book</url> is available online, the book itself is
available from many online booksellers.
</p><p>
<em>Structure and Interpretation of Computer Programs</em>
is a standard introductory text to functional programming. It is
available both on paper and
<url href="http://mitpress.mit.edu/sicp/">online</url>.
</p>
</section>
<section><title>Is there public repository for the Erlang source?</title>
<marker id="repositories"/>
<p>Erlang has an <url href="http://github.com/erlang/otp">official Git
repository</url> maintained by the Erlang/OTP
group. There is also
an <url href="http://github.com/mfoemmel/erlang-otp"> unofficial
repository</url> which includes history all the way back to 1999.
</p>
</section>
<section><title>How can I contribute to Erlang?</title>
<p>
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.
</p><p> If your code is a correction, modification or extension to an
existing part of OTP, the usual way of spreading it is via
<url href="https://github.com/erlang/otp/wiki/Contribution-Guidelines">github</url>.</p>
<p>
If your code is a new application or library, some common ways of
distributing it are:
</p>
<list>
<item><p>Starting your own
<url href="http://github.com/">github</url>
or <url href="http://code.google.com/projecthosting/">Google code</url>
project </p></item>
<item><p>Putting the code on a personal homepage </p></item>
</list>
</section>
<section>
<marker id="eeps"/>
<title>How can I propose changes to the language itself?</title>
<p>
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 <url
href="http://www.erlang.org/erlang-enhancement-proposals">Erlang
Enhancement Proposal</url> which formalises the process.
</p>
</section>
<section>
<title>How do I report a bug?</title>
<p>
Use the <url href="https://bugs.erlang.org/">bug tracker</url>.
</p>
</section>
<section>
<title>Where is Erlang discussed in the real world?</title>
<section>
<title>Conferences</title><p>
<url href="http://www.erlang-factory.com">Erlang Factory</url>
organises regular Erlang conferences around the world. By tradition,
the annual Erlang User Conference is held in May in Stockholm
(Erlang's birthplace).
</p><p>
Erlang crops up in other conferences every so often, e.g.
<url href="https://thestrangeloop.com/">Strange Loop</url>
usually has a presentation or two about Erlang.
</p><p>
Academic conferences about
functional programming are also attended by a few Erlang users.
The <url href="http://icfpconference.org/">
International Conference on Functional Programming</url> usually
includes an Erlang workshop.
</p>
</section>
<section>
<title>Erlounge and User Groups</title><p> 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
<url href="https://erlangcentral.org/events/">events page on erlangcentral.org</url> listing some meetings, others are organised locally.</p>
</section>
</section>
<section>
<marker id="mailing-lists"/>
<title>Where is Erlang discussed online?</title>
<p>
There are several
<url href="http://www.erlang.org/static/doc/mailinglist.html">
mailing lists devoted to Erlang</url>:
</p>
<section>
<title>erlang-questions</title><p>
This is intended for general
discussion about Erlang. Anyone can send
mail to <url href="mailto:erlang-questions@erlang.org">
erlang-questions@erlang.org</url>, and anyone can
<url href="http://www.erlang.org/static/doc/mailinglist.html">
subscribe</url>.</p>
</section>
<section>
<title>erlang-announce</title><p>
This list carries announcements
about new releases of Erlang, patches, etc.
All posts to <em>erlang-announce</em> also appear
in <em>erlang-questions</em>.</p>
</section>
<section>
<marker id="forums"/>
<title>Web forums and mailing list archives</title>
<p>
The erlang-questions list is
<url href="http://www.erlang.org/pipermail/erlang-questions/">
archived on the Erlang website</url>.
</p>
<p>
<url href='http://www.erlangcentral.org'>Erlang Central</url>
has some Erlang-related forums. It also has a good calendar of
Erlang events (hack nights, local meetups, etc.)
</p>
</section>
<section>
<title>IRC channel</title><p>
There's an IRC channel, #erlang, on irc.freenode.net</p>
</section>
</section>
<section><title>Where can I find Erlang programmers/employers?</title>
<p>
Posting a short note to <seealso marker="#mailing-lists">
erlang-questions@erlang.org</seealso> is a good start,
especially if the subject-line clearly identifies the post as
a job request/advert.</p>
<p>
There are several sites with a high concentration of Erlang jobs:
</p>
<list>
<item><url href="http://functionaljobs.com/">Functional Jobs
</url></item>
<item><url href="https://www.erlang-solutions.com/careers/careers.html">
Erlang-solutions' recruitment page</url></item>
</list>
<p>
Several consultant groups have Erlang-certified people,
including <url
href="http://www.erlang-solutions.com/">erlang-solutions.com
</url> (based in London, take assignments worldwide), <url
href="http://www.process-one.net/en/services/">
Process-one</url> (based in France) and <url
href="http://www.enea.se/"> ENEA data</url> (Sweden)
</p><p>
If you want to be listed here, send some mail to
<url href="mailto:matthias@corelatus.com">
matthias@corelatus.com</url>.
</p><p>
Kontakten (Contact), an Ericsson-internal newspaper, may
also be useful as it carries many job ads.
</p>
</section>
</chapter>