Autonomie numérique et technologique

Code et idées pour un internet distribué

Podcast On collaboration. Git et Github comme écosystème collaboratif

Imago voragine.net

On Collaboration Podcast

En juin dernier, j’ai eu l’occasion de participer au premier programme du podcast On Collaboration, qui explore en 5 épisodes les recoins de la collaboration. Sur le site Web On Collaboration :

5 approches différentes façonnent les 5 PROGRAMMES du projet. Chaque émission est structurée en une série de sections ou PILDORS transversaux à chacune d’elles, de sorte que l’auditeur devient le dernier éditeur de vitesse et de contenu résultant de ce processus collaboratif qui est On Collaboration lui-même. Vous choisissez ce que vous voulez et comment vous organisez le contenu.

Le premier programme, intitulé Histoires de collaboration, est organisé par Zuloark et Juanito Jones, et peut être écouté sur le site On Collaboration.

Dans la section Outils de collaboration du programme, je discutais avec Manuel Pascual de Zuloark sur le potentiel de git et github comme écosystèmes collaboratifs. Voici l’audio :

Je laisse ici les notes que j’ai préparées, quelque chose de plus structuré.

Git et Github

Github est un service web qui vous permet de partager du code. Il utilise le système de contrôle de version git.

Git a commencé à être utilisé en 2005. Linus Tovards, le promoteur initial de Linux, le noyau des systèmes d’exploitation GNU/Linux, a commencé à développer ce système de contrôle de version afin de pouvoir travailler comme il le voulait dans le développement du noyau Linux. git est toujours utilisé pour cela. Le référentiel (c’est ainsi que s’appellent les projets de code git et autres systèmes de contrôle de version) du noyau Linux aura bientôt un million de commits (petites tâches qui sont publiées et qui forment le journal des modifications du projet) fournis par près de 20.000 développeurs.

La plateforme Github est lancée en 2008. Depuis lors, il est devenu le plus grand dépôt de code sur Internet, l’endroit où presque tout le monde va pour partager leur projet de code. Github utilise git comme système de contrôle de version.

Qu’est-ce qu’un système de contrôle de version ?

Un système de contrôle de version vous permet de savoir qui a fait quoi à un moment donné, qui a apporté chaque modification. Il vous permet également de revenir à une version précédente du projet en gardant une trace de chaque changement, de chaque ligne de code qui est ajoutée ou supprimée. Peut-être plus important encore, il vous permet de travailler collectivement et à distance sur le même projet.

Pour comprendre ce qu’un système de contrôle de version est peut-être la chose la plus facile à faire est de penser à Wikipédia. Chaque contenu de Wikipédia a un enregistrement de toutes les versions qu’il a parcourues, quel utilisateur a fait chaque changement, à quel moment, et même de petits commentaires sur la raison pour laquelle ils ont été faits.

git, un système de contrôle de version distribué

Un système de contrôle de version distribué implique que le référentiel de code d’un projet soit complètement répliqué sur tous les ordinateurs des personnes qui y contribuent. Ainsi, un développeur peut travailler localement sur ce référentiel sans se connecter à Internet, puis une fois connecté, envoyer les modifications au reste des copies du référentiel sur les ordinateurs des autres développeurs. C’est un système plus sûr de par sa conception puisqu’il ne dépend pas d’une seule machine, l’ordinateur de chaque développeur fonctionne comme une sauvegarde du référentiel.

Mais plus qu’une question d’efficacité, c’est une question de pouvoir : il n’y a pas d’autorité centrale qui contrôle le dépôt.

Les systèmes de contrôle de version distribués permettent également de travailler en privé. Dans des contextes où nous sommes connectés en permanence et où notre activité tend de plus en plus à être publique, nous avons besoin d’espaces d’intimité pour expérimenter, pour essayer des choses sans nous sentir observés, évalués ou jugés. Jeremmie Zimmerman, hacker et ancien porte-parole de La Quadrature du net dans le documentaire Nothing to hide, l’explique à merveille. Sans ces espaces d’intimité, nous sommes même inconsciemment soumis à une autocensure qui limite la créativité.

Bien qu’il ait été conçu pour développer des logiciels, git est utilisé dans d’autres contextes, par exemple pour écrire des textes en collaboration, pour garder une trace du contenu d’un site web ou pour produire des designs entre différents designers. En fait git, et n’importe quel système de contrôle de version, est comme une machine à remonter le temps qui permet de passer facilement par le développement d’un projet de code jusqu’à son début, et de nos jours presque tout est code : un livre est code, un design est code.

Github en tant qu’écosystème collaboratif

Github est devenu un écosystème complet de collaboration. Il s’agit bien sûr d’une interface web qui vous permet de partager et d’explorer des référentiels de code. Il a un service associé appelé Gist qui vous permet de partager des extraits, de petits morceaux de code réutilisables, de petites solutions qui peuvent être utilisées dans n’importe quel projet de code ; dans certains cas, il vous permet également de voir ce code en action pour avoir une meilleure idée de ce qu’il est pour sans avoir à le lire.

De plus, chaque référentiel peut être associé à un wiki qui est habituellement utilisé pour créer la documentation du projet ; aussi un système de problèmes pour signaler les erreurs dans le code, les améliorations, les idées… et attribuer ces nouvelles tâches à des développeurs spécifiques et les organiser selon leur importance et leur urgence.

Github est aussi un réseau social pour les développeurs. Vous pouvez suivre d’autres utilisateurs, leur envoyer des messages et former des groupes de travail en leur attribuant des rôles différents.

Concepts qui facilitent la collaboration

L’utilisation de git et aussi de Github change la façon dont un projet de code est développé. Il existe plusieurs concepts qui facilitent le travail collaboratif.

Le commit

Un commit est une petite tâche. C’est l’unité qui définit le développement du projet. Il a toujours une description et un utilisateur qui lui est associé. Toutes les modifications apportées par un développeur sont incorporées dans le projet à l’aide de commits. Cela permet d’organiser le travail en petites tâches qui sont exécutées rapidement, ce qui définit la façon de travailler. Mais surtout le moyen de partager le code : engage l’aide pour partager rapidement et fréquemment le travail avec le reste des développeurs. Cette fréquence élevée de publication est très importante pour que tout le monde sache sur quoi travaillent les autres développeurs, afin d’obtenir un retour d’information et de faciliter la coordination.

Branch ou branche

Les branches permettent des développements parallèles au sein d’un même projet de code. Cela vous permet de laisser un développement en attente parce qu’il y a une urgence, qui commence à se développer dans une autre branche, ou de développer deux solutions différentes pour le même problème simultanément. Les branches ont un autre concept associé, la fusion, l’union de deux branches de développement, fondamental pour incorporer dans la branche principale les développements des autres branches.

Fork ou fourchette

Une fourchette consiste en une bifurcation d’un projet de code, à partir duquel il y a deux développements en parallèle. Le concept est analogue à celui de branche mais plus irréversible. Les fourches vous permettent d’avancer lorsqu’il y a des positions divergentes, au lieu de bloquer le développement. Ceci est possible parce que tout le code est ouvert et le système de contrôle de version distribué, de sorte que toute personne ou groupe a accès à tout le code.

Les branches et les bifurcations sont des outils très importants pour éviter la coercition et neutraliser les déséquilibres de pouvoir au sein d’une communauté de développement. Et aussi pour éviter les blocages provoqués par des arguments et des positions contradictoires.

Il faut aussi considérer les bifurcations comme deux voies qui, bien qu’au moment de la séparation semblent inconciliables, peuvent à l’avenir nourrir le même intérêt, se diriger vers un horizon commun. Un bon exemple de cette idée est l’arbre de distribution GNU/Linux, qui se nourrissent les uns les autres bien qu’ils aient été séparés il y a des années.

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks