1. Компиляция - перевод текста в исполняемый код. Современная компиляция процесс сложный, сейчас он включает в себя и непосредственно трансляцию и линковку в конечный исполняемый файл (.exe, .com, *nix executable, и др). Да исполняемый файл это практически машинный код процессора.
2. Компиляция обычно идет под определенную платформу (грубо говоря процессор), но в Java, например, тоже есть JIT-компиляция под саму java-машину. Сейчас слишком много виртуализации, чтобы давать недвумысленные утверждения.
3. Программе есть разница. У компилятора могут быть разные опции оптимизации. А OC лейер делается лично вами - например для отрисовки окошек, вы можете использовать виндовые библиотеки, и понятное дело что они будут работать только под виндой. Или использовать какой-нить фреймворк кроссплатформенный, и тогда будет под теми платформами которые поддерживает фреймворк. Или мутите графику с нуля, ищете как это реализуется под каждую платформу. То есть на С++ вы можете писать в зависимости от ваших знаний платформ.
4. Разное железо предоставляет разные возможности, но вы должны уметь с ним работать. Если вы хотите использовать GPU (чипсет на видяшках) для майнинга, понятное дело что железо должно быть с таким GPU.
Если вы пишете простенькую прогу с использованием стандартных библиотек, разницы нет.