It all started at Microsoft PDC this year. We met
Miguel de Icaza at our booth, and we talked about running our products under
Mono. I had previously done some tests under my
Linux machine at home, and it turned out that our obfuscated assemblies broke the Mono CLR. Yes, that means crashes and abnormal process terminations. Miguel was really kind and offered his help. He was able to determine that our
obfuscator (Xenocode) was generating invalid IL instructions in order to break possible decompilations. Unfortunately that broke Mono too. In fact it was not only Mono -- we had a lot of problems with the .NET 2 betas, even the RTM.
Now .NET 2 is officially out and Xenocode have released a new version of their obfuscator product. They have renamed the product, but it mostly looks the same. I was surprised to find out that they do not do aggressive IL mangling anymore. Maybe the .NET 2 runtime won't tolerate it too. The Xenocode guys have invested a lot of their time into generating really unreadable code. We were pretty confident with its unreadability, so we decided not to use the "break disassemblers" option. The good news -- our assemblies run on Mono too!
Now we can't possibly say we are Mono-compatible yet. We have found some areas in which Microsoft's and Mono's implementations differ. There are differences in the operating systems (Windows vs. Unixen vs. MacOS) that should be investigated further. We will be testing our products extensively for such things, but it all looks good. Maybe we will be the first large ASP.NET component vendor to support Mono.
I'd like to thank Miguel for all the help. I like Linux, I like .NET, and I like the Mono project. I am really excited about supporting it all, and that would have been impossible without him.