From Win32 to Cocoa: a Windows User’s Conversion to Mac OS X

Ars’ Peter Bright wrote an article today entitled “From Win32 to Cocoa: a Windows user’s conversion to Mac OS X“, in which he explains why he believes “Windows is dying, Windows applications suck, and Microsoft is too blinkered to fix any of it”. These are rather harsh words, but there is a definitive element of truth in it. The article is part one in a three-part series.In the article, Bright first explains how Microsoft developers were in a happy place in the latter half of the 1990’s, whereas Apple was in big trouble due to the fact that its operating system was an old piece of junk (personally, I happen to like Mac OS 9, apart from its slowness). On Microsoft, Bright writes:

I felt well-treated by Microsoft. MSDN Library was an invaluable developer resource; Microsoft was open about what it were doing, giving out betas of Windows XP (or Whistler, as it then was) to all and sundry, and it felt like they knew what they were doing. The company had a roadmap of Whistler and Blackcomb; it had a plan.

This was attractive to someone who programmed for a living. Developers felt valued, like the company cared about them. I enjoy programming, and I enjoy writing software. I did then; I do now. So for me, this is really a key piece of what a platform has to offer.

The Apple world wasn’t as rosy as the Microsoft world back then. Apple’s operating system lacked a lot of modern technologies like protected memory and preemptive multitasking. Apple started the Copland project to bolt these (and other) technologies onto what is now known as Classic, but they failed miserably. Promised developer releases were never released, it suffered from feature creep, and was ultimately cancelled. Consequently, Apple went shopping for another operating system to base the next generation Apple OS on, and after a brief flirt with Be, Inc., they purchased Steve Jobs’ NeXT Software and its operating system, NeXTstep. The rest is history. As Bright writes:

This approach – forced on it due to screwing up the Copland project – put Apple in a strong position. The new OS was free of many of the legacy constraints that the Copland approach would have caused; the clumsy old APIs were restricted to the Classic environment, and they didn’t form a part of the modern OS core. Although the new APIs were not entirely new – the Obj-C Cocoa API was based on the NeXTstep API, and Carbon was similar to the old MacOS API – they were cleaned up, allowing bad decisions of the past to be fixed.

It took a while before Mac OS X, released in 2001, became usable, but Apple continued to update the operating system, adding new frameworks and APIs, which enabled developers to easily make applications that not only looked great, but worked great too. Microsoft, in the meantime, had released Windows XP, and more or less left it unchanged for years until Windows Vista came along last year.

Bright continues to explain that these high quality frameworks and APIs in Mac OS X resulted in Mac applications that looked and worked great. This was not only a result of the APIs, Bright argues, but also because of the attitude of the developers using them; Mac developers seem more devoted, more willing to make an effort with their applications. Compare this to the bulk of Windows applications, which are “shoddy”, as if Windows developers “just don’t care”. Bright attributes this to the fact that many Windows programmers work for the enterprise. Summing up, he states:

So Mac OS X was going from strength to strength, and its third-party software ecosystem was flourishing. Developers for Mac OS X were conscientious and passionate about what they were doing, and it showed. Back at Redmond? Inactivity. Oh, they were busy working on Vista, churning out lots of code that didn’t work, scrapping it, and starting over. Talking up major (if dubious) new features and then killing them off. And you know, Vista’s okay. It’s not bad. There are bits of it I really like.

But it doesn’t inspire me. Writing software for Windows is a pain. Much of the platform is clunky and badly put together, and it makes development much less enjoyable than it should be.

And that is the main argument Bright puts forth in his article. The Win32 API still suffers from design decisions made over 20 years ago, and it’s huge, and, according to Bright at least, quite inconsistent. “It’s inconsistent in every way imaginable.”

Back in July 2007, I wrote something similar in an article in which I detailed how I think Microsoft should go about the development of Windows Vista’s successor, Windows 7. One of my main points was that the NT kernel doesn’t really need to be scrapped; it is the userland and APIs that need to be rebuilt from the ground-up, with backwards compatibility moved into a virtual machine, just like Apple did in Mac OS X with the Classic environment for old System 8/9 applications. Today’s processors are fast enough for such a VM.

In addition, my article advised Microsoft to release betas and RCs often, free for the public to test and play with. After the release of this imaginary Windows 7, Microsoft should mimic Apple’s behaviour after the release of Mac OS X 10.0: update the operating system as often as possible, preferably free of charge. Provide excellent documentation on the new APIs, allow easy access to bug-tracking systems, and create a good atmosphere for developers and users to interact with one another.

It is still too early to tell whether Microsoft will take such a bold step, but it seems as if I am not the only one advocating it. Which is a comfort.


  1. 2008-04-21 7:41 pm
    • 2008-04-21 8:50 pm
      • 2008-04-22 12:50 pm
    • 2008-04-21 10:34 pm
      • 2008-04-22 12:02 pm
        • 2008-04-22 6:23 pm
          • 2008-04-22 11:47 pm
    • 2008-04-21 11:01 pm
      • 2008-04-22 6:22 am
      • 2008-04-22 10:18 am
    • 2008-04-22 2:44 am
    • 2008-04-23 8:08 pm
  2. 2008-04-21 8:53 pm
    • 2008-04-21 11:11 pm
  3. 2008-04-21 9:36 pm
    • 2008-04-22 4:03 am
  4. 2008-04-21 10:05 pm
    • 2008-04-22 6:02 am
      • 2008-04-22 9:03 am
        • 2008-04-22 6:41 pm
      • 2008-04-22 12:07 pm
        • 2008-04-22 1:23 pm
    • 2008-04-22 6:23 am
      • 2008-04-22 6:52 am
        • 2008-04-22 7:35 am
          • 2008-04-22 1:58 pm
    • 2008-04-22 7:18 pm
  5. 2008-04-21 10:25 pm
    • 2008-04-21 11:18 pm
      • 2008-04-22 3:01 am
      • 2008-04-22 9:58 am
        • 2008-04-22 4:49 pm
        • 2008-04-22 11:36 pm
      • 2008-04-22 11:06 am
    • 2008-04-22 12:24 am
  6. 2008-04-21 10:34 pm
  7. 2008-04-22 6:20 am
    • 2008-04-22 7:33 am
    • 2008-04-22 9:51 pm
  8. 2008-04-22 9:23 am
  9. 2008-04-22 10:46 am
  10. 2008-04-22 12:26 pm
    • 2008-04-22 2:37 pm
  11. 2008-04-22 3:49 pm
  12. 2008-04-22 8:01 pm
    • 2008-04-22 8:09 pm
  13. 2008-04-22 9:24 pm
  14. 2008-04-23 5:53 pm