Yep, an Erlang "process" is internal to the Erlang runtime, or "Node", which runs as a single OS process. You can run as many Nodes as you like though on the same machine or on different machines and then have them talk to each other. At that point, the message passing between Erlang processes is transparent. If you send a message to another process, you don't need to know what Node the process is running on; the runtime takes care of all that. So you typically achieve fault-tolerance by running multiple Nodes on multiple physically seperate machines and use some of Erlang's supervision and monitoring functionality to recover gracefully if a Node manages to crash. An Erlang Node crashing would probably happen more from hardware failure than a core dump though since it's been pretty thoroughly battle-tested and Erlang doesn't really let you do stupid things like pointer manipulation.