Olá André, tudo bem com você?
Perfeito, quando estamos falando de sistemas de alto nível, quem faz essa ponte entre o hardware e o software é o sistema operacional, que nesse caso precisa do código compilado especificamente para ele, e que após compilado, esse mesmo arquivo executável não rodará em outro sistema operacional, sendo necessária a re-compilação do código fonte.
Para exemplificar, vamos imaginar um programa escrito em uma linguagem compilada dentro da plataforma Windows. Esse código vai ser escrito e após sua compilação, será gerado um arquivo executável, onde a pessoas usuária poderá acessar as funcionalidades do programa. No entanto, ao enviar esse arquivo executável para um computador Linux e tentando rodá-lo, vai ocorrer um erro, pois as maneiras em que os sistemas operacionais passam instruções ao processador variam entre si, isto é, cada sistema operacional se comunica da sua maneira com o processador. Sendo assim, para conseguir rodar o mesmo programa que estava sendo rodado na plataforma Windows, será necessário enviar o código fonte para a plataforma Linux e compilar o programa de uma maneira que o SO Linux entenda!
Para um mesmo programa executável funcionar em diferentes plataformas, existem algumas soluções criadas pelas pessoas cientistas de computação; talvez a mais conhecida delas seja ter uma máquina virtual intermediária como acontece na plataforma Java, onde existe uma máquina virtual e o código é compilado para uma linguagem que essa máquina virtual entenda, e esta fica encarrega de traduzir esse código, que chamamos de bytecode
para o Sistema Operacional. Sendo assim, é possível gerar um único executável que vai rodar em diferentes plataformas, pois há um nível maior de abstração antes de passar as instruções ao processador.
Em caso de dúvidas, eu fico à disposição.
Um grande abraço e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!