Sras e Srs,
Um código fonte, em um mundo de Alice, está livre de contexto de plataforma, ou seja, é exatamente o que diz a questão.
Podendo ser usado para ser compilado tanto em Windows, quanto em Linux, FreeBSD, Minix, Unix, e até no SO que estou criando.
Pois, o código fonte tem por objetivo expressar como será realizado em tarefa no computador, mas de modo que o programador seja capaz de escrever/ler. Tomemos como exemplo a linguagem C:
#include
int main() {
printf("mensagem ao usuário\n");
return 0;
}
Note que o código acima não faz referência a nenhuma plataforma em específico, assim, ele poderá ser compilado em várias delas indistintamente. No entanto, temos uma chamada de linguagem, melhor de pre-processamento "#include", esta diretriz indica ao compilador que o código precisa de um conjunto de funcionalidades conhecidas para a plataforma alvo.
Assim, se efetuarmos a compilação deste código em um ambiente MS Windows, o binário será direcionado para este MS Windows. Pois, o conjunto de libs disponibilizada para o binário recém criado é especifico para MS Windows.
Por outro lado, se a compilação ocorrer em uma plataforma Linux-based, o conjunto de libs disponibilizada para o binário será específico para este tipo de Linuxs.
Acredito que até este ponto desta explicação, você já tenha entendido que estamos respondendo até este ponto da questão:
"Dependendo da linguagem de programação, arquivos fontes podem ser compilados e executados sem erros tanto no Linux quanto no Windows".
Assim, temo dois binários: um para Windows outro para Linux. E os dois são incompatíveis entre si, mesmo sendo oriundos do mesmo código fonte.
Se ambos são diferentes entre si, como fazer para um rodar na plataforma do outro? Resposta: Emulando a plataforma desejada.
E como fazer isto? Usando um emulador( :) ) como Wine(Linux -> Windows), por exemplo. Mas se eu quiser rodar um programa Linux no Windows, tem como? Deve ter. ;)
Mas eu poderia usar o virtualbox, certo? Errado.
O VBox é um virtualizador que tem a função de virtualizar um ambiente completo (hardware) para instalação de um SO completo. Ao usar o Wine, não precisamos deste aparato todo, basta instalá-lo no próprio linux e apontar para o arquivo executável e pronto.
Com isto, respondemos a segunda parte da questão:
"mas os arquivos binários executáveis resultantes da compilação somente podem ser executados em ambos os sistemas por meio de softwares de emulação."
A resposta ficou um pouco grande, mas espero que te ajude nos estudos.
Força e Foco!