I think it'll be quite a few years before we see Objective-C 2.0 adopted throughout all of Apple's software. I mean, look at .NET and how prevalent it is in Microsoft's offerings. A decade after it's been introduced, the majority of their software is still Win32.

I hope Apple will spend considerably more effort in pushing Objective-C 2.0 adoption.

Well The issue with .Net is it is vm based, I have been using VM based languages for a long time now, and I would not see any reason to move vital parts of an os infrastructure towards a VM especially if it works well. (except for portability reasons) you will get a huge speed hit and memory consumption goes through the roof. It might be interesting for new applications but moving legacy code over is sort of a no go.
Same goes for apple although introducing GC only has minor impacts on mem consumption and speed, there is simply no reason to do it! Newer code can be programmed against it older code probably which never will be touched again except for bugfixing once in a while does not make sense to be ported over!

The problem in the case of .net isn't performance, it is several thousand man years worth of legacy code. Anything new is done in .net.

Anything in the GAC (global assembly cache) only gets loaded once, which includes the core libraries. Also, there is only ever one runtime running (as opposed to java/ruby/python/etc), and individual programs are segregated into "AppDomains" under that single runtime.

Also, there is only ever one runtime running (as opposed to java/ruby/python/etc), and individual programs are segregated into "AppDomains" under that single runtime.

Except when it isn't.

Application domains can be used to host multiple applications inside a single OS process. However, the app domains are implemented as multiple copies of the .NET VM running inside a single process. Even if you have a single process with 10 application domains, you still have multiple VMs, which are deliberately kept isolated from one another. Big deal - pretty much any VM runtime can do that.

That's how the .NET VM is hosted inside SQL Server, how it's used in IIS for ASP.NET websites, and how it's hosted as a COM object inside other applications.

However, that's not how most .NET applications run. If you run a .NET application, a new process will be created, creating a new instance of the .NET VM along with it.

What it can do is pre-compile the assemblies in the GAC to native code. That way, the native code can be shared by any application using it - the runtime just mmaps the code to memory, and the OS just maps the same block of memory into each VM's address space.

That's something that other VMs don't do yet, although I believe Sun were working on some sort of JIT cache for Java that'd perform the same role.