With TensorFlow, when we started to develop it, we kind of looked at ourselves and said: 'Hey, maybe we should open source this.'
Jeff Dean - Google AI Lead.
Master Expert Technologie de l'information EPITECH 2020.
Co-fondateur et CTO d'une startup dans l'Edtech 2019 - fin 2022. (+3 ans)
Formation PSPO-1 Agile Scrum 2022.
Co-fondateur et CTO d'une startup dans la Deeptech fin 2022 - aujourd'hui.
Les enjeux et la culture de l’open source, les différentes licences de l’open source
Publication et intégration d’un projet via un gestionnaire de paquets
Déploiement d’applications open source avec Docker
Panorama de solutions open source
Participation à un projet open source
Chaque séance débutera par la présentation d'un concept et de l'intérêt d'utilisation de celui-ci.
Après la théorie, nous verrons alors la pratique en réalisant des exercices.
En fin de chaque séance, nous aurons un temps pour poser des questions sur les exercices en fin de module.
La culture libre est un mouvement qui promeut la libre circulation des idées, des œuvres et des connaissances.
Tout le monde devrait pouvoir créer, utiliser, modifier et partager des contenus librement, tout en respectant certains droits d’auteur et de paternité.
Logo du Creative Commons
Un logiciel Open Source est un code conçu pour être accessible au public : n'importe qui peut voir, modifier et distribuer le code à sa convenance.
Une approche plus axée sur l'efficacité et l'adoption par les entreprises grâce à la mise en avant de la transparence du développement, collaboration et qualité technique.
Cela permet alors la création de grands projets comme Linux ou Kubernetes ou même VSCode.
Le logiciel libre est défini par les 4 libertés fondamentales, proposées par la Free Software Foundation (FSF) :
Beaucoup de projets sont à la fois libres et open source (par exemple, Linux ou Firefox).
Les débuts de l'Open Source se font à l'arrivée de l'ARPANET en 1950-60.
L'apparition des forums ont simplifié les discussions et ont abouti à l'élaboration de normes de collaboration et de communication ouvertes entre 1960 et 1990.
En 1990 à l'arrivée d'internet, la collaboration, l'examen par les pairs, la communication et l'ouverture constituaient déjà ses valeurs de base.
Intelligence collective
Rassurer les utilisateurs
Créer de la notoriété
Open Source
Frontend-Only
Système de communauté
(Plugins)
Qualité du code et versioning
Merge requests
Roadmap
Aspect | Copyright | Copyleft |
---|---|---|
Philosophie | Protection et contrôle des droits | Partage et préservation des libertés |
Accès au contenu | Souvent restreint | Libre avec certaines conditions |
Œuvres dérivées | Peuvent être propriétaires | Doivent rester libres |
Licences associées | Licence propriétaire, Creative Commons (certaines options) | GNU GPL, Licence Art Libre |
Objectif principal | Protéger le créateur | Protéger la communauté |
L'OSI est une organisation à but non lucratif qui promeut et protège le concept de logiciel open source. Fondée en 1998 par Bruce Perens et Eric S. Raymond.
Se concentre sur la diffusion des logiciels open source au sein des entreprises et des gouvernements. Grâce à elle, des projets open source comme Linux, Apache, et Kubernetes sont devenus des piliers de l'industrie technologique.
Les licences Berkeley Software Distribution privilégient la simplicité et la liberté maximale, permettant à quiconque d'utiliser, modifier et redistribuer le code, y compris dans des logiciels propriétaires. Elles imposent peu de contraintes.
Conditions minimales :
Exemple : Licence BSD 2 ou BSD 3 avec FreeBSD, OpenBSD, libcurl.
Les licences GNU, développées par la Free Software Foundation (FSF), sont basées sur l'idée que le logiciel doit rester libre pour tous. Elles imposent des restrictions pour garantir que toutes les œuvres dérivées restent elles aussi libres.
Conditions minimales :
Exemple : Licence GNU/GPL-2.0 Linux ou encore WordPress.
Les droits :
Utiliser, modifier, distribuer le logiciel.
Les obligations :
Citer les auteurs originaux.
Les contributions au projet sont obligatoirement sous la même license.
Le code source complet doit être partagé durant la distribution.
Responsable du bon suivi de la license à la distribution.
Les droits :
Utiliser, modifier, distribuer le logiciel.
Les modifications et les travaux dérivés ne sont pas obligés d'être sous la même license.
Les obligations :
Citer les auteurs originaux.
Les contributions au projet sont par défaut sous la même license.
Clause de non responsabilité, à l'utilisation l'utilisateur accepte tout risque d'utiliser le logiciel.
Les droits :
Utiliser, modifier, distribuer le logiciel.
Concession de brevets détenu par les contributeurs.
Les modifications et les travaux dérivés ne sont pas obligés d'être sous la même license.
Les obligations :
Citer les auteurs originaux.
Les contributions au projet sont par défaut sous la même license.
Clause de non responsabilité, à l'utilisation l'utilisateur accepte tout risque d'utiliser le logiciel.
Apache permet de fonctionner avec d'autres types de licenses.
Idem que GNU Public License.
Différences :
Plus souple sur la possibilité d'utiliser plusieurs licenses comparé à GPL, sur le fait de mixer du code propriétaire et lors de la distribution du code source où il n'est pas nécessaire d'y ajouter tous les dérivés.
Les licences Creative Commons sont généralement utilisées pour les œuvres créatives telles que les écrits, les images, la musique, etc.
Les droits :
Utiliser, modifier, distribuer la ressource (ou le logiciel).
Les obligations :
Citer les auteurs originaux.
Linux ou GNU/Linux est une famille de systèmes d'exploitation Open Source de type Unix fondés sur le noyau Linux créé en 1991.
Très peu adopté pour l'utilisation personnel, c'est dans l'utilisation commercial pour les serveurs ou le système Android que GNU/Linux tire son plus haut taux d'adoption.
GNU/Linux est un pilier de l'Open Source.
Le projet possède une très grande communauté et ne fait que s'agrandir. Par exemple les récents travaux de Valve avec le Steam Deck pour rendre compatible Linux au monde du jeu vidéo.
Linus Benedict Torvalds, né le 28 décembre 1969 à Helsinki en Finlande, est un informaticien américano-finlandais connu notamment pour avoir créé le noyau Linux en 1991 (à 21 ans).
Il continue d'en diriger le développement, étant considéré comme le « dictateur bienveillant à vie » (Benevolent Dictator for Life) de celui-ci. Il a également créé le logiciel de gestion de versions décentralisée Git.
Indisposé par la faible disponibilité du serveur informatique UNIX de l'université d'Helsinki, Linus entreprend le développement d'un noyau de système d'exploitation, qui prendra le nom de « noyau Linux ».
Il était impossible d'utiliser UNIX directement pour des projets personnels car UNIX était détenu par AT&T sous license commercial, il fallait donc payer pour pouvoir l'utiliser.
C'est plus tard que le projet devient un réel système d'exploitation avec la fusion entre GNU et le noyau Linux.
Pour compléter le système d'exploitation, Linus a donc passé Linux en license GNU GPL pour être compatible juridiquement avec le projet GNU.
L'ouverture du code source, l'un des quatre critères correspondant à la notion de logiciel libre, a des avantages théorisés entre autres par Eric Raymond, comme la correction rapide des bugs, et notamment la correction des failles de sécurité. C'est le refus du principe de sécurité par l'obscurité.
Plus de 14,846 contributors visible sur le repository Linux.
Plus de 96 % du premier million de serveurs les plus actifs et les plus performants utilisent Linux.
Des 500 supercomputers les plus puissants dans le monde, deux seulement (fonctionnant sous Unix) font exception à cette règle pour l’année 2019.
De même, utilisé par près de 34 % des sites Web selon les chiffres de W3Techs.com.
Pour moi le projet Linux et ses dérivés ont énormément apporté à la communauté Dev et à l'Open Source. C'est obligatoire d'en parler.
En plus de ça, c'est un classique.
Petit bonus, je vous mets une liste awesome de projets Linux ici.
Présentez un projet Open Source important pour vous par groupe de 2 en 10 minutes avec la trame suivante :
Sujet unique par groupe, liste d'idée à la prochaine slide.
N'hésitez pas si vous avez une autre idée que sur cette liste !
Améliorer un projet que vous utilisez
Apprendre et devenir Senior
Rejoindre une communauté
Développer sa carrière ?
Hightower travaillait dans une petite startup de Portland appelée Monsoon Commerce, au sein de laquelle il a écrit confd, son premier projet open-source.
Il a rejoint CoreOS début 2014, et a commencé à contribuer de manière significative au projet Kubernetes.
Depuis novembre 2015, repéré par Google, il est recruté en tant qu'ingénieur et Developer Advocate dans leur division de cloud computing.
Chaque projet est différent, de même pour sa communauté. Vous devez vous adapter, comprendre les enjeux du projet. Cela est primordiale pour vous permettre de contribuer correctement au projet !
Certaines caractéristiques sont heureusement communes partout, voyons ensemble les éléments standards d'un projet Open Source.
GitHub Explore, Open Source Friday, First Timers Only, CodeTriage, 24 Pull Requests, Up For Grabs, First Contributions, SourceSort, OpenSauced
Attention : vérifiez que le projet Open Source est encore actif via la date des derniers commits.
Chaque projet open source dispose d'une page /contribute qui met en évidence des problèmes faciles à résoudre pour les débutants.
Naviguez vers la page principale du dépôt sur GitHub, et ajoutez /contribute à la fin de l'URL.
(Par exemple https://github.com/facebook/react/contribute).
En règle générale, vous devriez ouvrir une issue pour :
Si vous gérez une issue, commentez-la pour faire savoir que vous vous en occupez avec le lien de la PR en WIP. Pas de duplication d'effort.
Vous pouvez même vous entraîner ici, merci Kent C. Dodds !
Github réalise un énorme travail pour évangéliser l'Open Source à tout type de profil.
Lien vers la documentation Open Source :
Pourquoi faire ce projet ?
Rendre le projet attractif
Guider les contributeurs
Définir un objectif avec une valeur ajoutée :
Réaliser une librairie de notifications. => Réaliser une librairie de notifications utilisable par tous dans le Web (No depencies, JS Vanilla, Framework agnostic, etc.).
Mettre son projet Github en public ne suffit pas.
Un projet Github en public est certes transparent et lisible par tous, mais est protégé par le droit d'auteur.
L'utilisation, la distribution et l'utilisation commerciale est interdite.
La license permet donc de renoncer sur certains droit de la propriété intellectuelle.
Il est possible d'utiliser des outils comme choosealicense.com.
La license par défaut : MIT License (Babel, .NET, and Rails use the MIT License.) le plus simple pour être utilisé comme dépendance pour d'autres projets.
La license pour les grandes entreprises : Apache 2.0 qui permet d'avoir le droit pour une entreprise d'exploiter le code malgré les brevets des contributeurs.
La license pour obliger l'Open Source : GPLv3 qui permet d'éviter à ce que du code privé soit créé depuis du code Open Source.
Il faut répondre aux questions suivantes :
Bonus : Comment puis-je configurer / personnalisé le projet ? quelle est la roadmap ? Peut-on contribuer et où sont les indications pour le faire ? Qui sont les auteurs ? Sous quelle license est le projet ?
Indiquer à votre public comment participer à votre projet :
En plus des détails techniques, c'est l'occasion de communiquer vos attentes en matière de contributions, telles que :
Voici un exemple.
Le but est de permettre à tous de travailler dans de bonne conditions. Pour cela il faut définir des règles, comme un cadre de travail.
Il faut rester simple et court.
Comme pour les licenses, des modèles de Code of Conduct sont connus comme Contributor Covenant qui est déjà utilisé par plus de 40 000 projets.
Pour que chaque nouvelle issue suive le même modèle, ajoutez le dossier ISSUE_TEMPLATE à la racine ou dans un dossier .github à la racine.
Créer un fichier .md contenant les propriétés name, about et labels pour permettre à Github de proposer ce choix à la création d'une nouvelle issue.
Créer un fichier config.yml pour personnaliser le choix avec des liens externes par exemple.
Cela donne le résultat suivant.
Voici le système de labels par défaut de Github.
Mais nous pourrions ajouter les types de labels suivants :
Pour que chaque nouvelle Pull Request suive le même modèle, ajoutez le fichier PULL_REQUEST_TEMPLATE.md à la racine ou dans un dossier .github à la racine.
Cela donne le résultat suivant.
Système de documentation
Workflows et versioning
Architecture, convention de commit et de code du repository
Chaque livrable est un repository comme Nextcloud
Un repository contient chaque livrable comme floating-ui
C'est le concept de Monorepo
Uniformiser
Automatiser
Communiquer
Des conventions pour les commits.
Des linters pour le code.
Via le code
Via le site web
Via un outil
Il est possible d'utiliser plusieurs méthodes à la fois.
Git flow comme le Github Flow ou le Trunk-based
Continuous Integration et/ou Continuous Delivery
Des outils pour le versioning
Choisissez un nom facile à retenir et qui, idéalement, donne une idée de ce que fait le projet.
Il faut aussi vérifier que votre nom n'entre pas en conflit avec d'autres projets et qu'un nom de domaine soit disponible pour votre futur site. (instantdomains.com)
Enfin, n'oubliez pas la communication : les réseaux sociaux, le site internet, votre projet github, votre tone of voice, tout sert votre branding.
Votre projet doit être utilisé par la communauté, pour cela vous devez réfléchir à comment le distribuer :
Et pour notre librairie d'alert ?
Streaming video avec Jitsi
Réservation avec Cal
Création de site et de blog avec Astro
La license et la conformité
Qualité et sécurité du code
Vivant et maintenu
Citer le projet Open Source dans votre documentation ou site internet.
Citer les parties du projet Open Source dans votre code.
Donner ou devenir sponsor régulier du projet.
Build
Unit and Integration Tests
Review & Staging
Gitlab and Github Actions
AWS, Google Cloud, Azure, Heroku, Vercel...
Externaliser son infrastructure
Automatiser et monitorer le déploiement des applications
Infrastructure as code (IaC)
Terraform
Historiquement, l'outil qui avait évangélisé la CI / CD est Gitlab.
Créons notre propre pipeline CI / CD :
name: Node.js CI
on:
push:
branches: ['main']
pull_request:
branches: ['main']
jobs:
build:
runs-on:
ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install
run: npm ci --cache .npm --prefer-offline
- name: Validate
run: npm run lint
- name: Test
run: npm test
- name: Build for production
run: npm run build
- uses: actions/upload-artifact@master
with:
name: web
path: ./dist
Pour débuter, nous utilisons l'example NodeJS sur Github Actions.
build-image:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v3
- uses: actions/download-artifact@master
with:
name: web
path: ./dist
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: valentinmontagne/nginx-web-example:latest
# ${{ github.sha }}
deploy-image:
runs-on: ubuntu-latest
needs: build-image
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: eu-west-3
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v1
with:
cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }}
- name: Terraform Init
run: terraform init
- name: Terraform Format
run: terraform fmt -check
- name: Terraform Plan
run: terraform plan -input=false
- name: Terraform Apply
run: terraform apply -auto-approve -input=false
# Add condition here to avoid to deploy when checking a PR.
TIPS : ajouter des hooks pour que chaque commit soit propre.
N'hésitez pas à utiliser Docker pour lancer sur votre machine l'outil Open Source.