Skip to content

How to distribute your software to foster reproductibility

Tags Container, guix

The aim of this card is to provide examples of tools allowing to package your own piece of software to allow others to easily execute it in a frozen (fixed) environment. The examples in this card cover three categories: Python (with pypi), containers (with Docker), functional package (with Guix).

For further information on packaging, please have a look at package manager For further information on containers, please have a look at containers for reproducibility. Package managers handle atomic packages. Containers allow to generate frozen environments.

Guidelines for authors and developers

Building the recipe

Docker Containers The Docker recipe is a Dockerfile, which allows you to define: - the base OS with its specific version (for reproducibility reasons, never use "latest") - dependencies and their versions - the environment - the installation process

Generating the package/image

Sharing the package/image

Guidelines for users

Searching and accessing the software

Executing the software

Notes de redaction

Auteurs : Céline, Franck

comment l'auteur d'un logiciel peut fournir à des utilisateurs un code exploitable ? C'est à dire qui permette au lecteur de reproduire l'expérience décrite

Du point de vue de l'auteur : quels outils choisir pour assurer la repro de son travail. Du point de vue des utilisateurs : ĂȘtre capable de rĂ©cupĂ©rer le code et reproduire l'expĂ©rience.

Différents angles : 1. angle de la "récupération" de l'appli, du code etc ==> celui de l'utilisateur 2. angle "production" pour que ce soit exploitable / reproductible ==> celui de l'auteur

il est crucial de préciser au début de la fiche :

  • les contextes envisagĂ©s
  • les cas d'usage et les attentes en terme de reproductibilitĂ©
    • exemple : faire tourner et avoir les mĂȘmes rĂ©sultats (Ă  une tol prĂšs) peu importe les versions des dĂ©pendances etc
    • la repro totale (mĂȘme hash des paquets etc ...)
  • le cadre des conseils qu'on veut apporter : s'adapter aux besoins de l'utilisateur

Angle "production" d'une appli exploitable et reproductible

Deux aspects :

Quels types de "packages" fournir ?
Outils envisagés:

- package guix ou nix
- conteneurisation (Docker/Singularity)
- environnements Ă  la python (requirements, yml conda etc), R, julia, 
- packaging OS (rpm, deb) + spack (?) plutĂŽt hors-sujet

On ne rentre pas ds les détails techniques Exemple : un paquet guix c'est ... guix est bien parce que ... on utilise un paquet guix comme ça ... (mode boite noire) on le produit : voir fiche dédiée

Comment les produire ?

--> du manuel Ă  l'automatisation
  • automatisation du build/install (cmake, meson, setuptools ...)
  • CI/CD
  • manuel
  • ...

    il y aussi la "mise en ligne" (CD)

exemples

  • python packaging https://packaging.python.org/en/latest/ pyproject.toml etc

Cas d'usage

pas pour la fiche, juste pour vérifier qu'on oublie rien

  • codes propriĂ©taires : hors-sujet
  • C++, fortran, python ...

How to package your software (to ensure reproductibility) ?

Ou : comment l'auteur d'un logiciel peut fournir à des utilisateurs un code qui : - permette au lecteur de reproduire l'expérience décrite - de la maniÚre la plus simple et efficace possible

Contexte, objectfs et cas d'usage

Contexte : un code utilisé lors de travaux publiés (ref fiche 'comment référencer soft')

Objectifs :

  • Du point de vue des auteurs du logiciels : quels outils choisir pour assurer la repro de son travail.
  • Du point de vue des utilisateurs : ĂȘtre capable de rĂ©cupĂ©rer le code et reproduire l'expĂ©rience.
  • Rendre les choses simples et faciles pour utilisateurs et auteurs

Focus sur le travail des auteurs du soft pour remplir ces objectifs.

Plan

  • bonnes pratiques (gĂ©nĂ©ralitĂ©s)
  • pipelines concrets (gĂ©nĂ©raux puis spĂ©cifiques (e.g. Python ...))

Bonnes pratiques (généralité)

  • automatiser la chaine de construction (cmake, meson ...)
  • hĂ©berger le code sur une forge (fiche ref)
  • exploiter l'intĂ©gration et le dĂ©ploiement continu (CI/CD)
  • ...

Exemples / outils / pipeline workflow

Outils "complets"

Docker/Singularity

  • Description
  • Ref fiches dĂ©taillĂ©es
  • Avantages
  • InconvĂ©nients

Guix

Outils "métier"

Packaging python family Conda/mamba etc

Packaging R

Autres ?