Back to the OP - if I was starting a project right now that had to run everywhere, I would make a renderer with two bavk-ends initially: D3D11 using feature level 9_x, and a port of that back-end to the actual D3D9c API (avoiding all the fixed function parts, and sticking to shader model 2).
Why? Because D3D9 runs on Windows from XP onwards, and Linux via Wine. D3D9 can also be zero-effort ported to GL2 by using toGL, which gets you mac and native linux (that's how Valve ported their Source games). D3D11_FL_9 will run really efficiently and be really stable on modern versions of Windows, plus makes for a great developer environment with good tool support. And lastly, shader model 2 shader code will run on every GPU you care about.
The only missing piece ie you'll later have to write your own gl|ES port.MS releases new D3D versions on roughly the same schedule as new GL versions appear. D3D9~=GL2, D3D10~=GL3, D3D11~=GL4, D3D12~=Vulkan.
Microsoft constantly obsoletes its own APIs as well, so really it is a poor decision for anyone who is not part of a big company to bother with using it.
You will be able to use vulkan on windows systems, so really there will be no point to DirectX any more
All those old APIs still work fine, despite being obsolete/deprecated.
You can already use GL on Windows systems (Vulkan is basically just GL5), so there should already be no point to DirectX any more... Right?
Good idea. However, if I use toGL to change my D3D9 codes into OpenGL, will there be a big drop in performance?