But one of the sources of the strength of Erlang's model is inherently built-in the language---many things are passed by value, including aggregate types, so that GC can run per-thread and you don't need to care about synchronization. You can implement the same model on top of other languages (e.g. see Termite http://lambda-the-ultimate.org/node/841 ), but you do change the language's semantics.