* [docs] Document experimental, unsupported `nowasm` tag * change some awkward wording
3 KiB
Build without Wazero / WASM
!!! Danger "This is unsupported"
We do not offer any kind of support for deployments of GoToSocial built with the nowasm
tag described in this section. Such builds should be considered strictly experimental, and any issues that come when running them are none of our business! Please don't open issues on the repo looking for help debugging deployments of nowasm
builds.
On supported platforms, GoToSocial uses the WebAssembly runtime Wazero to sandbox ffmpeg
, ffprobe
, and sqlite3
WebAssembly binaries, allowing these applications to be packaged and run inside the GoToSocial binary, without requiring admins to install + manage any external dependencies.
This has the advantage of making it easier for admins to maintain their GoToSocial instance, as their GtS binary is completely isolated from any changes to their system-installed ffmpeg
, ffprobe
, and sqlite
. It's also a bit safer to run ffmpeg
in this way, as GoToSocial wraps the ffmpeg
binary in a very constrained file system that doesn't permit the ffmpeg
binary to access any files other than the ones it's decoding + reencoding. In other words, GoToSocial on supported platforms offers most of the functionality of ffmpeg
and so on, without some of the headaches.
However, not all platforms are capable of running Wazero in the much-faster "compiler" mode, and have to fall back to the very slow (and resource-heavy) "interpreter" mode. See this table from Wazero for conformance.
"Interpreter" mode runs so poorly for GoToSocial's use case that it's simply not feasible to run a GoToSocial instance in a stable manner on platforms that aren't 64-bit Linux or 64-bit FreeBSD, as all the memory and CPU get gobbled up by media processing.
However! To enable folks to run experimental, unsupported deployments of GoToSocial, we expose the nowasm
build tag, which can be used to compile a build of GoToSocial that does not use Wazero or WASM at all.
A GoToSocial binary built with nowasm
will use the modernc version of SQLite instead of the WASM one, and will use on-system ffmpeg
and ffprobe
binaries for media processing.
To build GoToSocial with the nowasm
tag, you can pass the tag into our convenience build.sh
script like so:
GO_BUILDTAGS=nowasm ./scripts/build.sh
In order to run a version of GoToSocial built in this way, you must ensure that ffmpeg
and ffprobe
are installed on the host. This is usually as simple as running a command like doas -u root pkg_add ffmpeg
(OpenBSD), or sudo apt install ffmpeg
(Debian etc.).
!!! Danger "No really though, it's unsupported"
Again, if running builds of GoToSocial with nowasm
works for your OS/Arch combination, that's great, but we do not support such builds and we won't be able to help debugging why something doesn't work.