Why are the APIs namespaced with "MS"?
The first supported platform for Cydia Substrate was iOS, where the naming convention had seemed to involve the word Mobile (MobileSafari, MobileMail, etc.); therefore, Substrate ended up in a folder called MobileSubstrate and was distributed in a Debian package named "mobilesubstrate".
The name "MobileSubstrate" stuck, and it got turned into a two-character namespace under which to place the various functions the library exported. That said, developers on Apple platforms are not supposed to use two-character prefixes, as those are reserved for Apple; this was not known to me in 2008. (In fact, while reading this FAQ page, one of my friends believes that that rule didn't even exist in 2008, so there's at least a chance I'm in the clear. ;P)
When it seemed there would be interest for Substrate on other platforms where "mobile" did not make sense, the original name of the library, "Cydia Substrate" (which is always what it was called in the codebase) was re-established; even on iOS, you will find that in /Library/Frameworks.
However, for backwards compatibility with existing platforms and consistency for new ones, the API now continues to use the prefix MS. Of course, this means that developers who are new to the library sometimes ask what the prefix stands for, and why it was chosen: it is really just historical.