Open source
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.
Valentin MONTAGNE

Avez-vous participé à un projet Open Source ?
1
Les enjeux et la culture de l’open source, les différentes licences de l’open source
3
Publication et intégration d’un projet via un gestionnaire de paquets
5
Déploiement d’applications open source avec Docker
2
Panorama de solutions open source
4
Participation à un projet open source
Déroulement du cours
Chaque séance débutera par la présentation d'un concept et de l'intérêt d'utilisation de celui-ci.
1
Théorie
Après la théorie, nous verrons alors la pratique en réalisant des exercices.
2
Pratique
En fin de chaque séance, nous aurons un temps pour poser des questions sur les exercices en fin de module.
3
Préparation
Déroulement des journées
Les enjeux et la culture de l’open source
1.
Qu'est-ce que la culture libre ?
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
Les principes de la culture libre
- Accès libre : Les œuvres doivent être accessibles à tous, sans barrières financières ou techniques.
- Partage et collaboration : Les utilisateurs sont encouragés à partager les œuvres et à collaborer pour les améliorer ou les adapter.
- Réutilisation et modification : Les œuvres doivent pouvoir être modifiées, adaptées ou transformées pour créer de nouvelles œuvres.
- Reconnaissance de l'auteur : Les créateurs originaux doivent être crédités, même si leur œuvre est utilisée ou modifiée.
Qu'est-ce que l'Open Source ?
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.
Les différences avec le logiciel libre ?
Le logiciel libre est défini par les 4 libertés fondamentales, proposées par la Free Software Foundation (FSF) :
- Liberté d'exécuter le programme pour n'importe quel usage.
- Liberté d'étudier le fonctionnement du programme et de le modifier (nécessite l'accès au code source).
- Liberté de redistribuer des copies.
- Liberté de distribuer des versions modifiées pour en faire profiter la communauté.
Beaucoup de projets sont à la fois libres et open source (par exemple, Linux ou Firefox).
Les débuts de l'Open Source
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é
Pourquoi réaliser un projet Open Source ?



L'Open Source comme stratégie d'entreprise ?
Open Source
Frontend-Only
Système de communauté
(Plugins)



L'Open Source financièrement viable ?



Les responsabilités du mainteneur
Qualité du code et versioning
Merge requests
Roadmap



Les différentes licences de l’open source
1.
Différences entre Copyright et Copyleft
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é |
Open Source Initiative
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.

La famille BSD
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 :
- Créditez les auteurs originaux.
- Ne pas utiliser le nom des contributeurs pour promouvoir des œuvres dérivées sans autorisation.
- Pas de viralité : Le code sous licence BSD peut être utilisé dans des projets fermés, sans obligation de publier les modifications ou les dérivés.
Exemple : Licence BSD 2 ou BSD 3 avec FreeBSD, OpenBSD, libcurl.
La famille GNU
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 :
- Toute œuvre dérivée doit être distribuée sous la même licence (GNU GPL). Le code sous GPL ne peut pas être intégré dans des logiciels propriétaires sans violer la licence.
- Viralité : L'utilisation du code sous GPL "contamine" les projets dérivés, qui doivent respecter les mêmes principes avec obligation de fournir le code source des œuvres dérivées.
Exemple : Licence GNU/GPL-2.0 Linux ou encore WordPress.
La license GNU General Public
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.
La license MIT
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.
La license Apache
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.
La license Mozilla Public
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.
La license Creative Commons
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.
Des questions ?
Panorama de solutions open source
2.
Linux
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.

Linux
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.

Créateur
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.

Le but du projet
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.
Pourquoi en faire un projet Open Source ?
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é.
Les chiffres clés
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.
Business model
- Vente de contrats d'assistance pour un support de qualité.
- Services de conseil et services professionnels liés au logiciel.
- Occasionnellement, mettre en œuvre des fonctionnalités spécifiques du logiciel à la demande et se faire payer pour cela.
- D'autres entreprises, comme IBM avec Linux, utilisent les logiciels "gratuits" pour vendre d'autres biens et services, comme le matériel et l'équipement IBM.
- Un "sponsor d'entreprise" apparaît pour assurer la maintenance et la gestion du logiciel
Pourquoi choisir Linux ?
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ésentations
Présentez un projet Open Source important pour vous par groupe de 2 en 10 minutes avec la trame suivante :
- Créateur
- Historique du projet
- Pourquoi utiliser ce projet Open Source ?
- Qu'est-ce que ce projet Open Source ?
- Exemple ou démo.
- Statistiques du projet (Stars, Forks, Taille de la communauté)
- Type de license
- Business model
- Etc...
Sujet unique par groupe, liste d'idée à la prochaine slide.
Liste d'idée
- Backend : Prisma, Appwrite, Supabase, Insomnia...
- Analytics / Déploiement : OpenReplay, Unleash, Sentry...
- CMS : Strapi, Wordpress, Discourse...
- DevOps : Docker, Terraform ou OpenTofu, Kubernetes...
- Framework : Flutter, Astro, Qwik, Svelte, etc...
- Cloud : Nextcloud, Cloudron...
- Outils : Cal, Jitsi, Visual Studio Code...
- Game engine : Godot Engine
N'hésitez pas si vous avez une autre idée que sur cette liste !
Participation à un projet open source
3.
Pourquoi contribuer à l'Open Source ?

Améliorer un projet que vous utilisez



Apprendre et devenir Senior
Rejoindre une communauté
Développer sa carrière ?
Le cas
Kelsey Hightower

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.
Tout le monde peut contribuer





- Organiser les évènements de la communauté.
- Apporter son expertise Design ou UX.
- Rédiger pour le projet : de la documentation à des tutoriels ou newsletter.
- Apporter son expertise de développeur ou DevOps.
- Aider la communauté et review le travail effectué.
Comment s'orienter dans un projet Open Source ?
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.
Les rôles d'un projet Open Source





- Author - Personne ou l'organisation à l'origine du projet.
- Owner - Propriétaire administratif de l'organisation/du dépôt.
- Maintainers - Responsables de la vision et de la gestion des aspects organisationnels du projet.
- Contributors - Tous ceux qui ont contribué au projet.
- Membres de la communauté - Les utilisateurs.
Les types de documentation du projet Open Source





- LICENSE - Obligatoire pour être un projet Open Source.
- README - Pourquoi le projet est utile et comment commencer.
- CONTRIBUTING - Explique comment contribuer au projet.
- CODE_OF_CONDUCT - Fixe des règles de base pour le comportement des membres.
- Other - Des tutoriels, des guides ou des politiques.
Les outils d'un projet Open Source




Comment trouver 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.
Comment trouver les issues d'un projet Open Source ?
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).
Gérer ou ouvrir une issue
En règle générale, vous devriez ouvrir une issue pour :
- Signaler une erreur que vous ne pouvez pas résoudre vous-même
- Discuter d'un sujet ou d'une idée de haut niveau (par exemple, la communauté, la vision ou les politiques)
- Proposer une nouvelle fonctionnalité ou une autre idée de projet
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.
Créer votre Pull Request
- Clonez le dépôt localement et rester à jour et pour réduire les risques de conflits lorsque vous soumettrez votre PR.
- Créez une branche pour vos modifications.
- Faites référence à tous les problèmes pertinents ou à l'issue dans votre PR (par exemple, "Closes #37.")
- Incluez des captures d'écran de l'avant et de l'après*.
- Testez vos changements avec les tests existants s'ils existent et créez-en de nouveaux si nécessaire.
- Respectez les conventions du projet (Coding style, commits, etc).
Vous pouvez même vous entraîner ici, merci Kent C. Dodds !
Github et l'Open Source
Github réalise un énorme travail pour évangéliser l'Open Source à tout type de profil.
Lien vers la documentation Open Source :
Publication d’un projet Open Source
4.
Définir l'objectif du projet

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.).
Exemple : Créer une librairie d'alert framework-agnostic
Rappel : les documentations du projet Open Source




- LICENSE - Obligatoire pour être un projet Open Source.
- README - Pourquoi le projet est utile et comment commencer.
- CONTRIBUTING - Explique comment contribuer au projet.
- CODE_OF_CONDUCT - Fixe des règles de base pour le comportement des membres.
Pourquoi faut-il une license ?
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.
Choisir la license
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.
Écrire un bon README
Il faut répondre aux questions suivantes :
- Que fait ce projet ?
- Pourquoi ce projet est-il utile ?
- Comment puis-je l'installer ?
- Comment puis-je l'utiliser ?
- Où puis-je obtenir de l'aide supplémentaire, si j'en ai besoin ?
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 ?
Écrire un bon CONTRIBUTING
Indiquer à votre public comment participer à votre projet :
- Comment ajouter une issue ou signaler un bug (Modèle pour les issues et bugs)
- Comment suggérer une nouvelle fonctionnalité
- Comment configurer l'environnement de Dev et lancer les tests.
En plus des détails techniques, c'est l'occasion de communiquer vos attentes en matière de contributions, telles que :
- Les types de contributions que vous recherchez
- Votre Roadmap et Vision
- La manière dont les contributeurs vous contactent.
Voici un exemple.
Écrire un CODE_OF_CONDUCT
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.
Définir le système d'issue
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.
Définir le système d'issue - 2
Voici le système de labels par défaut de Github.
Mais nous pourrions ajouter les types de labels suivants :
- Par niveau de priorité (low, medium, high ou avec la méthode MOSCOW)
- Par feature (feature-messenger, feature-settings, etc.)
- Par version (v1.0.5, v1.2.4, etc)
- Par plateforme (Linux, Macos, Windows, etc.)
Définir le format des PRs
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.
Et pour la technique ?

Système de documentation


Workflows et versioning
Architecture, convention de commit et de code du repository
Choisir la bonne architecture de repository
Chaque livrable est un repository comme Nextcloud

Un repository contient chaque livrable comme floating-ui

C'est le concept de Monorepo
Choisir une convention de commit et de code

Uniformiser


Automatiser
Communiquer
Des conventions pour les commits.
Des linters pour le code.
Choisir la méthode de documentation

Via le code


Via le site web
Via un outil
Il est possible d'utiliser plusieurs méthodes à la fois.
Définir le workflow et le versioning

Git flow comme le Github Flow ou le Trunk-based


Continuous Integration et/ou Continuous Delivery
Des outils pour le versioning
Naming et Branding
Choisissez un nom facile à retenir et qui, idéalement, donne une idée de ce que fait le projet.
- Sentry, un outil de monitoring pour les apps pour centraliser les erreurs.
- Thin, un serveur Ruby simple et rapide.
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.
Définir la méthode de distribution
Votre projet doit être utilisé par la communauté, pour cela vous devez réfléchir à comment le distribuer :
- Pour une librairie JS on privilégie NPM.
- Pour un logiciel on privilégie le projet github et le site internet.
- Pour un SaaS on privilégie une web app en ligne.
Et pour notre librairie d'alert ?
Intégration d’un projet open source
5.
Ne pas réinventer la roue.

Streaming video avec Jitsi


Réservation avec Cal
Création de site et de blog avec Astro
Comment intégrer un projet Open Source à mon projet ?

La license et la conformité


Qualité et sécurité du code
Vivant et maintenu
Les bonnes pratiques

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.
Intégrer un projet Open Source à son architecture

Déploiement d’applications open source avec Docker
6.
CI / CD
Build
Unit and Integration Tests
Review & Staging
Gitlab and Github Actions
Le Workflow en CI / CD

Cloud as a service
AWS, Google Cloud, Azure, Heroku, Vercel...
Externaliser son infrastructure
Automatiser et monitorer le déploiement des applications
Infrastructure as code (IaC)
Terraform
Concentrons-nous sur Github Actions
Historiquement, l'outil qui avait évangélisé la CI / CD est Gitlab.
Créons notre propre pipeline CI / CD :

Validation et tests
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.
Pyramide des tests

Build de l'image Docker
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 }}
Déployer l'image Docker avec Terraform sur un Cloud Provider
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.
Exercice : Tester les projets Open source qui vous intéresse.
N'hésitez pas à utiliser Docker pour lancer sur votre machine l'outil Open Source.
N'hésitez pas à me donner votre avis.
Merci!
Open Source
By Valentin MONTAGNE
Open Source
- 62