<!-- .slide: data-state="title" -->
# Publishing Software
===
<!-- .slide: data-state="standard" -->
## Before we dive in...
What do you already know about software publication?
Note: Let participants discuss how they would publish a piece of software.
Answers can potentially be collected in a collaborative document.
===
<!-- .slide: data-state="standard" -->
## What do we mean by publishing?
* Publishing the *software itself* (not just publishing an article *about* it)
* There are many ways to do this
Note:
This generally means the source code itself, ideally including instructions on how to use it, what dependencies it has on other software, etc.
The goal is to allow others to find and use your code, if they so wish, without extreme levels of difficulty.
===
<!-- .slide: data-state="standard" -->
## Why Publish?
* Major scientific considerations
* Citability
* Reproducibility
* FAIRness
<img src="media/fair.png" width="30%">
Note:
Citability - Allows the software authors to get credit for their work
Reproducibility - If software is not published anywhere then few people will successfully reproduce analyses, simulations or other research results that were performed by other researchers
Additionally, publishing is essential for meeting the FAIR principles:
Findability - if software lives on someone's harddrive then it cannot be easily found by anyone
Accessibility - the software can e.g. be downloaded and installed using a standard protocol (authentication is still a possibility)
Interoperability - publishing the dependencies (e.g. software libraries) and input/output formats and versions is necessary for interoperability
Reusability - it's only reusable if it's available, and if people know what they are allowed to do with it (based on its software license)
===
<!-- .slide: data-state="standard" -->
## Traditional publishing pipeline
* Write some code and leave it on your harddrive
* Generate scientific results with it
* Write a paper about those results
* Possibly not even mentioning the software at all
### Consequences
* The software itself is not citable
* Methods are not easily reproduced or even analysed
* Nobody else can build on top of your research
===
<!-- .slide: data-state="standard" -->
## Modern publishing pipeline
* Software repository
* Tag/semantic versioning
* Get a persistent identifier
* Registries
* Software Paper
===
<!-- .slide: data-state="standard" -->
### Software repository
Put all source files in a public version-controlled repository
e.g. GitHub, GitLab
* Software is immediately Findable
* Naturally contains a log of all development history
Include a software license, and a citation.cff file
Note:
See license, citation and software management chapters
===
<!-- .slide: data-state="standard" -->
### Software repository
Which one?
<img src="media/repository_logos.png" width="80%">
Note:
Anything is better than nothing. Gitlab and Github are the mainstream, used by many and with lots of features. You might run into projects using other repositories.
===
<!-- .slide: data-state="standard" -->
### Tag/semantic versioning
It is important to communicate the actual version of the software used for a particular piece of research
If your software is used as a dependency of another software/workflow then specific versions can be referenced
Ideally, use "semantic versioning" in the form MAJOR.MINOR.PATCH (e.g. v2.1.5)
===
<!-- .slide: data-state="standard" -->
### Get a Persistent Identifier
Specific versions of the software should be published to an archiving service that provides persistent identifiers
For example, Zenodo is a long term archiving service for scientific data and software.
Zenodo will assign a DOI to the published data, making it citable
Note:
See Citation story
===
<!-- .slide: data-state="standard" -->
### Registries
Add a link to your software on a relevant public registry
* For example, the eScience Center maintains the Research Software Directory
* Can also be domain specific software registries
* Or even list it on awesomelist
This aids greatly in Findability by relevant researchers
===
<!-- .slide: data-state="standard" -->
### Software Paper
Publish a journal article about the software specifically
* Journal of Research Software (JORS)
* Journal of Open Source Software (JOSS)
* SoftwareX
* CRAN
Some journals perform peer review of the software in question
===
<!-- .slide: data-state="standard" -->
## Automate as many steps as possible!
For example, you can automate archiving on Zenodo by linking it to your github account
See instructions in the "Automating software publication" tab of this story
===
<!-- .slide: data-state="keepintouch" -->
www.esciencecenter.nl
info@esciencecenter.nl
020 - 460 47 70