The Balkanization of the Application Development Landscape
I can still remember how I felt the first time I deployed a a Java application from the WinNT desktop where I had developed it to a pair of Solaris servers. It was either late 1998 or early 1999. Up to this point most of my experience in cross platform development had consisted of the surprisingly difficult and painful task of tweaking the code and header files of open source programs to compile on ever so slightly different flavors of Unix. Forget about crossing the Unix/Windows divide -- that way lay madness.
This was one of the first servlet-based application outside of Sun, and so it was still unproven technology, but when that webapp was ftp'd and installed and ran against that Sybase back end just like it had on NT, it struck me as deeply weird, unnatural and...wonderful. Would I, finally, as a developer, be able to write once and run anywhere?
Well, the answer was a resounding "sort of." Java never really took off as a desktop platform, but it inspired other cross platform runtime environments, like Flash and Ruby. The Balkanization of software development platforms seemed, if not at an end, then at least in remission.
With the advent of powerful and widely available mobile platforms, it seems that we've experienced a relapse. Apple recently revised section 3.3.1 of it's SDK agreement to read:
Many blog posts have already been written. Perhaps the best responses can be found here, here and here. My thoughts? Lawyers get overzealous and put all sorts of unenforceable things into contracts on the off chance that it might stick. This one strikes me as unenforceable.
Beyond the above bit of silliness, there's speculation afoot that the iPhone will singlehandedly kill of Flash. Why develop for Flash if the use can't see it on an iPad, the reasoning goes. And if all we were talking about were the demise of inappropriately flashy corporate web brochures, annoying web adverts and a few video players, not one would care. But as with most cross platform runtimes, there's more here than meets the eye.
Flash/Flex is, for example, an excellent data visualization platform. Drawing fancy graphics efficiently even in a native environment is no mean trick. Animating vector graphics with millions of points demands prodigious effort on the part of developers. Having to do it twice or three times for different operating systems means it will likely only get done for one.
If Flash ceases to be a viable platform, it will kill off some really useful software, or at least make it less available. Let's hope that doesn't happen. Otherwise "porting," that least useful of development tasks, will become a ubiquitous verb again.