It is not only the multiple OSes, also the developer stacks.
Android, Web/PWAs, Flutter, with each one presenting themselves as the solution for delivering software on Gooogle's platforms.
It is not only the multiple OSes, also the developer stacks.
Android, Web/PWAs, Flutter, with each one presenting themselves as the solution for delivering software on Gooogle's platforms.
At some point I think it would make sense to have a clean break. Personally, I'd love to see something like rust encouraged (possibly with JS frontend to ensure huge adoption). Probably never going to happen...so with that said, we'll probably end up with dart...suitable for writing macros around machine learning code.
.NET is all about VB.NET and C#. F# doesn't get to play with all the toys, namely GUI tooling, .NET Native, EF.
C++ on UWP is on transition fase from C++/CX to C++/WinRT. Which is a good thing as C++/WinRT is a C++17 framework, but maybe that could have been the original design to start with, without having an external MVP push for it (Kenny Kerr).
.NET gets access to DirectX only via third party bindings, the closest it gets with Microsoft own tooling is the Visual Layer on UWP. A victim of the usual WinDev vs DevTools, because we should all be using DirectXTK instead.
Ideally they would like everyone to be on .NET Core, but even with the upcoming .NET Core 3.0, not everything is going to be supported, so we keep targeting .NET Framework for our Windows deployments, as we use Java/C++ instead on multiplatorm projects.
Then it looks like the JS folks took over DevTools with VSCode, Skype on React Native, VS 2017 installer on Electron, UWP Hosted Apps are now PWAs.
However I could rant equally well over other ecosystems that I know well.
Developer tooling from OS vendors is just another product like everything else they do sell, so naturally they fall under the same sales/marketing/support/politics.
Cross-platform UI - HTML/JS/Electron
Backend and services - .NET Core
Low-level graphics and other high-perf / low-level stuff - C++
Within each of those there are transitions in progress, like .NET -> .NET Core or C++/CX -> C++/WinRT, but it's fairly clear which one is legacy and which one is taking over; it just takes time. The buckets themselves are also fairly well defined.
The only clear overlap is between all three stacks when it comes to UWP apps. But none of them try to position itself as the "one true stack" for that platform - they're presented as choices, depending on one's existing skills, perf requirements, and cross-platform needs or lack thereof.
Xamarin is weird, you're right. It's partly the same as above, just s/C++/C#/ - but that doesn't seem to be working so well in practice. And then there's Visual Studio for Mac (nee Xamarin Studio), which in practice competes against Visual Studio Code. I think it's just one of those acquisitions that broadly felt like a good idea, but no-one properly figured out the details of how it fits in the big picture.
(But, curiously, Xamarin and VSCode are both DevDiv.)