Share Research Empowered by Open-Source Codes

1. How to contribute to this project
1.1. If you are a user
1.2. If you are a developer
2. Understanding what the open-source license means
3. How to modify MCX source code

MCX and other tools developed by our team are all open-source software. This reflects our passion and desire to share our latest and coolest research with everyone and make our small but persistent contribution to a broader research community. If you, as a user or developer, share the same passion and perspective, we invite you to join us and contribute to the same cause, and minimize repeated work.

Developing well-maintained software is rather a challenging task, but this is not well understood by many research groups. It requires not only hundreds or thousands of hours of development up front, but also, oftentimes neglected, many more hours for troubleshooting, debugging, optimizing, and support after the software becomes available. A vibrant software project needs dedicated research effort and funding support. By choosing an open-source license, we don't want to see this significant investment in time (and funding) become wasted. Please consider building your new ideas based on our actively maintained source codes, and do not repeat!

This page is dedicated to educating our developers - those who have the desire to improve and modify - on how to take the best advantage of our open-source software and collaborate with us toward more productive research.

1. How to contribute to this project

There are many ways you can contribute to our projects, whether you are a user or a developer.

1.1. If you are a user

1.2. If you are a developer

2. Understanding what the open-source license means

GPLv3 A software license is a legal contract between a user and the developer/provider of the software.

MCX, MMC, MCX-CL, and MCXStudio are published under one of the most widely used open-source licenses - the GNU General Public License version 3 (GPLv3). Like most other free-software licenses, GPLv3 ensures four software freedoms of the end user:

  • the freedom to run the software for all purposes, including proprietary purposes
  • the freedom to study the inner workings of the algorithms by reading the source code
  • the freedom to modify the source code for all purposes, and
  • the freedom to share the modified code with another entity, given that the license restrictions are met (copyright must be clearly acknowledged and the "derived works" must be licensed under GPLv3 - i.e., must be open-source).

In short, as long as you do not share (send by email, post online) your "derived works" with a third party, you can do pretty much anything you want with the software - compile, modify, encrypt, dismantle, etc. However, if you do share the modified (improved or even deteriorated) software with another person, you MUST 1) acknowledge in a "prominent place" the copyright/contributions from the upstream authors, and 2) ensure the above 4 freedoms are passed on to your copy - i.e., any of your users is entitled to request your modified software source code and you ARE OBLIGATED to give it to them.

Although GPL is a "protective" open-source license (i.e., copyleft), from an academic research standpoint, it ensures almost everything you need: freedom of learning, teaching, research, academic creation, and publication.

For end users in a commercial environment (companies, non- or for-profit), you can still enjoy all the freedoms of our software, i.e., compiling and modifying for the purpose of studying algorithms or simply using our software for applications. You can write about these findings in papers, reports, documentation, or even include the data files generated from our software in your products and sell them. However, if you decide to include any part of our software in your product - either unmodified or modified - to be used by a third party, especially in the form of integrating it as part of a "larger software", you must agree to open-source the entire source code of your "larger software" according to the GPL license terms. If you or your company do not wish to do so, you must contact the upstream author of our software and obtain a commercial license in the form of dual-licensing.

If anyone makes significant improvements to MCX/MCX-CL/MMC by modifying the source code, whether you publish it or not, we encourage you to share your modified source code with the public, including our upstream authors. This is really the original purpose of making our software free - so that every effort and improvement will not be wasted.

3. How to modify MCX source code

If you decide to modify our software, make changes, and are likely to share those back to us, we would like you to follow the guidelines below when you edit our code:

  1. We use a source code formatter, astyle, to format all C/C++/CUDA code (*.c;*.cpp;*.cu;*.h;*.cl) before we save any changes to the source code in our GitHub repositories. The specific formatting styles we use can be found in the Makefile.
  2. Your new code needs to follow our code formatting styles (we primarily use the BSD KNF indentation style with a typical indentation width of 4 spaces)
  3. Please do not alter/change white spaces in a line without changing the code - to keep your patch clean and focused, we want to see patches as small and as local as possible
  4. Please write in-code documentation for your additions so that we understand what you did; the added comments should follow doxygen format for C/C++.
  5. Please add a test for your newly added feature using commands similar to those in the test script or demo scripts.
  6. If you add not only your own code but also someone else's code to our software, you must make sure the third-party code is compatible with our license. We cannot accept a patch including code with unclear licenses.
Powered by Habitat