One of the main reason why Cross-platform is not possible is due to the security requirement of each sides.
Each console is, as we all know, like a computer, but with hard and light restrictions as to the access to the OS. That's why you hear about things like devs console and demo consoles and other "version" of a console. Each has different kind of restrictions.
Where I'm going with this is this: Consoles can act like ports toward their respective online services: PlayStation Network and Xbox Live and Nintendo **** Online Services (Like Nintendo Switch Online Services or Nintendo Wii Online Services, etc.)
Those systems are the responsibility of their respective "owner" (Microsoft, Sony, Nintendo) and as they allow you to chat with other players, purchase online and do many action, their security are considered paramount.
If a system (like a Xbox One) could connect to another system (Like a PS4) through something like a game (which is a software), depending on the level of authorization allowed by the game's software, there's a security risk involved.
Especially with the authentication system of those games. If you allow players from a console to play with another player on another console, both uses different authentication system. Kinda like you got a player who's authentication is handled by PlayStation Network while another player has its authentication handles by Xbox Live. How do you make it so that the PlayStation player can "download" the player's data (icon, name, etc.) from the Xbox player? How do you handle communication between both? How would you handle things like friends/Message?
There are 3 possible solutions:
1) Every console would use 1 single authentication service.
That's close to impossible. Sony, Microsoft and Nintendo would never allow such a thing. That's because this would involve, for one of them at least, some kind of cost like a cut from sales (usually 25%-35%) and for the other, that would means a lot of investment (and risks) for better hardware.
2) The game publisher run its own hosting server.
This requires a long and painful process of approbation from all concerning parties involved. Basically, this requires that a per-authorized server load players data from both system and only that server can manage the player data from both consoles at once. The PlayStation doesn't access Xbox Live and vise versa. They both access a third party server that load and upload the data.
The game Rocket League does something similar to that way with PC gamer (Using Steam) and PlayStation 4 gamer (using PlayStation Network). PC gamer only see the name of the players from PSN as that information is public. PC gamer can't see the PSN player's icon as that is restricted. (Instead, PC player only see PSN icon). The server connects the clients, but doesn't do anything like managing the purchases. Instead, it's a Key-Based secured transaction system (similar to Paypal's Key-Link system you use every time your use PayPal) which is managed by PSN and Steam directly which is then managed by the local console. (So a Steam PC can't access the PSN account at all.)
The main issue with this solution, outside of data fetching being quite restricted and complex to implement, is that you got to keep all ports compatible, meaning if you release a patch for PlayStation with new content, that content must be available and ready for PC or any other console. This makes it like you got to make 2 or more build of your game at once, test them, release them, be ready for double the bug/crash report etc.
3)Each consoles run on a separate partition/layer on the server.
This is what's usually happens with most console driver MMOs. 1 networks that act as a server for all the consoles and PC, but each access a different part of the system. This system doesn't requires that each port has the same version nor anything. The only thing is that PSN can't join XBox Live and neither can the PCs. Each are "in their own world".
This is why you don't rarely see any interactivity shared between consoles and PC. Too much risks of problems and restrictions. 99% of the cases uses 3). The remaining 1% usually involve a simplistic system like Rocket League where you only load names of the other player's profile and their latest action through a streaming sub-system.