Microsoft's New Interoperability and Open Source Software

by Kevin Farnham

Microsoft's announcement of "broad-reaching changes to its technology and business practices to increase the openness of its products and drive greater interoperability, opportunity and choice for developers, partners, customers and competitors" is certainly an interesting development. Although most of my career experience has involved Unix/Linux platforms, lately I do quite a lot of experimentation on Windows, in my role as open source community manager for the cross-platform Threading Building Blocks (TBB) project.

In fact, I'm hoping to present a 45-minute session at this year's Open Source Convention (OSCON) that will involve an application I'm working on that integrates Python, Boost.Python, Visual C++, and TBB. So a statement by Microsoft that talks about interoperability between the Microsoft platform and open source (one aspect of the new initiative is "fostering more open engagement with customers and the industry, including open source communities") is quite interesting to me.

Threading Building Blocks (if you haven't heard of it) is a C++ template library that simplifies the development of multithreaded applications, by abstracting the details of low-level thread management behind constructs such as parallel_for, parallel_reduce, parallel_scan, etc. TBB also includes thread-safe STL-like containers (concurrent_vector, concurrent_queue, concurrent_hash_map), scalable memory allocators, mutexes, a well-developed task manager, and quite a lot more.

In this sense, Threading Building Blocks is "like" Microsoft's Parallel Extensions (ParallelFX) -- though a major difference between the two is that TBB has several years of development behind it and is already a fully-functional library, while ParallelFX is a new initiative announced just this past November. Hence, as you'd expect, ParallelFX is currently fairly slim in terms of capability compared with TBB.

What grabs my attention in this Microsoft press release is the stated objective to "drive greater interoperability ... and choice for developers". As I said, Threading Building Blocks is a cross-platform library. You can apply it to multithread your Windows applications without spending a dime, using the following free software packages:

(See my recent post about how one developer accomplished this.)

One question, though, is: do Windows developers really want to integrate non-Microsoft libraries and applications into their Windows projects? Doing so carries some risk (given Microsoft's past), should the development path of Microsoft's own platform diverge from the newly declared commitment to openness and interoperability.

Then there's the convenience aspect. When I was a Windows development manager a few years ago, we didn't use anything outside of Microsoft's own platform. But the truth is, as good as the Microsoft development platform is, in some instances there are other products that are better for accomplishing a specific task. We seriously considered offering customers the option of using SQL Server or Oracle, for example.

When it comes to multithreading C++ applications on Windows, developers have an already-solid (on Version 2.0+ at this point) open source choice in Threading Building Blocks. Yet, thus far, it seems to me (from the anecdotal evidence, talking to people who visit the #tbb IRC channel, etc.) that TBB has been embraced primarily by developers who prefer other (primarily open source) operating system platforms.

As expected, the Microsoft announcement has received plenty of negative press and commentary (doesn't that happens with every Microsoft announcement to a certain extent?). I happen to like the Microsoft platform -- it's development tools are stellar in my opinion. I'm also a great fan of open source, and indeed I have a vested interest in open source through my involvement in TBB open source.

It's going to be very interesting to see if Windows developers and software companies will take advantage of Microsoft's new encouragement for them to explore integrating open source libraries into their Windows applications.