mono-api-check

Our current ABI/API checker tool for CLI libraries sucks.

Why? Because it fully relies on mono-api-diff to find missing interfaces (public types, methods and properties).

Issues

The issue with mono-api-diff It compares 2 APIs by comparing each type, method and property. If one misses or has now different arguments, it will say it's missing and thus mono-api-check will take it as ABI/API brekage. This means there are lots of false positives, because when you remove a overridden method (that is a method that exists in the base-type), is _not_ an ABI/API breakage. The runtime will just call the method of the base-type then instant.

Simple Example:

public class A
{
    public void Foo();
}
public class B : A
{
    public void Foo();
}

Now if you remove Foo() from B, mono-api-diff will say Foo() is missing in B. But this is not an ABI or API breakage.

Only protected and public (not private or internal) types/fields/methods/properties are subject and with that part of the ABI!

Solution

Writing a new tool that analyses the XML-diff file and verifies if the change is an ABI breakage or not.

Command Line Interface:

mono-api-comparer old-lib new-lib

Output:

???

Programming Language:

C#

Why C#? We have to load the new library file to inspect the base-types and that would be very difficult to do if not a CLI based language would be used.

Code

git://github.com/dpaleino/mono-api-compare.git