I've been an admirer of Juval Lowy's teaching and guidance in .NET development for a number of years. He's also written one of my favorite books: Programming .NET Components.
However on a recent DotNet Rocks podcast (Jan 2010) in discussing WCF/COM and .NET, he made some comments that greatly surprised me:
Juval Löwy: ..... in .NET, lo and behold, every class here is a COM object. We know that. In fact, it's much more than COM because we've got the git compiling, we've got garbage collection, we've got the Security Stack....
Carl Franklin: Well, you should clarify that though. I mean, every object is not a COM object. Every object has the capabilities that a COM object does, but the .NET Framework isn't a COM library.
Juval Löwy: No, no. First of all .NET is actually built on top of COM. It's all COM underneath.
Then, after Carl Franklin asks for clarification on this comment:
Carl Franklin: Yeah, I get that. My question was is .NET built on COM?
Juval Löwy: Of course, it all COM underneath.
Carl Franklin: No. I know it's intertwined and it's required, but when you new up a .NET object you're not creating a COM object.
Juval Löwy: You're creating a .NET object, but all I'm saying is that .NET is built underneath. It's all C++ and COM.
Carl Franklin: It is C++ but you're not registering a COM object through the COM interface. It isn't all that stuff unless you specifically do that.
Juval Löwy: But some of the stuff is using COM underneath, but that's beside the point. Forget about how it's made.
How do you read these comments?
While I understand (and have confirmed) that some of the System assemblies are written in unmanaged C++, is it also valid to say that they are "all COM underneath"?
I was under the assumption it is perfectly possible to write .NET CLI compliant C++ assemblies that have absolutely nothing to do with COM / ATL / ActiveX?
Here is the PDF transcript for the podcast in question. See Page 7.