Erlang's not about lightweight processes and message passing (2023)
What makes Erlang/BEAM special?
- Many argue the power is in the combination of features, not any single one:
- Lightweight isolated processes (millions per node), preemptive scheduler, message passing, pattern-matching receives.
- Supervision trees and “let it crash” design for partial recovery / microreboots.
- Hot code + state upgrades, distributed nodes, OTP behaviours, Mnesia, built-in telemetry and tooling.
- Some push back on the article’s emphasis on behaviours/interfaces as the key idea: behaviours are useful, but depend on the VM’s process model and fault-handling; taken alone they’re not the main differentiator.
- Others stress the scheduler: preemption and per-process heaps mean a bad process can’t easily take down the system, unlike typical async runtimes.
Comparisons: OS processes, k8s, actors, async, other stacks
- Replacing BEAM pieces with OS processes, Kubernetes, Java threads, or hot-reload mechanisms is seen as possible in theory but painful in practice; Erlang’s value is having these as a coherent, in-language stack.
- Actor-like libraries (Akka, Orleans, etc.) and CSP-style channels are discussed; consensus: the model isn’t unique to Erlang, but BEAM’s isolation, supervision, and distribution are unusually integrated.
- Long subthread comparing BEAM to Node.js and general async runtimes:
- Critiques: lack of preemption, orphaned async tasks, lost errors, hard observability and profiling.
- BEAM’s per-process mailboxes, crash semantics, and introspection are seen as easier to reason about under load.
- Counter-claims note that modern async in .NET/Rust is highly optimized and that some Erlang fans overstate BEAM’s technical lead.
State, durability, and limits
- Erlang processes lose in-memory state on crash; durable state must be handled via Mnesia or external systems, with explicit queue-ack and retry patterns.
- Mnesia is described as powerful but tricky to scale; naive “one big Erlang cluster” designs can hit memory and scaling ceilings.
Adoption, ecosystem, and business concerns
- Reasons cited for limited adoption: alien syntax, need to internalize OTP’s crash/restart mindset, small hiring pool, lack of a big-corporate sponsor, and perception of only incremental (not 10x) gains.
- Others argue Erlang/Elixir can significantly reduce engineering effort and operational pain, but these advantages show up later in a product’s life, not at adoption time.
History and misc
- The “Erlang was banned” story is clarified: there was a late‑90s ban on new use inside Ericsson for business/strategy reasons; it led to open-sourcing, later relaxation of the ban, and continued internal use.
- Side discussions cover syntax preferences (Erlang vs Elixir vs Gleam), aging BEAM internals/tooling, and experimental projects like a Node-RED-style FBP frontend over an Erlang backend.