FAIR software

Some of the principles and guidelines of FAIR software deviate from the ones for FAIR data. The following page gives you an overview over how to best make your software FAIR:

The FAIR Software principles

Findable

Guideline: Software, and its associated metadata, is easy for both humans and machines to find.

This entails that…

  • …your software is assigned a globally unique and persistent identifier
  • …your software is described with rich metadata.
  • …your metadata clearly and explicitly include the identifier of the software they describe.
  • …your metadata are FAIR, searchable and indexable.

Leading question: Is your software easy to locate and to identify?

Accessible

Guideline: Software, and its metadata, is retrievable via standardised protocols.

This entails that…

  • …your software is retrievable by its identifier using a standardised communications protocol.
  • …your metadata are accessible, even when the software is no longer available.

Leading question: Can others obtain and run your software?

Interoperable

Guideline: Software interoperates with other software by exchanging data and/or metadata, and/or through interaction via application programming interfaces (APIs), described through standards.

This entails that…

  • …your software reads, writes and exchanges data in a way that meets domain-relevant community standards.
  • … your software includes qualified references to other objects.

Leading question: Can your software work with other tools?

Reusable

Guideline: Software is both usable (can be executed) and reusable (can be understood, modified, built upon, or incorporated into other software).

This entails that…

  • …your software is described with a plurality of accurate and relevant attributes.
  • …your software includes qualified references to other software.
  • … your software meets domain-relevant community standards.

Leading question: Can others understand and adapt your software?

How can you implement the FAIR principles?

Findable

  • Use a public repository (e.g. GitHub)
  • Write a clear README
  • Add Metadata
  • Assign a persistent identifier

Accessible

  • Host code in open repository
  • Use open formats
  • Include environment files
  • Provide clear installation instructions

Interoperable

  • Use standard data formats and APIs
  • Avoid hardcoding
  • Containerize your software
  • Document dependencies, input & output formats

Reusable

  • Add a license
  • Provide usage examples
  • Include metadata about author & version
  • Write modular & well-documented code

How can a possible workflow look like?

Workflow example

How to: Create a repository using GitHub

  • Create a GitHub account
  • In the upper-right corner click on the ’+’ and then New repository
  • Type in a clear, descriptive name for the repository
  • Choose a visibility (private or public)
  • Click Initialize this repository with a README
  • Click Create repository

How to: Add a license using GitHub

It is important to specify how others can use, modify, and share your software. No license means that others can’t legally reuse your code

  • Navigate to the main page of your repository
  • Click Add file > Create new file
  • Name the new file LICENSE
  • Under the file name, click Choose a license template
  • Choose a license
  • Click review and submit and then commit the new changes

How to: Add a README file

How to: Add a Metadata file with CodeMeta

How to: Add an environment file

Using conda you can create an environment.yml which documents packages installed to the virtual environment conda env export --name old_env --from-history --file environment.yml

If you want to use the environment.yml to create a new virtual environment use conda env create -f environment.yml

You can also use pip to create a requirements.txt pip freeze > requirements.txt

How to: Make sure to use open formats & comment your code

Use widely supported file formats to ensure combability CSV, JSON, XML

NOT: Proprietary file formats

Comment your code while you program! Comments should not copy the code, but explain what is happening and why

TLDR

Follow the FAIR principle

Findable: Use public repositories, add rich metadata, and assign persistent identifiers.

Accessible: Host code openly, use standard protocols, and provide installation instructions.

Interoperable: Use standard data formats and APIs, document dependencies, and (optionally) containerize your software.

Reusable: Add a license, write modular and well-documented code, and include metadata and usage examples.

Example Workflow: Create a public repository → Add README, license, metadata and environment file → Use open formats & comment your code

Back to top