Por que é tão difícil portar jogos de console para PC e vice versa?
Eu acho que não é mais.
Desenvolvedores usam o que é chamado de mecanismo de jogo... como Unreal, Unity, Frostbite, Anvil, CryEngine... etc.
Um mecanismo é basicamente uma coleção de ferramentas que você precisará para escrever um videogame. Se você escreve um jogo em uma engine que é multi-plataforma otimizada como Unity, então realmente não é uma grande tarefa "portar"... ou mais especificamente não há mais necessidade de portar um videogame.
Você vê, "portar" é um processo que significa que você está pegando um software que foi construído para um ambiente e criando-o para outro ambiente. A questão é que você pode pensar no seu jogo como sendo executado dentro do ambiente da engine em que ele foi criado, e essa engine já foi portada para todas as plataformas que você vai usar.
Então nós fazemos menos portes hoje em dia e mais apenas fazemos considerações para diferentes plataformas; capacidade física, saídas de exibição, e dispositivos de entrada principalmente.
Quais são alguns problemas históricos? Bem... jogos e motores de jogo costumavam ser muito menos sofisticados. No início, às vezes os jogos não eram capazes de ser codificados para vários ambientes. Por exemplo, se um jogo ou o motor que utilizava era feito para Windows, então poderia ter confiado em algumas bibliotecas de software que não estavam disponíveis no PowerPC ou Mac. Nesse caso, você não seria capaz de portar esse jogo para nenhuma dessas plataformas sem reescrever completamente essas bibliotecas de software inteiras para Mac e PowerPC. Muitos daqueles jogos que foram portados foram simplesmente recodificados para o novo ambiente, que é menos uma porta e mais um remake.
Outros problemas incluíram o facto de muitos consoles, pelo menos até bastante recentemente, não eram processadores x86 como o computador. Muitos consoles usavam arquitetura Power e RISC, e alguns como o Switch estão usando ARM.
x86 e ARM e Power e qualquer outra arquitetura é basicamente como uma linguagem. Se você codificou em x86 (o seu computador comum) e queria que o seu software funcionasse no Power (muitas consolas ao longo da história), então basicamente escreveu um livro em francês e queria que alguém que entendesse alemão pudesse lê-lo.
Para continuar a metáfora do meu livro, as línguas podem nem sempre traduzir directamente. Eu posso ter dito algo em francês que poderia ser interpretado de várias maneiras em palavras alemãs com significados variados. Eu preciso de algum tipo de regras absolutas de como eu vou usar a língua para a fazer traduzir ou pode haver problemas.
Se você entender a minha analogia, então você pode entender alguns dos desafios apresentados por correr software num computador x86 e simplesmente corrê-lo numa consola Power ou RISC.
Felizmente, continuando a analogia do meu livro; nós temos um conjunto de regras absolutas sobre como usar a língua. Os motores de jogo modernos já sabem falar em Alemão e Francês... por isso posso escrever o meu livro em Inglês e tê-lo simplesmente traduzido correctamente. É por isso que não precisamos mais "portar" jogos... ou pelo menos é muito mais fácil do que costumava ser.
A última coisa a considerar são as limitações físicas de diferentes hardwares. O Xbox pode ter tido uma forma de lidar fisicamente com partículas leves, e o Playstation tinha outra, e o PC tinha ainda outra. Se este fosse o caso, o que já aconteceu antes, então você não seria capaz de fazer um conjunto de efeitos de iluminação para todas as 3 versões do jogo. Você teria que fazer um efeito de iluminação que funciona fundamentalmente diferente para cada versão do jogo.
Existiram também momentos em que desenvolvedores de jogos podem ter tomado atalhos com este tipo de problema, e ou os efeitos não funcionam bem ou parecem muito ruins em uma plataforma ou outra.
Eu uso iluminação como exemplo, mas tudo o que você engine pode fazer; física, raytracing, sistemas de partículas, renderização, etc. podem ter formas diferentes de serem feitos fisicamente no hardware. Se duas plataformas diferem, então você pode ter que compensar.
Geralmente eu acho que portar é a palavra errada para usar... infelizmente eu não tenho certeza qual palavra seria mais apropriada para o uso moderno. Dominando talvez?