Mono Migration Analyser tool (MoMA): Port Windows Software To Linux

The Mono Migration Analyser tool: is it really necessary? eWEEK Labs puts MoMA through its paces.

The screen then shows a summary of the problems found. The test on the tool’s own binaries found no problems, as I suspected would be the case. It tested four categories, and each passed:

-All methods called exist in Mono, which means you’re not calling methods that the Mono project hasn’t implemented.

-No P/Invokes are called, which means you’re not calling directly into the operating system.

-No methods that throw NotImplementedException are called, which means you’re not calling methods that technically exist as a stub in Mono but haven’t yet been coded. (Remember, Mono is an ongoing project.)

-No methods marked with [MonoTodo] are called, which is similar in nature to the previous category.

Step 4 is pretty interesting, as long as you don’t abuse it: It lets you submit your results directly to the Mono project. Since I’m using MoMA to test itself, and since it passed with flying colours, I didn’t click the “Submit Report” button. Instead, I just clicked Next to move to Step 5, which is really just three buttons that let you download Mono and some other tools.

More Serious Work

Testing the MoMA tool itself didn’t yield much information, so I wanted to also test a bigger application. I wrote a quick little form-based application, but that didn’t yield much either; it passed with no problems. I needed a bigger application to test.

While writing my own million-line, production-quality software to use as a test in this article certainly sounds exciting, I suspect my boss wouldn’t be thrilled about the decade or so it would take to me to do so when I should be writing articles. So I decided to use the tool to analyse some existing programs written in .NET.

One such tool is Paint.NET, which is an excellent Paint tool that has evolved from a .NET version of the old die-hard Paint tool that comes with Windows to a full-featured tool that some say rivals Adobe Photoshop.

I used MoMA to process all the binaries that come with Paint.NET. In this case, the tool didn’t pass with flying colours. (That’s not a knock against Paint.NET, however, please keep reading.) For starters, the tool included several non-.NET assemblies, which were skipped. But the several other binaries were .NET assemblies; these were scanned.

This time the results were:

–All methods called exist in Mono. So far, so good.

–P/Invokes called: 157

–Methods called that throw NotImplementedException: 7

–Methods called marked with [MonoTodo]: 58