This past week, I setup a custom binary format on my workstation for WebAssembly.
Such formats can be setup without modifying the kernel thru the binfmt_misc
capability built into the Linux kernel. This allows specifying an interpreter for
files that are neither a native binary format nor a script starting with
In my case, I setup an interpreter for WebAssembly using the wasmtime
runtime. To do so, I created a file at
/etc/binfmt.d/webasm.conf with the contents
then ran the command
cat /etc/binfmt.d/webasm.conf > /proc/sys/fs/binfmt_misc/register,
which is where the
binfmt_misc filesystem is mounted on my system.
To test this, I opened a terminal in a directory where I am experimenting with compiling
crystal to WebAssembly, set the execute bit on the file (main.wasm),
./main.wasm as was greeted with the same output as when I run
so I consider it a success.