Cocoa for Windows Will Not HappenSo after trading a couple of emails with John Gruber on the topic, I think we can safely say that the consensus is that Apple is not going to release Cocoa for Windows. In fact, I personally think the rumor about Windows API support in Leopard is more likely. Although the Windows rumor is still outlandish, there's at least a reason to do it.
Cocoa is Not OpenStep
Back before Cocoa even existed, NeXT had this thing called OpenStep. Although it started out as a part of the NeXT operating system, it eventually propagated to Windows and Solaris. Java's design, in fact, was influenced by Sun's experience with OpenStep.
Apple bought NeXT and acquired OpenStep in the process. By the time Mac OS X shipped, Apple had a new programming environment on its hands, called Cocoa. Some people will tell you Cocoa is just a newer version of OpenStep. I don't subscribe to this. Yes, a lot of the classes are very similar on the surface, but the way things fit together are quite different in places.
The Foundation part of the Cocoa umbrella framework, for example, is intertwined with CoreFoundation (or is it Core Foundation?). CoreFoundation was developed as part of the Carbon strategy, but it sits under Cocoa as well. That is, both NSArray and CFArray are both essentially instances of NSCFArray. This is a departure from OpenStep.
Cocoa uses Quartz, whereas OpenStep depended on the Display PostScript model. Furthermore, many applications that we think of as "Cocoa apps," are really a mix of legitimate Cocoa, CoreFoundation, CoreServices, Quartz, Carbon, and so on. Cocoa for Windows really wouldn't be enough for cross-platform apps.
Windows is not Mac OS X
OpenStep came at a simpler time. The contrast in higher-level desktop services was not quite so harsh as it is today. All you have to do is drag a window around an XP desktop to see how different things are from the Mac OS X window server.
Cocoa and many of the other public frameworks have hooks in Mac OS X infrastructure that simply doesn't exist in Windows (where for art thou, Spotlight?). So Apple would either have to bundle all of this up with each app, or require users to download a runtime package. Yuck.
Taking it a step further, what should Apple do when it comes time to release a new version of Mac OS X and the supporting frameworks? Should they intentionally hold back functionality of Cocoa so to keep things doable on Windows? Or are the incompatibilities simply left to developers to sort out?
Either option is insanity. Runtime issues aside, we've seen what happens with "one size fits all" toolkits. They just never come together well on any one platform, it's just that Windows users don't seem to notice amidst all of the other distractions. In any case, Mac OS X would be dragged down to the lowest common denominator, which negates the effort of making a unique platform in the first place.
Where's the Motive?
Finally, we come to the basic question of what reason Apple would even have to release a version of Cocoa for Windows. Even assuming Apple doesn't package up all the supporting frameworks, maintaining Cocoa on Windows would be a significant effort. This is an entirely different beast than supporting Mac OS X on both Intel and PowerPC.
Then there's the obvious point that having unique apps is an important asset to Mac OS X. Regardless of how you feel as a developer, it's important to recognize that as a user of Mac OS X, your ability to use this platform is almost entirely dependent on unique software. If all apps for Mac OS X are available for Windows, many will simply use Windows.
Fortunately, Apple seems to really get this. They invest tremendous amounts of time and effort into making it ever-easier to create great apps. The implication is that this investment will be rewarded with software that is either unique to the Mac, or first/better on the Mac. If the same software could be deployed to Windows users, continuing to invest in Cocoa would be a waste of resources.
I've heard the argument that says cross-platform Cocoa will cause Windows developers to buy Macs to write their Windows software because it's so much easier and because people think Macs are cool and so on. Folks, I just don't buy it. In any case, Apple can't base a business around selling to a niche of Windows developers that want to buy a Mac to write Windows software.
So in the Cocoa for Windows file, we have significant technical challenges, a lot of time and effort, user experience issues, and the lack of any sort of business plan. I just don't see it. Cocoa and the related frameworks really are for writing Mac OS X applications.
(That first line sounds like name dropping, doesn't it? Just didn't want to take credit for everything.)
Cocoa for Windows Will Not Happen
Posted May 15, 2006 — 26 comments below
Posted May 15, 2006 — 26 comments below