Thursday, July 16, 2009

Why is Cross Platform So Hard?

This is a followup to yesterday's blog posting about my trying to choose how to do a cross platform programming environment (or language).

After researching various ways to try creating a cross-platform application I started asking myself, "Why is it so damn hard to do this?"

I think I already knew the answers to this. I just needed to sit and reflect on it a bit.

First, look at the premier language (and frameworks) that already achieve this goal of cross-platform compilation of native applications (there's a tongue twister for you). REALbasic is probably the best choice for "easy" cross platform application development. Here are issues that end up being tradeoffs you make for cross-platform compatibility:

Applications are tied to the lowest common denominator of features across the Mac, Linux, and Windows. If you want a cool Certain interface option or choices (I seem to recall some griping on the support list about not having multi-state check boxes, but I haven't verified it...this would be an example though) are available on one platform but not others. That means that REAL chooses (correctly, in my opinion) not to support it.

There's a certain discomfort many people feel towards tying their business success on the success of a small business. If REAL folds, you need to migrate to a new platform for your product and probably have to rewrite your primary products if you have been gambling a significant percent of your business by basing it on their proprietary product; seeing as REALsoftware is a private company, they have no obligation to tell their customers anything about their financials.

Certain operating system capabilities are only supported if you start digging into special calls particular to the Application Programming Interface; for a newbie, this is a big hurtle. REALbasic does this through the use of special declares or you can pay extra to companies like MonkeyBread Software for a set of plugins that give additional functionality, but using these calls means using pragma declarations to conditionally compile certain code only if you're using a particular platform. In other words using special system calls kills a bit of your cross-platform compatibility.

Another difference I've seen griped about is that when you use cross-platform tools, often the native "look" is lacking because the widgets...the name given to things like the resizing handles and minimize/maximize buttons and such...are implemented by the vendor and not using the native operating system functionality.

Maybe others have suggestions about finding an easy way to do native applications across platforms that doesn't involve creating a web application or using an interpreted language. Maybe others can give corrections. but from what I've found this is the current state of affairs; cross-platform work without being locked in to a particular vendor's product and learning that vendor's implementation of the language, and in the process of using a particular vendor's implementation of the language you also get limited help from peers since there are fewer users using that package then the general pool of BASIC/C/C++/etc. language programmers.

I'm open to suggestions and anecdotes, though...feel free to leave a comment!

1 comment:

  1. Hello,
    The Article on Why is Cross Platform So Hard is very descriptive .According to me Cross Platform need tp learn more then one Native App Development Language,Thanks for Sharing the information about Cross Platform .Xamarin Developer

    ReplyDelete