← Back to context

Comment by Alupis

5 hours ago

The BEAM is fascinating for many reasons, including being register-based.

I really just wish the BEAM was portable in the way the JVM is. The BEAM hooks into so many system libraries, you must compile it on every flavor of linux instead of just unpacking a tarball.

This means you either must use your distro package manager's version, or compile from scratch. If you want to control the exact version that's being used across your team (via `asdf` or similar), this practically means you'll end up compiling the BEAM over and over...

You want https://github.com/burrito-elixir/burrito

  • Burrito works very well in my experience. I've used it for distributing an implementation of breakout in Elixir with OpenGL and Metal rendering backends as a binary. Pretty neat!

  • This is very neat, thanks for the link!

    Digging into it, you can get "universal" BEAM tarballs from here[1]. It links against muslibc and appears to bring it's own openssl. Very cool.

    [1] https://beammachine.cloud/

Perhaps you should give Nix a try :)

  • Correct me if I'm wrong, but you'd still have to compile it from source on nix, no?

    On my relatively powerful workstation, Erlang/BEAM takes about 7 minutes to compile.

    We're working around this currently by having a fat devcontainer image, pre-built with Erlang inside (from source) by our CI. It chews through CI minutes unavoidably due to how docker layer caching works.

    It would be awesome to just download and unpack a tarball, regardless of which distro you're using.

    • Nix is centered around the local Nix store and binary caching.

      As long as the specific version of Erlang you’re using is present in either your Nix store or the global cache for your OS and arch (at cache.nixos.org), you should not need to compile anything.

      And if you rely on custom builds, you can just setup your own binary cache. This is similar to remote caching in Bazel.

      Some more details on Nix caching here: https://zero-to-nix.com/concepts/caching/