Thanks, that's a great perspective. The reason I called the move hostile towards users is because I'd argue that these platform independent libraries still made it a bit more likely for stuff to be ported to Macs by reducing the amount of work needed.
That is a bit of a mind trap hoverer. In practice OpenGL is notoriously difficult to use across platforms for all but most trivial software — driver bugs and little differences in hardware behavior will ruin you day.
Cross-platform Gpu development for Apple is actually less of an issue than people make it out to be. You can just use Vulkan — MoltenVK works fairly well from what I hear. And most games don't use rendering API directly, they use third-party engines. Two most popular 3D engines — Unity and Unreal Engine 4 — fully support Metal.
And again, OpenGL is still there. If you have legacy software or some academic code, you can certainly use OpenGL on Apple platforms. If you are a beginner GPU programmer though, I strongly recommend that you don't even look at OpenGL. Metal is actually the best API IMO to start out with — it's very simple to get into and it teaches all the important concepts that you will later need to learn more messy APIs such as DX12 or Vulkan.
Apple didn’t have a ton of choice here. Microsoft has zero incentive to let Apple license D3D APIs. Vulkan was available 2 years after Metal was, so too little, too late.
That's an interesting one. Apple was actually part of the Vulkan group in the beginning, but they have dropped out by the time Vulkan was released. I was quite upset at the time that they decided to abandon the open source initiative (and surprised, given how strong Apple's involvement was in earlier similar initiatives — I mean, they were the ones who designed OpenCL!). But now, looking back at things, I believe I understand their motivation, and it makes a lot of sense to me today.
First of all, Vulkan is a really complicated, messy API. Apple didn't want a complicated, messy API. Apple wanted something simple, straightforward and accessible to developers at every level, to encourage developers at every level to use their platform.
Second, Apple hardware is unique and comes with features that nobody else has. With Vulkan, more iconic Apple features would be available via platform-specific extensions, and to take advantage of those features one would need to write a separate rendering path anyway. Basically, to get most out their GPUs Apple would need to create an Apple-specific dialect of Vulkan anyway. Choosing to build a platform-specific API (a much simpler one as well) instead was a reasonable choice, I think.
And finally, Vulkan (just like DX12) still has to cater to the least common denominator. It has to support all kind of hardware. And it is subject to political pressure from different sides, forcing it to adopt features that everyone knows don't work well (*ahem* geometry shaders). Apple has more freedom here — they only need to support a fraction of hardware — and they have ultimate freedom when it comes to their own hardware. They have chosen to innovate instead and I have to say, Metal in it's current installment is a really good, ergonomic 3D API. It does lack some stuff, but it also has a lot of selling points. It's shading language is much more modern than GLSL or HLSL, Metal has arguably the best resource binding model of all 3D APIs, ray tracing as part of standard API, function pointers... but most of all, ease of use.
So instead Vulkan at least on Mac is driving Metal for you with a bit of overhead to do so (MoltenVK). I’m not sure if Vulkan on Windows has more direct access.
Vulkan is a first-class citizen on Windows and Linux, with excellent performance. MoltenVK overhead is close to zero anyway, so using Vulkan on macOS is fairly straightforward.