Skip to content
Ryan Parman edited this page Mar 27, 2024 · 10 revisions

Pre-compiled binaries

For binaries that are written in languages like Go, Rust, and Haskell, one Linux build can run across all Linuxes.

However, binaries which include C/C++ code, are unlikely to be portable if they rely on shared libraries (.so). This means that we likely have to create OS and OS version-specific packages for each OS and OS version that we support.

Compiling from source

Languages like Go and Rust can be easily cross-compiled for Intel64 and ARM64 CPU architectures.

Languages like C/C++ (generally) need to be compiled on the same OS, OS version, and CPU architecture that we are targeting. This can be handled with Docker BuildKit and QEMU.

Languages like Haskell are working on cross-CPU support, but ARM64 does not yet have the same support as Intel64. This means that as we compile Haskell source, we may not be able to support ARM64.

Languages like Python, TypeScript, and Bash can generally be built and packaged more easily. However, because there are more source code files, it's important to keep track of the files.

Clone this wiki locally