In the past week I’ve seen several post on the MSDN Smart Device forums asking essentially the same question. Some one has developed (or will develop) a program for one platform (Windows Mobile, Blackberry, iPhone) and wants to make the program run on the other. I’ve answered the questions as I’ve encountered them, but since it is a frequent question I decided to write a post about it so that I can refer people back to an answer as the question comes up.
What is a Platform?
A platform is a collection of functionality along with the methods for accessing that functionality provided to support an application. Traditionally platforms have been viewed as a combination of hardware and software; a software application would require a certain software platform (the operating system) running on a certain hardware platform (the physical computer with a certain processor). While that definition is still applicable presently we also have what would be considered pure software platforms; a developer targeting a browser can target a specific web standard as their platform with little to no concern for the hardware on which it is run. It is important to also note that platforms can be layered; one platform can exists on top of another. For mobile devices I can name 5 platforms; Windows Mobile, iPhone OS X, Blackberry, Android, and Symbian. As I type this
How do I make this program developed on platform X run on platform Y.
Unfortunately in most cases the answer to this question is “you don’t.” You will need to rewrite your application for the other platforms on which you need for it to run. What’s the workaround for this? Well, as I mentioned in my definition for a platform, “platforms can be layered; one platform can exists on top of another.” If you have two dissimilar platforms and if those two platforms can support the same software platform then you can target that common platform and end up with a single application that runs on multiple platforms.
Web browsers are going to be the most common platform that you can target. But browser applications have their limitations (those limitations are diminishing). The two most populate virtual machine platforms are .Net and Java, but you will find that presently different devices have different levels of support for these two platforms.
So What are you Saying
After reading the above you should be able to infer what I am about to conclude. IF you need to run a single application for multiple platforms make it a web app and adapt it to the browsers (or browser standards) that you wish to support. If it absolutely has to be a native application then you will not be able to create a single application that runs on Windows Mobile, iPhone, Symbian, Blackberry, and OS X.