Notice how its written that in Erjang you just use shared variables to pass messages between two processes VS copying messages. There you go. If the VM handles thread safety for you, then what do you care that the variable is shared vs not shared or mutable vs not mutable (in the underlying vm)? Shared just means better performance. Wasent the whole point of erlang to let your VM handle sharing vs copying and isolating processes; while you code multi-processing, erlang uses whatever it wants for efficiency.