DIGG IT!
Published
Monday, March 03, 2008
at
10:46 AM
.
We need a solid definition of "cross-platform" as I see this term being abused with many of the new rich web/desktop runtimes. I think "cross-platform" is defined by having 4 distinct characteristics:
Across operating systems and web browsers:
- Identical APIs (classes, methods, properties, types, and return values)
- Identical API behavior
- Similar performance
- Similar installation experienceHaving identical APIs is an essential ingredient to any "cross-platform" technology. Even the most minor differences in the APIs within a runtime will force a developer to program towards a specific operating system or web browser. Developers want to make something once and know it will work everywhere without issue. Supporting identical APIs across operating systems and web browsers simplifies development, testing, deployment, and support. ( It also has an amazing side effect of lowering ongoing development and support costs! )

Certain technologies are championing the "cross-platform" name but are providing expanded APIs for specific operating systems and web browsers. These technologies are really only "cross-platform" in the APIs that are available everywhere and are poisonous in their intent. These sound very good but in practice all it takes is one API call to lock an application to a specific OS or web browser. This is "embrace and extend" in a nutshell and will result in many application that only work under the right conditions.

Similar performance is also a key area. It is great that things work on different operating systems but performance needs to be similar. It is a poor user experience for an application to run 50% faster on a specific platform than another. I know for a fact that lots of engineering work goes into making sure Flash Player performs similarly across different operating systems and browsers. Actually we implemented incremental garbage collection in Flash Player because browsers differ wildly in how and when they allocate memory to a plug-in. On some browsers memory is handed out like
candy while on others it is given in 256Kb chunks up to a ceiling of 10MB total. Regardless of the browser in use Flash Player tries to make sure all application behave the same both in start-up time and during use.

Please be careful with "cross-platform" and its use. It is one thing to run on several operating systems or browsers but quite another to work identically. We need to be able to develop once and run identically everywhere, not develop many for each target OS/browser.
Cheers,
Ted :)
That's a good introduction about cross-platform. Perhaps it really comes down to a decision about whether you want your language to be cross-platform (as in "Flex creates apps that work in Firefox and IE"), or if you want your development staff to be cross-platform (as in "Joe can create AJAX apps that work in Firefox and IE"). Business managers sometimes underestimate the importance of that decision.
Great post Ted!
We had this conversation many times throughout the AIR beta.. "Why doesn't AIR support launching applications?"... Because Adobe is committed to AIR apps running exactly the same on every platform. If they can't guarantee that it'll work exactly the same on Win/Mac/Lin, they don't implement it.
Yeah, it sucks that AIR can't do some things that are basic to an application (like launching other executables), but I'd rather say that my app is completely cross-platform, rather than saying "It's cross platform, except that this thing doesn't work on OSX, and that part only works with Ubuntu, but not SUSE linux."
Kudos to Adobe for embracing open source and the ethos behind it, rather than just paying lip-service.
Hi Ted,
in general I agree with you how you define "cross-platform". But you should also mention that even AIR 1.0 is not cross-platform compatible like you define it. I am not an AIR guru - at least not now :) - but while reading the "AIR Conditioning" slides of Lee Brimelow (I guess they are from the FITC?) I noticed that adding a native menu on Windows platform differs somehow from OS X.
Showing the pictures of different plugs is a very good example on that topic, because there are solutions for that problem already you can directly adopt to application development: adapters.
Actually I received such a set with my Sony Ericsson mobile phone, basically it is a basis plug with a transformer inside and you can clip on differnt "front end" adapters t it that fit in the different national plug standards.
So why do I have to make the distinction to attach a NativeMenu object to the NativeWindow object on Windows and on the other hand to the NativeApplication on Mac OS X? If we really need that, my first attempt would be to write a class, that handles menu management solely, but that is extra work again...
....yeah... but I hope you're not saying that engineering also intentionally slows down the windows version of the Flash player in order to make it similar to the mac version (or vice versa) --right? Having a few platform specific APIs will not dirty an otherwise beautiful technology (Flash/Air can check the platform--that's a good thing).
But, sure, if the idea of cross platform is just a few extra calls added as lip service, then yeah, that's lame. However, this idea that you've got some moral principle to stand behind and--without exception--you're stickin' to it seems misguided. I think there's value in providing what people want. I'm not saying Adobe doesn't do this--in fact, usually the opposite. But there are features and products that can be made for one platform and our civilization will not fall.
dusty... with all due respect, telling my prospect that "I'd rather say my app is completely cross-platform" ignores the fact that maybe the client needs some functionality.
Ted... exactly what technology do I need to be careful about? And, what would happen if I used it? Seriously... I'm trying to see the terrible outcome of using the technology that you reference (and I'd like to know which it is).