Karma, you need to understand the difference between DATA and CODE.
Data can be transferred between Mac, PC, mainframe, Linux, AS400, etc. Text files, phone numbers, transaction records, etc. etc. can be transferred without issue for the most part.
Code is bits just like data, but it's instructions to the CPU to do things. Add these two numbers. Branch to this location. Etc etc. This stuff CANNOT be run on dissimilar platforms. There are two issues. First, compare an Intel x86 CPU to a ARM CPU and the instructions telling them to do things are completely different. Use code meant for one on the other, and it'll crash. Hard. Immediately. The second issue is that even when on the same platform (x86 for example), the operating systems could be so different (OSX vs Vista vs Linux) that even if the CPU knows what to do with the instructions, what it ends up doing is nonsensical to the OS and it all crashes down again.
So to sum up - yeah, you can transfer your friend's phone numbers back and forth, that's easy. But the program to do anything with that would have to be specifically written and compiled for the different platforms. One COULD port an application from one platform to another (that's how we can get the "same" games on both PS3 and Xbox, for example) but it's not easy or quick.
Working through a virtualization layer like Flash helps some - you write flash code that is then interpreted by a platform-specific client - but that comes at the cost of performance.
It CAN be done, but only with a heck of a lot of effort that's frankly not worth the reward.