I don't know anything about MPLab.

Compilers, OSes, and their APIs are implementation specific in many ways. Compilers built to emit code for x86-type processors (and compatible) will not emit code that will run on a processor with a different instruction set, or on a machine that it has not been built to specifically support.

OSes designed to work with a specific type (or very close, compatible types) of keyboard will not work with another type of keyboard. The same is true of displays, sound, almost anything you care to name.

Sometimes the differences are addressed with a combination of hardware interfaces and software drivers that can make the necessary translations. This works well when devices are designed to be standard at some level, regardless of the using technology. Disk drives are a prime example. Sometimes the devices are too substantially different to allow such accomodation.

You will have to determine for yourself what the characteristics of MPLab are in view of those facts. Software is not an end product, although sometimes it seems as if it is. It is always used to direct the operations of a set of hardware. Hardware almost universally makes the rules. Software, through various accomodation methods (specific compilers, for one), complies.