Roughly Drafted has a pretty good article on the history of Mac OSX at http://www.roughlydrafted.com/2008/06/07/wwdc-2008-is-mac-os-x-106-the-death-of-carbon/.

Some of the responses questioned whether there will be a Cocoa for Windows.

While Roughly Drafted’s article is a good overview of what happened with Mac OSX and its API, it missed some important information about NeXT.

Back in the days of NeXT, when Steve Jobs failed to push the hardware in the market, NeXT developed a different flavor of NeXTSTEP OS, called OpenStep. It runs on top of Windows and Sun. Essentially, it was a framework on top of the native API of each OS.

Cocoa is really based on OpenStep instead of NeXTSTEP. That’s why we have two layers – the Carbon, and Cocoa on top.

So, the question on whether Cocoa CAN be ported to Windows is a definite YES. It was done 15 years ago. It can still be done now.

However, it is very unlikely to make Cocoa to work with .NET. First, they use two totally different languages. Cocoa uses Objective C. .NET uses C#. That makes it very difficult to use one framework in another one.

When API is standard C procedure calls, vendors and developers can use any language and create a variety of tools and framworks. With System 7, we had MacApp, THINK, and PowerPlant, three major C++ frameworks. We had a couple of Basic compilers, whose name I cannot recall at this moment.  Apple also briefly tried a language called Dylan (short for Dynamic Language). Metrowerks also had a super fast Pascal compiler, which works with PowerPlant.

Today, most of those tools and frameworks are retired. There is still Qt, a cross-platform C++ framework. It is built on top of Carbon, and missing a lot of platform specific features.

As Apple pushes toward Cocoa, and Microsoft pushes toward .NET, it has been very difficult for development tools companies. The classic example on Mac is Metrowerks. The classic example on Windows is Borland(Codegear). Both of them have to change their business model and abandom the mainstream tools market. Both of them had great tools on top of the native C API of each OS, but unable to move forward when the OS become object-oriented.

I have mixed feelings about Cocoa and .NET. They are great frameworks. However, it is almost impossible to write cross-platform code with them. Yes, you can write Objective-C and make it fairly cross-platform on Mac OSX and iPhone, and you can write C# and make it fairly cross-platform on Windows and Windows Mobile. However, there is a big gap between Mac OSX and Windows.

Cocoa can be built on top of WinAPI, but cannot be built on top of .NET. That limits the potential use of Cocoa on Windows.

And why would Apple do that anyway? No cross-platform tool ever succeeded in large scale. Even Apple’s own effort failed – in 1995 (around that time), Apple partnered with Symantec (the owner of THINK C at that time) to develop a cross-platform framework called Bedrock.

So, I doubt we will see Cocoa for other platforms except in Apple’s labs.