Исходя из моего скромного понимания внутренних компонентов компьютера, если вы скомпилируете программу на C для конкретной архитектуры набора команд, результирующий исполняемый файл будет одинаковым для любой операционной системы, за исключением системных вызовов.
С другой стороны, исполняемые файлы для разных архитектур набора команд совершенно разные.
Почему тогда, когда вы хотите загрузить программу для Интернета, вам обычно предоставляется выбор, основанный на вашей ОС, а не на архитектуре набора команд?
Кроме того, поскольку существует так много архитектур набора команд, я не могу себе представить, как выглядит установщик. Например, если установщик поддерживает 20 различных архитектур, отбрасывается ли 95% данных во время установки?