More Snow Leopard thoughts
I seem to have fixed my earlier WiFi issues by deleting the (unused and
disabled) university VPN profile.
Many people have written that there are virtually no new front-facing features
in SL. The only ones that affect me are:
- Under 10 seconds from cold boot to ready-to-use. That's really, really
- You can show the date in the menu bar next to the clock now.
But the new APIs are really interesting. Read the Ars Technica
review for a
really long exposition. Read the Apple developer notes
for a faster, more
- Block objects in C (i.e., closures).
- Grand Central Dispatch: POSIX-level threading API that cooperates across
processes to balance work units across an optimal number of threads. The API is
dead simple, using the aforementioned C block objects.
- OpenCL: numeric for GPU, without fucking about with textures, render targets
and full-screen quads.
- Explicit cache control: mark pages as volatile, and the OS will flush them
without paging them out if it needs to.
- Opt-in application termination: shutdown doesn't wait for processes to exit
if they've marked themselves as "safe for immediate termination".
- File ID-based URLs replacing POSIX paths; unifies URLs and paths, and means
applications can find files after they've been moved (if they're on the same
volume). Presumably also does away with having to worry about relative vs
absolute paths (if you don't care about changing volumes).
- QuickTime X: simpler APIs for things like playing back movies/audio that
don't require you to read documentation that dates from the 80's.
For the last few years we've been developing in an environment in which the
three platforms (Windows, OS X and Linux) are approximately equivalent in
features and APIs. OS X and Linux to the point where you can often cross-compile
the same source code with minor changes [I recently recompiled a Linux networking
library for iPhone changing only a single #include directive]. The Win32
equivalent functions for POSIX are well-known and easy to find. Writing
cross-platform software is a matter of factoring out the common code, and either
rewriting the user interface for each platform, or using something like Qt to
smooth over virtually all of the differences. Using a cross-platform language
like Java or Python makes it even more of a no-brainer.
But it looks to me like the platforms are diverging again. OS X is gaining
features that are genuinely useful (not just eye-candy or domain-specific) that
have no equivalents in Windows or Linux. Microsoft have had big plans for
Windows, too. None of these plans (besides Vista's transactional filesystem)
seem to have made it into Vista or 7, but it's reasonable to expect that some of
them will eventually make it into a product. At the very least, it's clear that
Microsoft's focus is on supporting .NET/CLR rather than the C API now and in the
Someone writing a Photoshop-like application for OS X would definitely want to
use a whole lot of OS X specific features: CoreImage, CoreAnimation, OpenCL, the
cache APIs, Grand Central, and so on. These features are not just
"nice-to-have" additions, they change the way you'd develop the
application. Similarly, the same application written for Windows nowadays would
probably want to start with .NET, at the very least to get the most up-to-date
The amount of code that could be shared between the two implementations gets
smaller the more you improve it for any particular platform. Cocoa/Objective-C
code and .NET/C# code don't look very much alike at all, especially when you
really start taking advantage of them. That leaves choosing an in-between
language (C++) and doing without a bunch of features, or a cross-platform
language (Java/Python) and also doing without a bunch of features (and looking
like poo, to boot).
I'd guess this is exactly where both Apple and Microsoft want us going, because
it again allows each platform to have its own speciality apps and points of
difference, where for a while they were more or less interchangeable.
While the split between OS X and Windows increases, the difference between the
desktop and mobile editions is vanishing. OS X and iPhone APIs were always
similar, and now features from iPhone are being back-ported to OS X (CoreLocation
and QuickTime X). Rumour has it that the next Zune API will be XNA. That leaves
two fairly serious platforms to choose between: Windows/WindowsMobile/Zune/Xbox
and OS X/iPhone. Game developers also target PSP (conceptually similar to
iPhone), PS3 and DS (like nothing else, from what I understand).
I don't think the cross-platform languages (Python, Java, etc) and libraries
(Qt, etc) will be relevant for much longer. When the Windows/Mac split increases
which is starting to look like a real platform since the announcement of Google
Chrome OS, and has the benefit of actually being cross platform by design.