But why new cores break compatibility? I mean, we can use old software on new CPUs without issues, what's the difference in consoles if both are x86?
With consoles with a fixed hardware setup( All same model consoles have in principle the same hardware) , the programming environment allows for more optimizations and tweaks that use the hardware to its fullest and circumvent any slow paths that might exist in the hardware.
With the pc and its various hardware options, it is much more difficult if not close to impossible to do that very same thing. That is why windows has a more abstract programming model. To hide all the different model gpus and cpus and amount of memory and types of memory. Even with DX12 and vulcan this is the case more or less but developers have more freedom.
With consoles this is not the case. What can happen, if you write a game which is low level (means close to the hardware with as little abstraction as possible) optimized for jaguar modules , you might run into issues when you use another core even if it is x86 64bit as well.
The point is that consoles get close to high end pc performance by doing a lot of low level programming that is dependent on exact hardware behavior and timing constraints of that same hardware. If the hardware changes slightly, the program might not run that well and cause hiccups or even crashes. Sometimes, game engine programmers discover certain undocumented behavior of the hardware that can be used to speed up game code.
If this is used, it is certain, the game will not run well on an emulator or different hardware with for example cpu instruction architecture compatibility but the same principle applies to all the hardware, the gpu and the memory controller and the logic that connects it all together.
In the old days with for example the Amiga, this was very normal. That is why even now, an amiga emulator or some game console emulator on a high end pc may not run all those (Amiga) games properly.
edit:
With abstraction i mean that the hardware details are hidden and a more general programming interface(API) is used. This high level API then translates all your wishes to commands and data that the underlying hardware can understand. With different hardware, the high level API hides the details of all the hardware. Of course, this means a slow down because you have to prepare your data to a common format used by the API and the API then translates it again to data and commands that the hardware understands. Because of this generalization and creating a common format, not always maximum performance can be reached for the sake of being able to use many different kinds of hardware.
The API takes care of that. DirectX, vulcan, opengl and opengl ES are for example such API (Application programming Interface).
https://en.wikipedia.org/wiki/Application_programming_interface.
If you are interested in how it all works , hop to the beyond3d forums, there is a consoles section that sometimes has very informative explanations about how it all works. Especially sebbbi is very open and extremely good in explaining it to people who are interested.
https://forum.beyond3d.com/