How to distribute your software to foster reproductibility¶
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