Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Note

Before converting the license for a repository, be certain that you have the authority to change the license. Changing the license of your own work or changing the license for a repository owned & managed by the OpenMRS community should not be an issue, but if you are using a repository forked from a third party, you may not have the authority to simply re-license their code without their permission.

Recipe for adopting MPL 2.0 HD license

This recipe assumes

  • You have a githubrepository that you wish to license under MPL 2.0 with Healthcare Disclaimer.
  • You are using a unix-based system (Mac or Linux).  Some steps may need to be altered to work within Windows; alternatively, a Windows user could spin up a Digital Oceandroplet with Ubuntu long enough to perform these steps.

...

Info

This recipe will also convert all of your line endings to LF (line feed) to follow the OpenMRS conventions of storing LF in github and letting git convert line feeds magically based on the client.

Steps

  1. If you don't already have it, install dos2unix(e.g., sudo apt-get install dos2unix)
  2. Copy the LICENSEand license.txtfiles from openmrs-core to the root folder of your repository and remove any prior license or license header files if they exist.
  3. Copy the .gitattributesfile from openmrs-core to your repository.
  4. Convert line endings to line feeds.  You can use dos2unix on your entire repository.  Alternatively, if you have Java and Groovy installed in your environment, you can use the attached scan-newlines groovy script (download & make executable with chmod +x scan-newlines):

    Code Block
    bash
    bash
    $ /path/to/scan-newlines | xargs dos2unix
  5. Assuming you have Java & Groovy installed, scan files for non-OpenMRS licenses using the attached scan-licenses groovy script (download, make executable with chmod +x scan-licenses):

    Code Block
    bash
    bash
    $ /path/to/scan-licenses

    If you don't have Groovy installed, then you should scan the files in your repository manually and/or using git to check for any code that is already separately licensed.  For example, the following grep command will look for files containing any references to the old "OpenMRS Public License":

    Code Block
    bash
    bash
    $ grep -R "OpenMRS Public" *

    It is critical that these files be excluded from the licensing plugin so the proper licenses are not illegally overwritten with an OpenMRS license.  You can see examples of exceptions in the openmrs-core pom.xml directive for the maven license plugin.

  6. Update your pom.xml file.
    1. Add a directive for the maven license plugin similar to the openmrs-core pom.xml.
    2. Update the <licenses> directive similar to the openmrs-core pom.xml.
  7. Once you have updated your pom.xml to use the maven license plugin and have excluded any files or folders that contain separately licensed code, you can use a maven directive to apply the MPL 2.0 HD license header to your code:

    Code Block
    bash
    bash
    $ mvn license:format
    Warning

    Running mvn license:format without excluding files under separate licenses or converting to line feed (LF) line endings could inappropriate (even illegally) overwrite existing non-OpenMRS licenses or have unpredictable results. When you are first converting a repository's license, we highly recommend first making a copy of your local copy so you can easily recover if something goes wrong.

  8. Confirm that your local copy still builds and passes all tests.  If it does, then you are ready to commit changes:

    Code Block
    bash
    bash
    $ git add --all .
    $ git commit -m "Convert to MPL 2.0 HD and standard line endings"

Using the Maven License Plugin

Once a repository has been converted over to using the maven license plugin, you can easily check and update licenses.

Check for missing license headers:

Code Block
bash
bash
$ mvn license:check

Update license headers:

Code Block
bash
bash
$ mvn license:format

Resources

...