What's the main difference between MSMQ, IBM MQ and JMS other than service provider?
In short, all three technologies can be used for interconnecting applications using loosely coupled message queues.
IBM MQSeries and MSMQ are message queueing *products*. They have similar features and characteristics. They differ in their performance, tools, integration into the Windows platform or .NET.
For example, see http://www-3.ibm.com/software/ts/mqseries/library/articles/MQ5_2perf.pdf.
JMS, on the other hand is a *standard* which defines how Java applications access a MOM product. IBM MQ offers a JMS compatibility add-on. There is no JMS add-on for MSMQ, however.
Finally, there are various products that are clean room implementations of JMS. e.g., SonicMQ, Softwired iBus, Fiorano MQ, etc.
These typically provide better performance than IBM MQ and MSMQ. Especially when using the publish/subscribe messaging model.
Also, these "clean room" JMS implementations are typically easier to install, and much easier to administer than IBM MQSeries.