In the past few years, we had:
- .NET Full
- .NET Micro
- .NET Client Profile
- .NET Silverlight
- .NET Portable Class Library
- .NET WinRT
- Core CLR
- Core CLR (Cloud Optimized)*
- MessingWithYa CLR
* Can’t care enough to figure out if this is the same as the previous one or not.
In each of those cases, they offered similar, but not identical API and options. That is completely ignoring the versioning side of things ,where we have .NET 2.0 (1.0 finally died a while ago), .NET 3.5, .NET 4.0 and .NET 4.5. I don’t think that something can be done about versioning, but the packaging issue is painful.
Here is a small example why:
In each case, we need to subtly tweak the system to accommodate the new packaging option. This is pure additional cost to the system, with zero net benefit. Each time that we have to do that, we add a whole new dimension to the testing and support matrix, leaving aside the fact that the complexity of the solution is increasing.
I wouldn’t mind it so much, if it weren’t for the fact that a lot of those are effectively drive-bys, it feels. Silverlight took a lot of effort, and it is dead. WinRT took a lot of effort, and it is effectively dead.
This adds a real cost in time and effort, and it is hurting the platform as a whole.
Now users are running into issues with the Core CLR not supporting stuff that we use. So we need to rip out MEF from some of our code, and implement it ourselves just to get things in the same place as before.