Roughly Drafted has a pretty good article on the history of Mac OSX at

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.

Desktop virtualization on Desktop Virtualization

Everything will be virtualized!

I am just writing down some random thoughts as we developed Phantom CD.


What else can be virtualized? VMWare and Virtual PC emulate the whole PC. There are many emulators for other hardware, especially older game systems. They take the whole system approach.


Virtual CD and DVD drivers, like Phantom CD and Alcohol, virtualize a hardware component – a CD and DVD drive in this case.


Actually, the oldest component virtualization is probably RAM disks. A lot of younger people may not even know what it is. It uses RAM to emulate a hard drive for fast speed, and it is commonly used 10 years ago. Today, with faster hard drive and better caching in the OS, nobody would bother using it.


However, with 64-bit OS and cheap RAM, will RAM disk come back? How about a 64-bit Vista PC with 16GB of RAM, and use 8GB for a RAM disk? It could be a dream developer’s workstation. The C++ compiler is I/O bound due to its extension file access with all the .h files.


Should we make it our next product?

Story of Phantom CD

May 19, 2008

If you are a Microsoft developer, you know how important MSDN is.


We have a wallet of few dozens of DVD’s, nicely organized by the categories, colors, and numbers. Occasionally, I even use it. However, that’s nowhere close to the full collection. The real treasure is online, in the subscriber download areas. It has all the stuff you ever want for development – OS, SDK, applications and beta.


And 99% of them are in ISO format. It is easy enough to burn a CD or DVD for installation – until one day, you run out of blank discs, and you have no idea which of those unlabeled CD-RW can be erased.


How lazy can we be? I have a pile of used discs. I am sure I have some Office and some Visual Studio installation discs there, but I don’t know which. I wait for the pile to grow, and eventually throw them away.


Without question, Alcohol is the number one in virtual CD. Unfortunately, it didn’t install on my system. There must be some kind of conflict because I had a lot of junks installed. Yes, there is a “Virtual CD Control Panel” for XP, but that’s unsupported software from Microsoft. I wasn’t comfortable with that.


So, Phantom CD started as a small project, for fun, and for our own convenience. Mount the ISO as a CD or DVD disc. You get faster speed, and don’t have a pile of wasted discs.