News for hackers. Stuff that matters.
Re:Languages on BEAM, the Erlang virtual machine by bitwalker on Friday January 20, 2017 @03:50PM (#13446874)
Deploying releases has been fairly painless in my experience, but I also have had my head in Elixir and releases in general for a long time, so I may not be a great sample. You get a tarball containing everything the app needs to run, and all you do is extract it and run the boot script - other than entirely self-contained binaries like Go produces, I don't think it gets much better. Deploying without releases is probably a lot more painful though, due to the number of dependencies required, particularly web applications (Erlang, Elixir and Node). I recommend anyone deploying Elixir applications look into releases - it makes life much easier (imo).
Re:Languages on BEAM, the Erlang virtual machine by amsha on Friday January 20, 2017 @03:58PM (#13446931)
I'd mostly agree, and the packages you've written (ExRM and Distillery) make releases super easy to build, start, and stop.

The main benefit of Go, I think, is that it can cross-compile builds. Erlang and Elixir don't have any way to do that, so if you develop on Mac and deploy on Linux you'll need to build your release in a VM or on a build server running Linux.

Re:Languages on BEAM, the Erlang virtual machine by bitwalker on Friday January 20, 2017 @05:50PM (#13447610)
You actually don't have to bundle the runtime, but you can also specify an "alternate ERTS", i.e. one that has been compiled for the target architecture, and bundle that one instead. This is how you "cross-compile" releases.
Re:Languages on BEAM, the Erlang virtual machine by kungfooguru on Friday January 20, 2017 @05:48PM (#13447590)
You can include any erts in your target system, so you can take one built on linux, copy it to your mac and use it only at the time when you construct the release tarball.
Re:Languages on BEAM, the Erlang virtual machine by chrisseaton on Friday January 20, 2017 @04:23PM (#13447080)
I thought BEAM was a bytecode VM so why do you need to cross compile anyway? Is the bytecode different on different architectures?
Re:Languages on BEAM, the Erlang virtual machine by bitwalker on Friday January 20, 2017 @05:52PM (#13447619)
Some libraries contain native dependencies, and those have to be cross-compiled. You also need a cross-compiled runtime if you are bundling it and not using one already installed on the target.
Re:Languages on BEAM, the Erlang virtual machine by rubiquity on Friday January 20, 2017 @04:30PM (#13447122)
Releases include the Erlang byte code and the VM as well which needs to be compiled for the platform it will run on.
Re:Languages on BEAM, the Erlang virtual machine by chrisseaton on Friday January 20, 2017 @04:36PM (#13447161)
But why would you want to recompile the VM when you've just changed your program?

And it looks like you can cross compile BEAM anyway. http://erlang.org/faq/implementations.html. It's just a C program isn't it so why wouldn't you be able to?

Re:Languages on BEAM, the Erlang virtual machine by GrinningFool on Friday January 20, 2017 @05:21PM (#13447444)
The ERTS runtime (VM + libraries) are taken from the host and are not built. That said, it is possible to build the runtime for other platforms via cross compilation. [1][2]. I've done this for ARM, but have not tried to generate a release using the cross-platform build.

The beams themselves are cross-platform bytecode, but in practice beam files are not distributed on their own (except for patching). Typically you'll ship them as part of the released package which includes ERTS, your application, and all required dependencies (system libraries, other apps/libraries, and any native dependencies you've introduced). It excludes anything you don't declare as necessary from the final release package

In practice, people will usually use either the official release tooling or third party tooling to create platform-specific releases.

[1] http://erlang.org/doc/installation_guide/INSTALL-CROSS.html [2] http://www2.erlangcentral.org/wiki/?title=Cross_compiling

Re:Languages on BEAM, the Erlang virtual machine by gamache on Friday January 20, 2017 @04:48PM (#13447234)
You're not recompiling the VM, you're just including a copy of it in the release tarball, so that you can copy the tarball to any machine with the same architecture and run it regardless of whether Erlang or Elixir is installed globally on the machine.

The goal of a release is to bundle together everything you need -- your program, the VM that runs it, your config files, and any instructions necessary to upgrade/downgrade from another version of your code.

Re:Languages on BEAM, the Erlang virtual machine by xxxx00998978 on Friday January 20, 2017 @05:04PM (#13447344)
He means why not just include the apropiate vm as a binary for any given arch.
Re:Languages on BEAM, the Erlang virtual machine by chrisseaton on Friday January 20, 2017 @04:52PM (#13447270)
But why build the VM for every release then? What is it that needs to be cross compiled if you're just copying a VM build into a tarball? Why not copy an existing build of it in?
Re:Languages on BEAM, the Erlang virtual machine by gamache on Friday January 20, 2017 @04:54PM (#13447283)
The VM is not built for every release, it is copied into the release. The fact that it isn't built for each release is why cross-compilation of releases is not possible.
Re:Languages on BEAM, the Erlang virtual machine by chrisseaton on Friday January 20, 2017 @05:00PM (#13447324)
I must be an idiot because I still don't get it. If the VM is just copied into the release, not built, why can't you do that on macOS for deployment on Linux by copying a Linux version in? Why do you need to do it in a VM or Linux build server?
Re:Languages on BEAM, the Erlang virtual machine by gamache on Friday January 20, 2017 @05:03PM (#13447338)
It's probably only that no one's written the tooling for that yet, because it's easy enough to set up a Linux VM or build server.
Re:Languages on BEAM, the Erlang virtual machine by kungfooguru on Friday January 20, 2017 @07:18PM (#13448029)
The tools (relx, exrm) can do that.
Re:Languages on BEAM, the Erlang virtual machine by solidsnack9000 on Friday January 20, 2017 @06:22PM (#13447761)
I don't think it's common to build and deploy from your laptop once you hit a certain team size -- with builds going through Jenkins &al. -- but maybe this really does a make difference for smaller teams.