That's a really good question about compatibility. Microsoft released their OOXML code some time ago and have been updating it regularly since. It even supports build with mono. Doing a quality port of that should (theoretically) be relatively straightforward, and they have a great reference implementation to test against.