Porting, porting
The past few weeks, I have given some cycles to test and ultimately make sure existing ParallelFx softwares from the .NET world could run on our Mono implementation.
In the end, I selected three pieces of code that were using ParallelFx extensively: the Parallel Extensions sample gallery, Microsoft Biology Foundation and RavenDB (triggered by Rob Ashton work).
As a result, I'm happy to say I was able to run most of the three of them and they were of a great help pinpointing some non obvious corner case of the API. Practical consequence is that to also run them you will need Mono from master.
Following is a bunch of notes specific to each of these projects:
Parallel Extensions sample gallery
This project actually also contains the parallel extras library which provides a bunch of new constructs and extensions to the classic ParallelFx API that you can reuse in your own project.
At the moment though, you should be aware that the license used doesn't allow reusing the code on a platform different than Microsoft Windows but this will hopefully be changed in the near-future to use a wider free/open-source license.
In this gallery, I was only able to test the projects that didn't specifically use non-supported library in Mono such as WPF. For the rest of them, using our xbuild tool does the trick of compiling the code.
If you happen to have a software that use one of those code path I hadn't had a chance to test and if you can share the application with me I can also give it a spin.
Microsoft Biology Foundation
This project is a heavy user of almost everything in the framework ranging from concurrent collections to PLinq and is quite a hungry memory and CPU eater.
Since I couldn't find a proper application leveraging this framework, I simply turned to the performance test suite bundled in the project which works fine although some test eats up quite a lot of memory (as always, running under sgen helps here).
The code actually requires a couple of extra tweaks if you want to run the performance test suite correctly but for compiling the core framework itself, again xbuild should be sufficient.
RavenDB
Last but not least, RavenDB is an engine part of the NoSQL and document database movement but with a slant towards .NET (with Linq integration for instance).
Rob Ashton decided to try to run the beast on Linux and I gave him a hand to tackle the few incompatibilities between Mono and .NET result of which can be found in his GitHub repository: https://github.com/robashton/ravendb/tree/mono
The test suite is running well enough with a total of 531 tests passing out of 588. Some of the failure are perfectly normal (like the tests using Microsoft-only native librairies) and another good portion is probably casual portability mistake (like hardcoded path and such).
It would actually be much appreciated if those knowing how the framework work could help triage these failures and find what is Mono bugs and what is not so that we can fix them.
Some tests also depend on not implemented features in Mono so if you feel like it, you could also contribute these missing code pieces or provide a workaround in RavenDB.