Be forewarned this blog is written like a rant, you may not like it.
ATL CComPtr and WRL ComPtr
To help C++ COM developers to manage the raw COM pointers, Microsoft created a COM smart pointer class (CComPtr) in Active Template Library(ATL). To help in the confusion, Microsoft created ComPtr(CComPtr without the C prefix) in the Windows Runtime Library(WRL) and remove some helper functions such as CoCreateInstance(), meaning developer cannot just drop WRL ComPtr into an existing project that is using the ATL CComPtr. CComQIPtr for querying derived interface is solely missed in WRL.
GDI, GDI+, Direct2D and Win2D
In the late nineties, GDI+ is created to replace the aging GDI which can only support loading Bitmap files. But GDI+ is later abandoned without postscript font and multithreading support (GDI+ only uses a single thread, no matter how many threads you throw at it). GDI+ was in turn replaced in 2009 by 3 different libraries, Direct2D, DirectWrite and Windows Imaging Component(WIC) to do graphics, text rendering, and image loading/saving. Win2D is a 2D accelerated graphics API based on Direct2D for the Univeral Windows Platform(UWP). In an attempt to port a GDI+ graphics routine to Win2D, I discovered to my dismay, Win2D is lacking affine transformation which is already implemented in Direct2D.
DirectShow and Media Foundation
DirectShow, a multimedia pipeline framework, is supposed to be replaced by Media Foundation. The precedessor is push paradigm and the successor is pull paradigm. However, functionality like DirectShow Editing Service(DES) is not implemented in the new technology. Also gone with the ability to enumerate filters on a system. Later, Microsoft changed its tune that these 2 technologies are to coexist together.
WinForm and WPF
Windows Form(WinForm) is the old technology based on Win32 abstraction while Windows Presentation Foundation(WPF) is a newly designed presentation framework based on XAML(XML based markup language) which can easily rearrange the controls during resizing and do wonderful animations. WPF was shortly abandoned and development stopped without an explanation. WinForm is still very much in use due to high learning curve required of WPF.
C++, C++/CX and C++/WinRT
C++/CX is invented to simplify the C++ Windows Runtime handling but without async feature found in C# which is also used to code UWP app. Creating a worker thread with PPL doesn’t work: Sometimes, the app crashed, complaining the object created from the caller function passed into the thread has already gone out of scope and destroyed before the thread even starts. C++/WinRT is put forward as a better C++ framework for WinRT. But almost all the code examples on the web are in C# and C++/CX. Almost wanting to be a C++/WinRT early adopter, an auto-generated project fails to compile in Visual C++, shook my confidence at the readiness of C++/WinRT for primetime.
.NET Framework, Mono and Core
Somewhere in 2013, Microsoft decided to make .NET cross-platform and accessible on other platforms, such as Linux and macOS because a large portion of developers develop on those platforms and it is pushing its cloud initiative to those developers. Instead of basing the code on .NET Mono or .NET framework, Microsoft has to go with a new framework but this new framework that is known as Core, would not have Winform, WPF and ASP.NET WebForm which are difficult to reimplement. But this logic does not stick since .NET Mono already has cross-platform WinForm and ASP.NET WebForm technologies which Microsoft can use since it owns .NET Mono. Mind-boggling is how they decided to call the new platform ‘Core’ which is used to describe fault segmentation on Unix-based/Linux OSes.
WPF and UWP
The reason for the existence of Universal Windows Platform(UWP) is for Windows Lite edition for tablets without all the Win32, COM, and backward-compatibility baggage. But one may ask since the full edition of OS has to support all the legacy technologies and UWP as well, does it make desktop Windows more bloated now? UWP is also based on XAML like WPF but with some differences. Wouldn’t common sense dictate MS faster to market if they just stick to WPF for its Windows Store apps?
MSI and MSIX
MSIX is replacing Appx (which is introduced not long ago) as an installer technology for mobile and UWP apps. But no good tools from Microsoft exists to work with MSIX. For MSI, it is no brainer: developers can rely on WiX toolset. How about MSIX? Does it even make sense to introduce technology but no tools to work with it?
One may ask what’s with Microsoft with all these half-baked, incomplete framework/platforms which are written/invented from scratch? My suspicion is internal promotion hinges on the invention of new technologies. That explains why it drives MS employee to reinvent technologies. Developers are suffering fatigue from keeping abreast of the latest technologies which MS throws out at them. Will things get better? It depends whoever, at the top, is aware of this situation to put a stop to this reinvention frenzy.