1 ) В целом - да. Более подробно вам пока не нужно
2) И то и другое. Компилируется под определенную архитектуру в исполняемый файл целевой ОС с использованием системных вызовов этой ОС
3) Программе есть разница, если она использует хоть что то системное. Либо можно использовать универсальные "прослойки" а-ля Qt, которые в зависимости от параметров компиляции подставят нужные вызовы. Т.е. консольный хеллоу ворд можно написать так, что скомпилится и под линь и под винду. Что то сложное - нужно учитывать нюансы или даже делать разные реализации.
4) Разница есть. На уровне написания программы - это размеры типов данных, особенности работы с памятью и все такое. На уровне выполнения - если программа скомпилирована не под тот проц - то она просто не заработает.