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 codes

MCX and other tools developed by our team are all open-source software. It reflects our passion and desires 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 under the same cause, and minimize repeated works.

Developing a well-maintained software is rather a challenging task, but was 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) to become wasted. Please consider building your new ideas based on our actively maintained source codes, and do not repeat!

This page is dedicated to educate our developers - someone who has the desires to improve and modify - how to take the best advantage of our open-source software, and collaborate with us towards a more productive research.

1. How to contribute to this project

There are many ways you can contribute to our projects, no matter if 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 in 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 freedom of the end user:

  • the freedom to run the software for all purposes, including for proprietary purposes
  • the freedom to study the inner-workings of the algorithms by reading the source codes
  • the freedom to modify the source codes for all purposes, and
  • the freedom to share the modified codes 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 words, as long as you do not share (send by email, post online) your "derived works" with a 3rd party, you can pretty much do anything you want to the software - to compile, modify, encrypt, dismantle ... 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 codes and you ARE OBLIGATED to give it to them.

Although GPL is a "protective" open-source license (i.e. copyleft), from an academic research standing point, 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 freedom 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, documentations, or even include the data files generated from our software in your products and sell, however, if you decide to include any part of our software in your product - either unmodified or modified - to use by a 3rd party, especially in the form of integrating those 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 codes, despite you publish it or not, we encourage you to share your modified source code to public, including our upstream authors. It 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 codes

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

  1. We use a source-code formatter, astyle, to format all C/C++/CUDA codes (*.c;*.cpp;*.cu;*.h;*.cl) before we save any change to the source codes in our github repositories. The specific formatting styles we use are specified can be found in the Makefile.
  2. Your new code need 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 patch as small and as local as possible
  4. Please write in-code documentation to your additions so that we understand what you did; the added comments should follow doxygen format for C/C++.
  5. Please add a test to 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 3rd party code is compatible with our license. We can not accept a patch including unclear licenses.
Powered by Habitat