We could have a world where Vulkan was the one stop shop graphics API anywhere. Instead, we are in this situation where everything but Apple products supports / will support it.
Metal was done [1] even before the Khronos Group issued a call to develop a next-gen low-overhead API [2] which became Vulkan. It helped that AMD basically donated Mantle so they were able to turn around in a year. Apple understandably was in no appetite to use DX12, and then-AMD-specific Mantle could not be construed as any more than a tech demo and/or an attempt to eke out more performance from their cards.
It makes the old OpenGL/DirectX situation look great by comparison, doesn't it? Now there's three competing modern graphics APIs, and none works on every platform. At least OpenGL worked everywhere, if poorly.
Aren't Vulkan, Direct X 12 and Metal much closer than Direct X pre 12 and Open GL ever were? The three are derived (at least in philosophy) from AMD's Mantle, not like Direct X pre 12 and Open GL that are (or at least were) very different beast.
I only ever programmed with OpenGL 1.3 and 1.4, so my knowledge is not very up-to-date to say the least...
Porting complexity is still non-trivial, and then you need people who understand multiple bare metal APIs.
The architectures are all based off Mantle, but OpenGL 3.3 and DX10 were very similar in their hay day, and porting was still fairly limited (you can still partially blame the horrible adoption of the 3.x series that took so long to take off).
Consoles have always been a special case, though. For one thing, the entire API is usually under NDA, so a different graphics system is the least of your problems.
It's the same problem as with USB C, Vulkan is predated by Apples own standard and you can't change it without hurting someone. Apple made the decision that they would rather save their own customers unnecessary pain.
You can't change it from one day to another, but Apple has all the power to add Vulkan as alternative interface to the same hardware, in addition to the Metal API. They can do this at any time, now or in the future, without inflicting pain on anyone.
Eventually Metal won't be used anymore since there's no point in using the less portable API with the same capabilities. Finally, once use of Metal is low enough, discontinue it in a new iOS/macOS update.
Upgrades with parallel maintenance and deprecation timelines are well understood, and very feasible for a company with Apple's engineering prowess. There's really no argument other than continued lock-in to stick with Metal only.
The pain is going to be that very few video games will be ported to OSX / iOS unless they dramatically increase their market size to justify the heavy cost to port to Metal just for those systems. If Apple cared about customers in this case, it would be an obvious choice to use Vulkan to pressure developers into using the industry standard rather than the Microsoft only product they are using predominantly now.
Or the 4 engines that most games are made in will just add a metal layer. Or you use something like https://moltengl.com/ to make a direct opengl -> metal wrapper.
We could have a world where Vulkan was the one stop shop graphics API anywhere. Instead, we are in this situation where everything but Apple products supports / will support it.
Why did it have to be this way?