As pointed earlier, a platform can be defined as something on top which you can run applications designed for it.

Basically "platform" is just a fancy name for "specific type of runtime environment" - that is, compiled code depends on specific libraries and specific operating system services. Most platforms these days use native code, which means that the platform is dependent of specific type of hardware and specific processor. A program written and compiled on Linux on IA-32 architecture will not run on Linux on Alpha architechture, or vice versa.

Then, there are platforms that are platforms over other platforms - in other words, platforms that are built as an applications for another platform. Usually this involves building a virtual machine that runs on any platform it's ported to the same way. Examples of VMs include Java Virtual Machine and Z-Machine. Other times, this is not the case, but they get close; Mozilla is basically something you can build applications for, so it qualifies as a platform.

As you may guess, "platform" is sometimes used very loosely. Some call systems that have nothing to do with running programs "platforms". Sometimes, a platform is just "something on, like, you do, like, stuff on, you know." Well, I guess the Everything would qualify as a platform - go get your own copy of the code from everydevel and build frosty cool web apps with it, if you want. Some even consider "web" in general as a platform.

However, as seen always, developing "platforms" instead of "programs" and "products" is mostly always slow, costy (well, maybe to some) and sometimes rather vaporous - even when all the betas work really nicely, no one seemed to believe they would run later on. Or the other way around. (See Mozilla, Java, Freenet, .NET)

(Is this philosophy?)