With `no-c-deps` enabled microbin can be compiled for aarch64 by simply
passing in `--no-default-features`, `--no-c-deps` & `--target
aarch64-unknown-linux-musl`. The resulting binary is fully static and
does *not* depend on glibc. Therefore it can be deployed to any linux
target running an aarch64 cpu (arm). There is no need for any
containers.
There where four obstactles to easily statically linking microbin
with musl.
- The syntect library depended on the onigura regex engine. With
`no-c-deps` it uses `fancy-regex` a slower alternative fully written
in rust.
- Dependency actix-web supported zstd compression requiring the system
zstd library to be present.
- The rusqlite library build and linked the C-library sqlite. That needs
a crosscompiler and various crosscompile packages. With `no-c-deps`
enabled the sqlite db option is disabled and the -json-db arg must be
used. If the user does not pass -json-db microbin will panic when
starting with a clear error message.
- reqwest was using openssl for reporting telemetry and checking for new
versions. With `no-c-deps` it uses rustls with crypto provider
rustcrypto. While rustcrypto has not been formally verified it should
be good enough for sending telemetry (which should not contain any
secure/personal data anyway) and checking versions.