Why should you publish software?
Publishing your research software helps ensure your software is citable, preserved, and accessible -- which supports scientific reproducibility; replication, and transparency. Additionally, it helps with gaining appropriate credit for your work. Publishing software also helps the community by enabling reuse of your code and methods. Moreover, it is increasingly required by funders who want researchers to make their data and workflows open and by publishers who aim to improve replicability.
Where to publish software?
There are a number of different channels for publishing research software, including software papers, general source code repositories, and disciplinary archives. (Read more about options for software publishing…)
Where to publish depends on context...
It is frequently appropriate to publish in multiple channels. For example, many creators of statistical software maintain development code in Github so that developers can contribute to it and reuse it; publish released versions in CRAN so that practitioners can find it and apply it; and vet major new functionality through publication in The Journal of Statistical Software.
How to make your software more citable?
Making your software citable both gains credit for your work, and improves reproducibility of research that relies on the software. There are a variety of ways to make your software citable:
A software journal, such as PLOS One or The Journal of Open Research Software, allows submissions that "allow for submissions entirely focused on research software", enabling description and credit for research software (Force11 software citation principles). Like data journals, which focus on publishing papers that describe data sets, these journals support publishing papers that explain and describe research software packages. Publishing a software paper both serves as a way to extensively document the code, and to get publication credit for your work.
Major source code repositories, such as Github, Codeplex, BitBucket, or Sourceforge publish code, and provide many features to support ongoing development.
Disciplinary software repository such as The Comprehensive R Archive Network (CRAN) or NanoHub are often heavily used among specific research communities to locate software that can be applied in research.
General subject/replication archives such as Dataverse, Zenodo, or FigShare publish individual versions of software and data in support of replication and reuse.
Institutional repositories such as DSPACE@MIT archive papers, publications, and data in support of an institution's commitment to durable open access to the content produced by its community.
If your code is stored in GitHub, you can archive your repository and get a permanent citable DOI by archiving in either Zenodo or Figshare. These are data repositories that allow management of all kinds of data, and are both free for researchers to use. Zenodo and Figshare can also be used to store research data.
Archiving your GitHub repository in Zenodo or Figshare:
Zenodo (directions) | Figshare (directions) | |
How to link GitHub with Zenodo or Figshare |
Log into Zenodo with your GitHub account Authorize Zenodo application in GitHub |
Use a browser extension bookmark or this webpage to fetch your GitHub repository Authorize your Figshare account to sync with GitHub |
Your GitHub repository | Must be public. Toggle the "on" button next to your repository. | Must be public to archive. |
Provides a DOI? | Yes. Provide metadata in Zenodo and click "publish". DOI is also displayed in GitHub | Yes |
When you publish a new commit | Does not update archive | Does not update archive |
When you publish a new release | Automatically triggers Zenodo to archive your repository | Automatically updates if you turn on autosync in Figshare |
Also supports linking to research data collections? | Yes | Yes |
The FORCE11 software citation principles include the recommendation that software packages include a CITATION file along with other README files that documents exactly how the authors of the software would like to be cited by others. This ensures that users of the package know what information to include in their citations and makes citations of the code more likely, increasing the credit that you receive.
Software citation files can be human readable CITATION files or machine readable files, and may vary depending on the language (for instance, R supports a citation() function as well as CITATION files). Citation files should include:
A citation file can also include contributor roles and the software license. Also consider including a BibTeX citation and the citation of any associated publications.