What Does that .NET Namespace Mean: System.* and Microsoft.*
I need your feedback... I am chatting with some co-workers about the perception of in the .NET Community of what the System.* and Microsoft.* namespaces mean. So I had the crazy idea of just asking you!
For this exercise, I'd like you to think about a new "feature area" of the .NET Framework... Would you instinctively draw any conclusions about that area based on if the namespace where System.* or Microsoft.*? If that feature area were in the Silverlight subset of .NET, would that change your mind at all?
There are basically three schools of thought among my co-workers -- which one is closer to your perception?
1) They are the same or it really doesn't matter. The root namespace between System.* and Microsoft.* have no meaning... Microsoft appears to be arbitrary about when functionality goes in one or the other.
2) Part of the Framework vs. Addons.
System.* indicates stuff that is logically part of the framework. It is 100% supported, solid-long term design that will not need to churn, safe to bet on, stable, likely will get great tooling support. Designed to be very interoperable and could work anywhere .NET is. This may ship as part of the redist or maybe an out of band (such as ASP.NET MVC, ASP.NET AJAX, etc).
Microsoft.* is the bleeding edge stuff or value-add. It is typically very cool stuff that adds on to the framework and enhances it, but maybe a work in progress... over time you might expect some of those concepts to go into the framework. As an example, the great work patterns and practices does often falls into this bucket.
3.) Part of the core redist vs. addons
System.* means it ships in the core redist. You are not able to ship it with your application. System.* stuff only ships when the redist revs. You would not expect Microsoft to do any out-of-band releases in the System.* namespace for example.
Microsoft.* means it is not part of the core redist. A note: as we move stuff into the core redist you'd expect us to change the namespace from Microsoft.* to System.* meaning you'd have to tweak any calling code *if* you wanted to take advantage of the new version.
So, what do you think? Which one best fits your thoughts this? I'd love any other comments...