The most historically important episode BEAM There, Done That has recorded. Mike Williams (JAM emulator author) and Björn Gustavsson (who built the BEAM and has maintained it since 1996) both on the same conversation.
The engineering story:
The original Erlang emulator was written in Prolog - intended only for rapid prototyping. When the Bolmora subsidiary started using it for real systems, the decision was made to build something faster. Joe Armstrong wrote ~20 lines of C. Mike looked at it and said it was awful. He rewrote the inner loop, eliminating bounds checks on the switch statement that were slowing the bytecode interpreter significantly, and optimised message passing to six instructions.
The constraint throughout was memory. Phone switches for whole cities ran on 16–64 MB of RAM. The JAM instruction set was small. When the BEAM replaced it, the early BEAM used significantly more memory - Björn spent considerable time packing two operands into a single 32-bit word and finding other ways to reduce instruction size.
The two-version module rule was deliberate, not accidental. Björn explains: allowing unlimited module versions would let old code accumulate undetected, wasting memory and causing production surprises. He refused to remove the limit even when asked.
The episode closes with a shoutout to Claes Wikström - who added distribution to the JAM, invented ETS tables, and built the first prototype of Erlang’s binary syntax - as someone consistently underrepresented in the origin story.
Claes’s paper on the binary syntax prototype was presented at an early Erlang user conference. The proceedings are the place to find it.