Question

I work in an academic research institute heavily dependent on high-performance computing. In the 10 years we have developed our own Fortran code which is very well regarded and can run on very large clusters. In order to have the larger research community benefit from the code, we are considering making it open-source. However, since our funding is highly dependent on the research we can perform with the code, we would be kind of shooting ourselves in the foot.

One of the ideas is to limit the number of CPUs the code can run on, e.g. maximum 1000 CPUs instead of the 100,000 we use. That way the global research community can benefit from the code, but we would be having an advantage on the size of the problems we can run.

Is such a feature conceptually possible? And how could such a feature be implemented? Essentially we would like to open-source the complete code, but limit the parallelization (using MPI) to a fixed number of MPI threads, for example using a (closed-source) module.

Was it helpful?

Solution

You are trying to let the research commmunity benefit by having them be able to do what you do, without having them be able what you do. That sounds like you haven't really made a principled choice yet.

Software solutions like that in open source software aren't likely to work: the code is open source, after all. The first thing other institutions will do is rip out the closed source bit, replace it by an open source bit without such a limitation, and then everybody will use that.

There might be a compromise possible: don't open source the software, but sell licenses. Institutions with licenses also get the right to read and modify the code, but not to distribute it. Charge on a yearly basis. That way you can maybe make up for the loss in funding by taking some of theirs.

Another option is to release an older version, that you keep updated but always lagging behind by some number of years. However, an open source community might take up the project and develop new features faster than you do (or there might not; most people overestimate the interest others have in their software).

Or just release it and make use of the work others do on it. You'll always be the top experts on the software.

OTHER TIPS

This can't really be done.

The idea behind open source is that the source is open, in other words, people will have access to it. From Wikipedia:

In production and development, open source as a development model promotes a universal access via a free license to a product's design or blueprint, and universal redistribution of that design or blueprint, including subsequent improvements to it by anyone.

By providing universal access to the design or blueprint, even if the released version is limited only to 1000 cores, it would be quite easy to simply change that number to 100000 or something.


Here are some options of what you could do instead:

  • Consider releasing the code under a license that restricts users of your code
  • Release a closed source API library that allows other researchers to gain your functionality without having access to the code itself.

There is very little you can do to limit what others will do with your source code. They can make another module from scratch that can unlock the multiprocessing capability, or even improve it: it will cost time and expertise but if it is important to them, they will do it.

With ten years head start, you still have the opportunity to use your experience and knowledge of the code to continue to make the best research, even if you give others the source code that allows them to replicate your experiments. Your funders may even have more reason to go to you, as your research impact may be greater if you are leaders of an open source project that is used at several universities.

Instead of open source, you can try to restrict others legally, by publishing your source but putting proprietary restrictions on the source licence. I can think of several projects that have done this: Ghostscript, AT&T Unix, Microsoft .NET and Xerox PARC Smalltalk-80. While those ones eventually went fully open source, I expect that there are other less well-known ones that still place restrictions on how licensees use the source code. Of course, while publishing your source will mean those with less respect for the law may break the terms, it should keep bona fide academic researchers from running your code on supercomputers as powerful as yours.

Licensed under: CC-BY-SA with attribution
scroll top