to finish my work an answer to the last comment:
If it is strictly open source, I would agree that open API is better. However, most open source software is also free software in that you are allowed to modify it. Let's say part of .Net doesn't work as well as it should. If it were free to modify, you could use a more efficient version for your scenario. However, if there is no intention of modifying, then open API is better for reasons you describe as well as less likelihood to be tied to the implementation.
Thank you for the comment but I would like to disagree. I will take my master thesis (my first study was physics and I'll take that one). Not that this scenario is not common (and I saw it quite a few times in my professional live) but taking my thesis makes me the idiot and hurts nobody else 😉
So what I did was a parallel implementation of a quantum mechanics calculation (I skip the details ;-). I wanted to use libpng and found that neither libpng nor zlib (which was used by the other) was available on the IBM RS/6000 SP that time (in fact I was the second to start the C++ which was incapable of the STL that time...I can tell you, hell!!). While working on that I found a missing thing within the libpng. I cannot remember what it exactly was but it was an easy thing to introduce anyway so I did it. The rest of my application started to rely on this new feature and I was happily hacking away. Until... until I did my first run with real data and discovered my version of libpng was unable to handle such large pictures. No prob it was fixed in the then current version but this one lacked my specific feature and it was no simple copy-action, it was real work (most efforts went into discovering what was missing... as usual).
In a "real" project this can break your neck. You have to keep track what change you did and have to merge it again into a later version of whatever library you use. Not easy. Especially in the open source sector where you are the last person in the row towards your customer. This is extremely interesting in Germany for example where you as a solution provider have to provide certain guarantees and you are the last man in the line 😉
So whenever you change something be sure it can be merged in later versions or force it to become part of the mainstream version.
Don't get me wrong I really enjoy "open source" for learning and playing purposes. Take the shared source common language runtime (have a look here) which gave me some insight how .net really works. But I would have never made it a base for a real live project;-)