🌘 Chapitre 1 : Introduction
Cette présentation a été donnée en entreprise en 2022, et je l’offre à la communauté parce que son contenu est toujours très d’actualité.
Le contexte de cette présentation, c’est que la science des données, ou analytique avancée, n’est pas un développement informatique classique.

🌘 Le logiciel libre
La principale raison qui a motivé l’utilisation du logiciel libre en science des données est l’accélération du développement de notre domaine de connaissances.

Le logiciel libre permet de :
-
Diminuer des coûts de licence
-
Éviter le blocage fournisseur (vendor lock-in)
-
Développer des communautés de pratique
-
Prendre de l’avance sur le secteur académique dans la formalisation des connaissances.
-
Économiser sur les coûts de formation
-
Réduire la dette technique
🌘 Le logiciel libre permet aussi :
-
La reproductibilité des résultats
-
Formats de données ouverts
-
Partage de code, de fonctions et de documents (workbooks)
-
La transparence auprès des parties prenantes
-
Rend les processus plus faciles à auditer et à expliquer
-
La correction rapide des bogues et des vulnérabilités dans le code
🌘 C’est magique !

🌘 Pas si vite !

GitHub, ce n’est pas Walt Disney ! Le logiciel libre est un commun numérique généralement développé par des bénévoles.
Pour bien l’utiliser, c’est important de connaître :
- les origines
- les différentes licences
- les enjeux
- légaux
- éthiques
- les risques opérationnels
- sécurité
- pérennité
C’est ce qu’on va voir ensemble !
🌘 La reproductibilité
Avant l’utilisation de l’analytique avancée, même en utilisant des logiciels privatifs, les résultats étaient reproductibles, car on utilisait des règles statiques. La fiabilité et la reproductibilité étaient les caractéristiques recherchées pour les logiciels.

En utilisant la rétro-ingénierie, on pouvait déduire ces règles, même sans avoir accès au code source. Les systèmes étant complexes et peu performants par rapport à aujourd’hui, les règles étaient souvent de simples régressions.

Aujourd’hui, avec l’apprentissage automatique, il ne suffit plus de pouvoir obtenir les règles pour s’assurer de la reproductibilité des résultats. Il faut être capable de reproduire le modèle d’apprentissage. Il nous faut donc avoir les données historiques ainsi que le logiciel qui a permis de créer le modèle.

De plus en plus, les modèles se complexifient et sont personnalisés pour chaque jeu de données. On ne peut donc plus compter sur un progiciel pour construire des modèles. On utilise un langage de programmation.

Donc, pour pouvoir reproduire la création d’un modèle, on considère maintenant qu’il nous faut aussi le code en plus des données. Ce qui nous amène à considérer le logiciel libre, autant que les données, comme deux éléments à l’avant-plan de la science des données.
🌘 Les données ouvertes
Le web regorge de données pouvant être utilisées pour enrichir nos analyses. Cependant, chaque source de données présente différents contextes d’utilisation et des niveaux de permission variées.

-
Les mêmes considérations que nous avons vues précédemment pour le logiciel libre s’appliquent aussi pour les données ouvertes.
-
De plus, on ajoute la notion d’usage commercial et d’usage à des fins de recherche (échantillonnage).


🌘 Chapitre 2 : Historique
Le partage de connaissance est essentiel pour éviter la création de monopoles. Le brevet est un monopole octroyé par l’État à une entreprise qui lui donne potentiellement un pouvoir démesuré et prévient l’innovation. L’entreprise Ford a été une des premières à partager son portefeuille de brevets à ses concurrents sans compensation monétaire ni poursuites.


🌘 Le logiciel libre et la Free Software Foundation
Au début de l’informatique, le code est toujours distribué avec les systèmes informatiques. Jusqu’aux années 1970, la majorité des logiciels sont partagés dans le domaine public par les entreprises et les universités. À l’époque, le coût des logiciels représente une petite fraction du coût du matériel.


Dès les années 1970 et 1980, les entreprises qui étaient davantage investies dans le développement de matériel informatique se sont mises à s’approprier le code, à le compiler et à distribuer des logiciels propriétaires. Les utilisateurs des ordinateurs devenaient dépendants du fournisseur pour améliorer le logiciel. De plus, il n’y avait pas de mises à jour ou de correctifs. Tu devais acheter la nouvelle version en espérant que ton bogue était réparé. Chaque logiciel était compilé seulement pour ton modèle d’ordinateur. Nouvel ordinateur = nouvelle licence du logiciel.
Richard M. Stallman réalise qu’il devient impossible de déboguer ou améliorer les logiciels qu’il utilise dans son laboratoire.

Il fonde alors le projet GNU en 1983, afin de créer un système d’exploitation libre et une suite complète de logiciels permettant de développer et de compiler de nouveaux logiciels.

Afin d’offrir ces logiciels librement, il crée en 1985 la Free Software Foundation pour vendre ces logiciels et distribuer leur code. En 1989, accompagnée d’Eben Moglen, un avocat spécialisé en droit du logiciel, il rédige la licence publique générale GNU (GPL).

🌘 Les distributions
Avec Internet (et non le web, ça n’existe pas encore), le modèle du libre se fait connaître. La compilation de compilateurs GCC et le débogueur GDB sont devenus des standards de l’industrie. Une entreprise, Cygnus Software, est créée pour les supporter en entreprise. Cette entreprise deviendra Red Hat, rachetée par IBM en 2019.
En 1991, Linus Torvalds publie le noyau Linux, alors un projet étudiant, sous la licence GPL.

Dans les années suivantes, des distributions de logiciels se créent autour du noyau Linux et des logiciels GNU. On les appelle maintenant GNU/Linux. Aujourd’hui, ces distributions servent à faire fonctionner la grande majorité des serveurs connectés à Internet. Une des différences entre les distributions est au niveau du choix des licences des logiciels qu’elles choisissent d’inclure.
🌘 Le mouvement Open Source
La publication de The Cathedral and the Bazaar par Eric S. Raymond a mené à la création de la Mozilla Foundation et la libération du code de Netscape (devenu Mozilla Firefox) sur la Mozilla Public Licence.

Le mouvement Open Source est davantage autour de l’agilité et de règles de collaboration.
-
Création du terme Open Source par Christine Peterson, une spécialiste de la veille technologique.
-
Création de l’Open Source Initiative (OSI).
-
L’OSI a introduit la notion de licences permissives, beaucoup plus simples que les licences GNU, qui facilitent l’utilisation de composants libres à l’intérieur de logiciels privatifs.
-
La culture Open Source a mené à l’utilisation de gestionnaires de code source, tel que git, et à l’utilisation de tableaux de gestion de produit inspirés de la méthode Kanban.
-
Le fait de reprendre le travail existant est davantage considéré dans une perspective de productivité et pas nécessairement dans la création de communs. D’où le rejet des licences de type CopyLeft.
Il y a un clivage idéologique entre certains membres de la FSF et de l’OSI. L’important, c’est ici les contributions en terme d’uniformisation et de compatibilité des licences.
🌘 La fondation du mouvement Creative Commons

🌘 Le droit d’auteur
Le droit d’auteur sert à empêcher de reproduire son oeuvre sans autorisation. Il couvre les oeuvres de nature littéraire, dramatique, musicale et artistique. Au Canada, le code informatique est considéré comme une oeuvre littéraire.

🌘 Le domaine public
Au Canada, une oeuvre appartient au domaine public de trois façons :
-
Elle a été produite par un gouvernement municipal
-
Nous sommes plus de 50 ans après la mort du détenteur du droit d’auteur
-
C’est mentionné explicitement par l’auteur

🌘 Création des licences Creative Commons
Le droit d’auteur est très restrictif. Le domaine public nécessite d’abandonner toutes les provisions du droit d’auteur. L’avocat américain Lawrence Lessig propose en 2001 de créer des licences qui permettent de diviser le droit d’auteur en composantes. C’est la naissance du concept de Creative Commons.
🌘 Le Web sémantique (3.0) de Tim Berners Lee
Le web sémantique est une version du web où toutes les données sont représentées sous la forme de triplets formant des relations. Ces relations sont représentées par des URI qui sont structurées sous la forme d’ontologies. Les ontologies permettent de mettre les objets dans un contexte et d’effectuer du raisonnement logique sur eux.
Dans le domaine des données ouvertes, on classifie le niveau d’ouverture des données sur une échelle de 1 à 5.
-
Le premier niveau est que les données soient publiées sur le web avec une licence de données ouverte.
-
Le cinquième représente des données interreliées au format RDF et utilisant des ontologies au format OWL.

🌘 Chapitre 3 : Les types de licences
🌘 Qu’est-ce qu’une licence ?
Une licence est un contrat qui définit comment tous les utilisateurs d’un logiciel, à l’exception de son créateur, peuvent l’utiliser, le partager, le modifier et partager les modifications. Elle peut aussi inclure des restrictions sur le nombre d’utilisateurs, sur le matériel où le logiciel peut être exécuté et sur le type d’usage qui peut en être fait. Certaines licences peuvent aussi interdire l’utilisation dans certains contextes, pour certaines entreprises, ou encore interdire la revente du logiciel sous la forme d’un service. Les licences sont généralement recensées via le système Software Package Data Exchange (SPDX).
🌘 Qu’est-ce qu’un logiciel libre ?
On définit un logiciel comme étant libre lorsqu’il respecte les quatre libertés suivantes :
-
la liberté d’exécuter le programme, pour tous les usages;
-
la liberté d’étudier le fonctionnement du programme et de l’adapter à ses besoins;
-
la liberté de redistribuer des copies du programme (ce qui implique la possibilité aussi bien de donner que de vendre des copies);
-
la liberté d’améliorer le programme et de distribuer ces améliorations au public, pour en faire profiter toute la communauté.
🌘 Licences avec réciprocité (CopyLeft)

Aussi appelées virales ou héréditaires, elles ne peuvent pas être remplacées par des licences plus permissives. Elles permettent de garantir que les futures versions et embranchements du logiciel seront aussi des logiciels libres.

-
Réciprocité forte : Comme la licence GPL-3.0-or-later. Il n’est pas possible de changer cette licence pour une moins restrictive. Le code ne peut être utilisé conjointement qu’avec d’autres logiciels utilisant des licences compatibles (dites “GPL-Compatible”).
-
Réciprocité faible : La licence LGPL (Library GPL) a été créée pour les librairies de fonctions compilées. Elle permet de lier dynamiquement un programme à du code qui n’est pas sous licence LGPL. Cependant, toute modification au code de ce programme doit aussi être publié sous licence LGPL.
-
Exceptions :
-
OpenSSL Exception : Permet de lier des logiciels avec la licence GPLv3 à la librairie OpenSSL qui utilise une ancienne licence non compatible.
-
Classpath Exception : Permet de compiler des librairies Java avec des logiciels sous licence GPL.
-
🌘 Licences permissives
Il existe trois familles principales :
🌘 Pour les logiciels-services (SaaS)
Les licences “réseau” permettent aux utilisateurs d’un logiciel à travers un réseau d’avoir accès au code source.
🌘 Les licences du Québec
Développées par le Gouvernement du Québec, elles sont compatibles en amont avec plusieurs licences populaires mais sont “absorbantes” car les actions en justice doivent avoir lieu au Québec.
-
Réciprocité forte (LiLiQ-Rplus-1.1)
-
Réciprocité (LiLiQ-R-1.1)
-
Permissive (LiLiQ-P-1.1)
🌘 Licences non libres
De plus en plus de groupes critiquent l’utilisation des licences libres, menant à des licences plus restrictives commercialement.
-
Le cas de Elasticsearch : La licence Elastic interdit la commercialisation du logiciel sans valeur ajoutée.
-
Le cas de n8n : La licence Sustainable Use License interdit la revente du logiciel, mais n’en empêche pas l’utilisation commerciale.
🌘 Généralités
-
Mythe du non-commercial : Il n’existe aucun logiciel libre qui ne peut pas être utilisé à des fins commerciales.
-
Vente du logiciel libre : Un logiciel libre peut être vendu.
-
Code disponible sur demande : Le code n’a pas à être distribué avec chaque copie, mais doit être fourni sur demande.
-
Droits des utilisateurs en entreprise : Les utilisateurs ont le droit d’accéder au code source d’un logiciel libre exécuté sur leur poste. Pour un accès réseau, le logiciel doit être sous une licence réseau (AGPL, EUPL).
-
Garantie : Les logiciels libres ne viennent avec aucune garantie.
🌘 Oeuvres littéraires et artistiques
Pourquoi s’y intéresser en science des données ?
-
La documentation et les exemples sont des œuvres littéraires.
-
Les rapports et les graphiques produits sont des œuvres littéraires et artistiques.
🌘 Creative Commons (CC)
Les licences CC cèdent certains droits à la communauté via des composantes :

-
Attribution (BY) : Citer l’auteur.
-
Aucun usage commercial (NC) : Ne pas utiliser dans une activité lucrative.
-
Aucune œuvre dérivée (ND) : Ne pas intégrer dans une autre œuvre.
-
Partage à l’identique (SA) : Rediffuser les œuvres dérivées sous la même licence.
Ces composantes forment 6 licences, plus la CC0 (domaine public).

Si on combine des œuvres disponibles sur plus d’une licence différente, il faut regarder leur compatibilité et choisir la licence la plus restrictive parmi celles-ci.

Enjeux avec les licences CC :
-
La composante NC rend une œuvre non-libre.
-
La définition de NC est floue.
-
Les licences CC ne sont pas conçues pour le code source (pas de vocabulaire spécifique, pas de gestion des brevets).
-
CC-BY-SA est compatible de manière unidirectionnelle avec GPLv3.
-
CC0 est compatible avec toutes les licences GPL.
🌘 Free Documentation Licence (FDL)
Conçue pour la documentation logicielle, elle est similaire à la GPL mais avec des sections immuables, ce qui pose problème. C’est une licence à éviter, remplacée par CC-BY-SA-4.0.
🌘 Licence Art Libre (LAL)
Permet de partager du contenu artistique sous des conditions similaires à la GPL. Elle est équivalente et compatible avec CC-BY-SA-4.0.
🌘 Domaine public
Permet d’utiliser le contenu sans condition. Au Canada, cela inclut les œuvres dont le droit d’auteur a expiré, les œuvres gouvernementales après un certain temps, et celles explicitement placées dans le domaine public.
🌘 Matériel (Hardware)
-
TAPR OHL : Similaire à la GPL, sépare la documentation (plans) du produit physique.
-
CERN OHL : Une autre licence spécialisée pour le matériel.
-
De plus en plus, CC-BY-SA-4.0 remplace ces licences pour le matériel.
🌘 Chapitre 4 : Les logiciels de sciences des données
Un langage de programmation ne peut pas être couvert par le droit d’auteur. Cependant, les logiciels qui compilent ou interprètent les langages sont couverts et peuvent être libres ou non.
🌘 Logiciels privatifs
Exemples : MATLAB, Oracle PL/SQL, SAS, SPSS, STATA, Wolfram Mathematica.
Considérations légales :
-
Procès SAS Institute Inc v World Programming Ltd : La Cour de justice de l’UE a statué que la protection du droit d’auteur ne couvre pas la fonctionnalité, le langage de programmation et le format des fichiers de données.
-
Google LLC v. Oracle America, Inc. : La Cour Suprême des États-Unis a conclu que Google faisait un usage légitime de l’API de Java en la réimplémentant.
Les programmes écrits pour un outil privatif (ex: SAS, Excel VBA) peuvent être publiés sous des licences libres.
🌘 Les API


🌘 Le langage R
-
Le logiciel R a une licence GPLv2 (réciprocité forte).
-
La majorité des paquetages sur CRAN utilisent la licence GPL.

- Il est recommandé de créer des paquetages séparés pour les données (sous licence CC) et pour le code.
RStudio : RStudio et Shiny Server sont publiés sous licence AGPL. Cela signifie que toute personne y accédant (même via une page web) peut demander le code source de ces logiciels, mais pas celui de votre application.
🌘 Le langage Python
Les paquetages sur PyPI ont une distribution de licences variée, avec une prédominance des licences permissives.

🌘 Le langage Perl

L’implémentation principale utilise l’Artistic License (permissive), souvent utilisée conjointement avec la GPL pour la compatibilité.
🌘 Les formats de données


-
Les formats texte (CSV, JSON, XML, YAML) peuvent être considérés comme du domaine public.
-
Les formats binaires peuvent faire l’objet de brevets. Le détenteur d’un brevet sur un format peut contrôler l’accès aux données, mais pas le contenu des fichiers.
-
Certains formats binaires ont des librairies de manipulation libres (ex: Apache Parquet, Apache Arrow).
-
La rétro-ingénierie pour l’interopérabilité est généralement acceptée.
🌘 Les double-licences
Souvent, un logiciel a :
-
Une version “communauté” sous licence libre.
-
Une version “entreprise” sous licence privative avec support, fonctionnalités avancées, etc.
🌘 Combiner les licences
-
Format SPDX : Un format standardisé pour nommer les licences afin d’éviter les ambiguïtés.
-
Compatibilité : Il faut respecter la licence la plus restrictive lors de la combinaison de code. On ne peut pas choisir une licence permissive si on inclut du code sous licence avec réciprocité.

- Outil d’aide : choosealicense.com
🌘 Contribuer à la communauté
-
Choisir une licence : C’est crucial, sinon le droit d’auteur par défaut s’applique. Ne créez pas de nouvelles licences (“Vanity Licence”).
-
Stack Exchange : Le contenu est sous CC-BY-SA-4.0. Pour le code, il est recommandé d’utiliser la GPLv3.

- Contrat de licence de contributeur (CLA) : Une stratégie pour contrôler les contributions et clarifier les droits d’auteur.

- Cadres normatifs : Des guides publiés par des organisations (ex: Gouvernement du Canada) pour la publication de code source libre.
🌘 Chapitre 5 : La manipulation des données ouvertes
🌘 Données et droit d’auteur
L’élément de donnée en soi n’est pas soumis au droit d’auteur, c’est le contenant (la mise en forme, le tableau) qui l’est. Une donnée ouverte doit respecter la vie privée, la sécurité publique, les contrats et les lois.
🌘 Les licences de données ouvertes

-
La plupart sont publiées sous Creative Commons ou Open Database License (ODBL).
-
L’ODBL permet l’utilisation de DRM à condition de publier aussi une version sans.
-
Certains gouvernements ont leurs propres licences (ex: UK Open Government Licence, Licence du gouvernement ouvert – Canada).
🌘 L’utilisation de corpus d’entraînement de modèles

C’est un sujet débattu (ex: DALL·E-2, GPT-3, GitHub Copilot).
La voie la plus sûre :
-
Respecter la licence la plus restrictive du jeu de données.
-
Publier le modèle résultant et le code sous des licences compatibles.
🌘 Le web sémantique

Un réseau de jeux de données ouvertes interreliées. Les données y sont généralement couvertes par l’Open Database License.
🌘 Le web scraping (moissonnage du web)

Technique d’extraction de données depuis le code HTML. Son statut légal est ambigu.
- LinkedIn et hiQ Labs : Un jugement aux États-Unis a reconnu que le web scraping avait des assises légales, mais sans statuer sur l’utilisation des données.

- Recommandation : Faire attention. Demander la permission, ou l’utiliser uniquement à des fins de R&D sur un échantillon raisonnable.
🌘 Chapitre 6 : L’éthique dans le développement du logiciel libre
🌘 D’un modèle d’interdiction à un modèle de consentement


Le modèle des licences privatives est basé sur l’interdiction. Les licences libres passent à un modèle basé sur le consentement, favorisant le dialogue et la collaboration.
🌘 Le logiciel et l’économie circulaire


-
La production de logiciels a un coût humain et économique. Le logiciel libre permet de mutualiser les efforts.
-
Le logiciel privatif alimente l’obsolescence programmée et la dépendance (vendor lock-in).
-
Partager son code devient un moyen de créer de la “coopétition”.
🌘 Libérer son “vieux” code

Au lieu de le jeter, du code devenu obsolète pour une entreprise peut être cédé à des fondations (Apache, FSF, etc.) pour qu’il soit utile à d’autres.
🌘 Développer avec la communauté

-
Créer des projets en logiciel libre : Une opportunité de visibilité pour la clientèle et la marque employeur.
-
Contribuer à des projets existants : L’entreprise dépense moins d’énergie à réinventer la roue et devient un acteur de l’économie des communs numériques.
🌘 Le mouvement Open Source et les enjeux d’accessibilité, d’équité, de diversité et d’inclusion (AEDI)

-
Les communautés méritocratiques ont parfois développé une culture toxique. La communauté du libre ne comptait que 6% de femmes en 2019, selon Mozilla.
-
Il est important de mettre en place des codes de conduite et de contribution pour favoriser un environnement inclusif. Le travail de Coraline Ada Ehmke avec le Contributor Covenant est une référence en la matière.
-
Les meilleures avancées ne se comptent pas seulement en lignes de code, mais aussi à la capacité d’inclusion et à la place offerte à la diversité.
🌘 Conclusion et Ressources
🌘 Merci !

L’objectif de cette présentation est de vous encourager à utiliser et à participer au développement du logiciel libre. C’est une opportunité naissante au Québec, car peu de grandes entreprises se sont lancées dans l’aventure. Le risque d’enjeux légaux est faible.
🌘 Quelques ressources
🌘 Sources des images
🌘 Section 1
-
“Day 4 - Magic Kingdom” by Loimere is licensed under CC BY 2.0.
-
“Acceleration !” by Nick-K (Nikos Koutoulas) is licensed under CC BY 2.0.
-
“REC IV Week 5 Solution by Bill Ward” by Bill Ward’s Brickpile is licensed under CC BY 2.0.
-
“Software !” by jackol is licensed under CC BY 2.0.
-
“SpaceCube_15” by NASA Goddard Photo and Video is licensed under CC BY 2.0.
-
“Getting ready to re establish the excavation grid on Block 6 in Historic Washington” by Farther Along is licensed under CC BY 2.0.
-
“access granted” by turner burns is licensed under CC BY 2.0.
-
“Centre commercial de la Potsdamer Platz” by dalbera is licensed under CC BY 2.0.
-
“ ‘dissonance cognitive, rappelez vous du futur, obsolescence déprogrammée, fabrication du consentement’ Paris, rue Denoyer, 2014” by Itmostt is licensed under CC BY 2.0.
🌘 Section 2
-
“Copyright, Course Materials and YOU !” by giulia.forsythe is marked with CC0 1.0.
-
“Library” by camera_phone_lomo is marked with CC BY 2.0.
-
“Engine” by Accretion Disc is marked with CC BY 2.0.
-
“Punch card” by catmachine is marked with CC BY 2.0.
-
“Sperry Univac 90/30” by Marcin Wichary is marked with CC BY 2.0.
-
“Richard Stallman, au congrès LibrePlanet 2019” par Ruben Rodriguez marqué avec la licence CC BY 4.0.
-
“ GNU coreutils basics” by Nguyen Vu Hung (vuhung) is licensed under CC BY 2.0.
-
“GPLv3 logo. This is the official license logo of the GNU General Public License version 3.” Image dans le domaine public. https://www.gnu.org/graphics/license-logos.html.
-
Colin Viebrock — The Open Source Initiative, https://opensource.org/logo-usage-guidelines.
🌘 Section 3
-
“Creative Commons license spectrum” This file is licensed under the Creative Commons Attribution 4.0 International license.
-
“Mail art, Copyleft by Manfred Stirnemann” by tomislavmedak is licensed under CC BY 2.0.
-
“Steve Ballmer på CES 2010” by Microsoft Sweden is licensed under CC BY 2.0.
🌘 Section 4
-
“Over 10% of Python Packages on PyPI are Distributed Without Any License”, https://snyk.io/blog/over-10-of-python-packages-on-pypi-are-distributed-without-any-license/
-
“ORACLE” by Peter Kaminski is licensed under CC BY 2.0.
-
“Patwardhan, Nathan. Programming with Perl Modules / N. Patwardhan, C. Irving. – Sebastopol : O’Reilly & Associates, Inc., 1997. – 277 p.” by Biblioteca Centrala Chisinau is licensed under CC BY 2.0.
-
“Database” by Nanaki is licensed under CC BY 2.0.
-
Apache Parquet File format https://github.com/apache/parquet-format - Apache-2.0.
-
“Stack Exchange stickers” by gabofr is licensed under CC BY 2.0.
🌘 Section 5
-
Open Knowledge Foundation logo — https://okfn.org/ - CC BY 4.0.
-
“State of the Linked Open Data (LOD) Cloud in September 2011” by dullhunk is licensed under CC BY 2.0.
-
“Grader Scraping Ice on Mammoth to Norris Road (image #8072)” by YellowstoneNPS is marked with Public Domain Mark 1.0.
🌘 Section 6
-
“Consent is Sexy” by ctrouper is licensed under CC BY 2.0.
-
“europe infinite copyright” by Mataparda is licensed under CC BY 2.0.
-
Photo by Nareeta Martin on Unsplash https://unsplash.com/photos/FoG7PKNYjpM.
-
Photo by John Cameron on Unsplash https://unsplash.com/photos/7zocFMzvbpc.
-
Photo by AltumCode on Unsplash https://unsplash.com/photos/PNbDkQ2DDgM.
🌘 Section 7
- Photo by Kelly Sikkema on Unsplash https://unsplash.com/photos/Oz_J_FXKvIs?utm_source=unsplash&utm_medium=referral&utm_content=creditShareLink.