Microsoft keeps striving to make their interface look more and more similar to its rival Mac OS X.

Leopard OS X Theme for Windows 7
But regardless of how similar the UI becomes, it can never offer what Mac OS X can in one respect: real UNIX underneath.
Even if you clone all the UNIX command-line tools (which is something I was doing way back in the 1980’s), you still don’t have OS-level compatibility. For instance, here’s some UNIX bliss:
if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) == -1) { perror("sockfd"); exit(1); } if((setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST, &broadcast,sizeof broadcast)) == -1) { perror("setsockopt - SO_SOCKET "); exit(1); } sendaddr.sin_family = AF_INET; sendaddr.sin_port = htons(port); sendaddr.sin_addr.s_addr = htonl(INADDR_ANY); memset(sendaddr.sin_zero,'\0',sizeof sendaddr.sin_zero); if(bind(sockfd, (struct sockaddr*) &sendaddr, sizeof sendaddr) == -1) { perror("bind"); exit(1); } recvaddr.sin_family = AF_INET; recvaddr.sin_port = htons(port); recvaddr.sin_addr.s_addr = inet_addr(DEST_ADDR); memset(recvaddr.sin_zero,'\0',sizeof recvaddr.sin_zero);
Isn’t it pretty?
Due to compatibility libraries, the above code actually does work on Windows. But the ugliness creeps in with stuff like the following:
#ifdef WINSOCK send(svr_sock, Osvr, strlen((char *)Osvr), 0); #else write(svr_sock, Osvr, strlen((char *)Osvr)); #endif #ifdef WINSOCK closesocket(svr_sock); #else close(svr_sock); #endif
Yep, the fact that it’s not really UNIX underneath creeps in. Microsoft can only fix that by doing what Apple did in 2001, starting over with a UNIX-derived core. This was painful in many ways, but in the end, look at the turnaround of Apple prior to 2001 and since, where Apple’s brand awareness today has never been higher and market penetration is up ten-fold.
Microsoft is never going to do this. Of course they don’t have to. They still hold a huge market share – Steve Ballmer calls Mac’s growth a “rounding error” – but when people ask me why I use a Mac, it’s not really because it’s more reliable, has fewer viruses, or has a better GUI. You can crash a Mac too, if you want to and I really don’t care about those GUI arguments. The GUI is exactly “fine” – for my tastes, the overall design seems so much more polished, clean, and nicely integrated than Windows (or Linux GUIs for that matter too) – but for me, it’s “good enough” and that’s all that matters (the most important must-have for me is virtual desktops, which Windows still doesn’t have native yet). The GUI is just one part of the experience of the machine. I use a Mac because of the whole picture. It gives me:
- The apps I need, store-bought like PhotoShop and tons of freeware apps
- Compatibility apps like Word, Excel, and Powerpoint so I can easily work with the rest of the world without hassles or even telling them I’m on a Mac
- Terrific development tools (oh yeah, and the development tools are free with the OS btw, not $300 extra)
- and… usable UNIX underneath. You can argue whether it’s “real UNIX” or not, but it’s UNIX-enough such that most anything will work, including (again, free) seamless support for X11 apps.
On a more minor note, Apple includes a lot more apps – yeah one can (usually) go find equivalent apps for Windows, download and install them – but it’s nice that Apple includes so many common apps with the machine, both GUI apps like iMovie and hundreds of UNIX command-line tools.