mirror of
https://github.com/YunoHost/doc.git
synced 2024-09-03 20:06:26 +02:00
Link to project organization page
Co-authored-by: ljf (zamentur) <zamentur@users.noreply.github.com> Co-authored-by: nathanael-h <7300309+nathanael-h@users.noreply.github.com>
This commit is contained in:
parent
613955f3ef
commit
246a700388
2 changed files with 2 additions and 629 deletions
|
@ -1,311 +1,9 @@
|
|||
---
|
||||
title: Organisation du projet
|
||||
template: docs
|
||||
taxonomy:
|
||||
category: docs
|
||||
redirect: 'https://github.com/YunoHost/project-organization/'
|
||||
routes:
|
||||
default: '/yunohost_project_organization'
|
||||
aliases:
|
||||
- '/project_organization'
|
||||
---
|
||||
|
||||
! This page is outdated and should be reworked
|
||||
|
||||
## Objectif du document
|
||||
|
||||
Ce document a pour objectif de permettre aux contributeurs de se sentir légitimes d’effectuer une contribution dans le projet YunoHost avec un avis collectif. Il vise également à renforcer le projet en le structurant autour de groupes de travail autonomes pouvant résister au départ ou à l'absence de certains contributeurs.
|
||||
Le projet étant communautaire, les décisions prises hâtivement et discrètement par un groupe restreint de contributeurs peuvent entraîner des frustrations postérieures.
|
||||
Pour pallier ce problème, la solution proposée ici est de faire en sorte que les décisions soient prises collectivement, qu’elles soient suffisamment réfléchies, et qu'elles soient documentées ou rendues publiques.
|
||||
Un conseil oriente l’évolution du projet YunoHost, et des groupes d’intérêts permettent de contribuer plus efficacement en fonction des domaines de prédilection de chacun.
|
||||
|
||||
## Définition de YunoHost
|
||||
|
||||
### Objectifs
|
||||
Le but de YunoHost est de rendre accessibles au plus grand nombre l’installation et l’administration d’un serveur, sans délaisser la qualité et la fiabilité du logiciel.
|
||||
|
||||
### Valeurs
|
||||
|
||||
#### Un logiciel libre et communautaire
|
||||
|
||||
YunoHost est un logiciel sous licence libre, entièrement communautaire, et reposant sur des applications elles-mêmes communautaires et souvent libres (Roundcube, Baïkal, etc.).
|
||||
|
||||
|
||||
#### Que chacun peut s'approprier
|
||||
|
||||
Historiquement, le projet est très proche des initiatives visant à la création d'un internet neutre et décentralisé. Cette proximité, notamment avec la [FFDN](https://www.ffdn.org/), a amené une partie des contributeurs de YunoHost à créer la Brique Internet dont la mission est de faciliter l'auto-hébergement en fournissant une solution complète incluant service (via un VPN) et matériel. Cet aspect militant n'entrave pas des initiatives commerciales du logiciel pour lequel des entreprises pourraient proposer du support ou de l'hébergement.
|
||||
|
||||
|
||||
## Organisation de YunoHost
|
||||
|
||||
### Une structure ouverte, organisée par thèmes
|
||||
L'objectif de l'organisation de YunoHost est de permettre au plus grand nombre de contribuer à l'amélioration du logiciel, que ce soit d'un point de vue technique (développement, packaging d'application) ou non (communication, assistance aux utilisateurs, documentation, etc.). Inspiré par différents projets passés en revue lors de l'événement (Kodi, Debian, Django, Fedora, Wikipédia, etc.) et des idées de contributeur de YunoHost (Jérôme, Bram, opi, scith, ju), il a été décidé d'une organisation en groupes spécialisés, fédérés par un conseil de contributeurs clés.
|
||||
|
||||
Schéma d’organisation du projet YunoHost :
|
||||
|
||||
<img src="https://raw.githubusercontent.com/YunoHost/yunohost-project-organization/master/organization_schema.png" height="600px" />
|
||||
|
||||
|
||||
#### Définition et constitution des groupes
|
||||
La constitution de groupes part du constat que YunoHost compte beaucoup de sous-projets (treize au total), mais que l'on ne sait pas toujours qui en est en charge ou qui y est compétent. Il est donc proposé une simplification de l'organisation des sous-projets en groupes thématiques :
|
||||
|
||||
- ##### Groupe Core Dev
|
||||
- Core YunoHost
|
||||
- Moulinette
|
||||
- Admin web
|
||||
- SSOwat
|
||||
- Dynette
|
||||
- YNH-Dev
|
||||
|
||||
- ##### Groupe Distribution
|
||||
- Création et maintenance des images d'installation sur diverses architectures
|
||||
- Distribution des images
|
||||
- Gestion de la distribution des paquets Debian.
|
||||
|
||||
- ##### Groupe Infra/Adminsys
|
||||
- Infrastructure
|
||||
- Site web (wiki, forum, salon de discussion, Redmine, Mumble)
|
||||
- Démo
|
||||
- Services
|
||||
- [ip.yunohost.org](https://ip.yunohost.org/) et ip6.yunohost.org
|
||||
- [yunoports](http://ports.yunohost.org/)
|
||||
- nohost.me et noho.st
|
||||
- [yunodash](https://dash.yunohost.org/)
|
||||
- [yunopaste](http://paste.yunohost.org/)
|
||||
|
||||
- ##### Groupe Apps
|
||||
- Apps Officielles
|
||||
- Apps Communautaires
|
||||
- outils de développements d'app (package_checker, package linter)
|
||||
|
||||
- ##### Groupe Communication
|
||||
- Documentation
|
||||
- Communication (annonce évolutions du projet sur le forum, réseaux sociaux)
|
||||
- Traduction
|
||||
- Entraide (support)
|
||||
|
||||
Les groupes sont ouverts à tous les contributeurs souhaitant participer au développement de YunoHost. Chacun peut s'inscrire aux canaux de communication associés aux groupes auxquels il souhaite prendre part. Chaque inscrit est libre d'échanger avec le reste du groupe et de proposer une prise de décision à la suite d'une étape d'échange et d'amélioration de la proposition. Il est recommandé aux contributeurs de documenter au maximum leurs décisions et leurs contributions. Ceci permet de renforcer l'autonomie des groupes en cas de départs ou d'absences de certains de leurs membres.
|
||||
Afin de faciliter sa gestion, chaque groupe nomme donc un coordinateur (et un remplaçant) dont le rôle est :
|
||||
|
||||
- d'accueillir et de fédérer les nouveaux contributeurs réguliers de son groupe
|
||||
- de tenir informé le Conseil des décisions prises au sein du groupe (cf. point suivant)
|
||||
|
||||
Le choix d'un outil de communication est laissé à chaque groupe en fonction de sa pertinence (forum, chat, ML, etc.).
|
||||
|
||||
#### Définition et constitution du Conseil
|
||||
|
||||
YunoHost grandissant, il est important de maintenir une cohérence entre tous les groupes, néanmoins il est impossible d'imposer à chacun des membres des groupes de s'intéresser ou de s'impliquer sur tous les aspects du projet (pour des raisons de temps et de compétences). Pour pallier à cela, il est proposé de créer un méta-groupe, où chaque groupe sera représenté par au moins un de ses membres : le Conseil.
|
||||
Le Conseil est indépendant des groupes et réunit les contributeurs souhaitant s'impliquer le plus dans le projet, son rôle est de :
|
||||
|
||||
- prendre les décisions importantes sur YunoHost qui ne dépendent pas d'un seul groupe (par exemple changer le moteur du wiki)
|
||||
- faire des points réguliers sur l'ensemble du projet pour assurer sa cohésion. (réunion Mumble)
|
||||
- solliciter l'ensemble de la communauté des contributeurs (ou même des utilisateurs) quand une décision divise les groupes et/ou le Conseil
|
||||
|
||||
Le choix d'un outil de communication est laissé au Conseil, ses décisions doivent néanmoins être consultables par l'ensemble de la communauté de contributeurs.
|
||||
Pour participer aux votes du Conseil, il faut avoir contribué au projet et avoir obtenu un droit de vote (ou d'entrée) au sein du Conseil. Ce droit est délivré par le Conseil (éventuellement sur demande). Le Conseil est libre à tout moment de modifier le processus de décision.
|
||||
Être membre du Conseil n'implique pas forcément d'avoir l'ensemble des accès (infrastructure, dépôt etc.).
|
||||
|
||||
### Processus de validation des pull requests
|
||||
|
||||
Cette section détaille le processus de validation des pull requests dans les différents dépôts du projet. L'objectif de ce processus est de dégager un « consensus mou ». Il est important de préciser que ce processus est *recommandé* mais ne représente pas un impératif. En particulier, il ne couvre pas toutes les situations qui peuvent se présenter. Il est donc légitime de l'adapter (avec l'accord du groupe concerné) lorsqu'il n'est pas adapté au contexte.
|
||||
|
||||
Si un consensus ne peut être trouvé au sein d'un groupe en suivant le processus décrit, il est invité à se tourner vers le Conseil pour en débattre. Si aucun consensus n'est trouvé, la proposition sera soumise au vote de tous les contributeurs.
|
||||
|
||||
#### 1. Proposition
|
||||
|
||||
N'importe quel contributeur peut proposer une pull request (abrégée PR dans la suite) dans les divers dépôts liés au projet YunoHost (core, apps, infra...).
|
||||
|
||||
L'auteur est vivement encouragé à décrire sa proposition en donnant le maximum des informations
|
||||
pertinentes. Le groupe peut, à cette fin, proposer un modèle des informations à
|
||||
inclure, comme par exemple :
|
||||
- status actuel de la PR (ex. : non terminé, en attente de revues, choix techniques à faire...)
|
||||
- problème auquel réponds la PR (et références liées, par ex. : ticket sur le bugtracker, post sur le forum...)
|
||||
- solution, stratégie, résumé des changements, et/ou choix techniques utilisés dans la PR
|
||||
- comment tester la PR
|
||||
|
||||
L'auteur est vivement encouragé à respecter les bonnes pratiques suivantes :
|
||||
- une PR doit concerner exclusivement un sujet précis. Par exemple, elle ne doit pas à la fois résoudre un bug et ajouter une fonctionnalité (à moins que l'un implique l'autre) ;
|
||||
- avant de débuter l'implémentation d'une fonctionnalité qui fait intervenir des choix de conception (nom et format de commande ou d'option, nouvelle API, interface utilisateur...), discuter en amont de manière informelle avec le groupe pour s'assurer que l'implémentation imaginée convienne au plus grand nombre et reste dans l'esprit du projet ;
|
||||
- nommer sa PR avec un titre explicite, et la branche associée avec un nom explicite ;
|
||||
- donner les références vers d'autres éléments liés à la PR (rapport de bug sur le bugtracker, message sur le forum...)
|
||||
|
||||
Une PR peut être créée même si son auteur juge qu'elle n'est pas encore terminée. Dans ce cas, il doit déclarer explicitement dans le fil de discussion de la PR lorsqu'il juge la PR prête. Cela n'empêche pas les autres contributeurs d'émettre des avis sur la PR pendant ce temps.
|
||||
|
||||
Il appartient aussi à l'auteur de la PR de juger de son importance. (Ce jugement pourra cependant être contesté par les autres membres du groupe concerné par la PR.) Les niveaux d'importance utilisés sont les suivants :
|
||||
- **micro** : concerne uniquement un détail de forme et/ou qui ne nécessite pas d'être débattue et testée. Elle doit être facilement réversible.
|
||||
- **mineure** : impacte de manière légère le projet (e.g. refactoring d'une petite partie de code, réparation d'un bug...)
|
||||
- **moyenne** : impacte de manière significative l'architecture d'une partie du code (e.g. refactoring de tout un aspect ou de tout un fichier, ajout d'une fonctionnalité importante, sortie d'une version testing...)
|
||||
- **majeure** : impacte lourdement l'ensemble du projet (e.g. migration d'une dépendance critique, changement de version de Debian, sortie d'une version stable...)
|
||||
|
||||
|
||||
#### 2. Revue et validation collective
|
||||
|
||||
(Cette section ne s'applique pas aux PR "micro" qui peuvent être validées directement par leur auteur.)
|
||||
|
||||
Une fois la PR déclarée comme terminée, les contributeurs sont invités à donner leurs avis, relire et tester les changements proposés pour les valider. Lorsque des bugs ou des implémentations mauvaises ou incomplètes sont trouvées, les relecteurs rapportent cordialement le problème à l'auteur de la PR sur le fil de discussion. Si le problème trouvé est simple à corriger (e.g. typo ou détail de forme), le relecteur est encouragé à amender la PR pour corriger le problème lui-même. Sinon, l'auteur fait de son mieux pour corriger les problèmes soulevés.
|
||||
|
||||
Les relecteurs rapportent également le degré de relecture et de tests effectués (c.f. liste ci-dessous). Selon l'importance de la PR (mineure, moyenne ou majeure), différents quotas de tests et approbations sont à remplir pour que celle-ci soit validée. Les relecteurs peuvent valider une fois chaque type de relecture/test nécessaire (par exemple, un relecteur peut donner un point d'accord sur le principe, un autre point de relecture en diagonale, et un autre point de test dans des cas simples.). L'auteur de la PR ne compte pas dans ces quotas de validation. La proposition doit aussi passer les tests automatiques disponibles dans le groupe (CI, tests unitaires/fonctionnels, linter...).
|
||||
|
||||
| | **Mineure** | **Moyenne** | **Majeure** |
|
||||
|-----------------------------------|-------------|--------------|-------------|
|
||||
| **Accord sur le principe** | 2 | 3 | 4 |
|
||||
| **Relecture en diagonale** | 1 | 2 | 3 |
|
||||
| **Testé dans les cas simples** | 1 | 2 | 3 |
|
||||
| **Relecture attentive** | 0 | 1 | 2 |
|
||||
| **Testé dans des cas compliqués** | 0 | 1 | 2 |
|
||||
|
||||
Si l'auteur ne fait pas parti du groupe concerné par la PR, tous ces quotas sont augmentés de 1. Dans tous les cas, ces quotas doivent être remplis au moins à 50% par des relecteurs membres du groupe concerné par la PR. (Ainsi, par exemple, un non-membre peut donner son accord sur le principe pour une PR mineure. Mais deux avis de non-membres pour une PR moyenne comptent uniquement pour un seul avis).
|
||||
|
||||
|
||||
#### 3. Merge d'une pull request
|
||||
|
||||
Une fois les quotas de relecture remplis, et si aucun refus n'a été prononcé et qu'aucune demande de changement n'est en attente, n'importe quel membre du groupe peut alors déclarer et marquer la PR comme "prête à être mergée".
|
||||
|
||||
Pendant une durée de 3 jours suivant cette déclaration, les membres du groupe peuvent encore relire, demander des changements ou émettre un refus vis-à-vis de la PR. Dans ce cas, le merge est interrompu et le processus retourne à la partie 2. Pour les PRs moyennes et majeures, la durée est augmentée jusqu'à ce qu'il se soit écoulé au moins une semaine par rapport au moment où la PR a été déclarée comme prête par son auteur.
|
||||
|
||||
À l'issue de cette durée, n'importe quel membre du groupe peut merger la PR. Lorsque celle-ci comporte plusieurs commits, il est recommandé d'utiliser la fonction "squash and merge" pour garder l'historique de commit propre.
|
||||
|
||||
#### Cas particuliers
|
||||
|
||||
Plusieurs cas particuliers peuvent se présenter et dont la résolution est décrite ci-après.
|
||||
|
||||
##### Refus d'une PR
|
||||
|
||||
Une PR peut être refusée et clôturée par n'importe quel membre du groupe concerné si :
|
||||
- la PR a été créée au moins depuis deux semaines
|
||||
- au moins deux membres du groupe ont manifesté un désaccord avec le principe de la PR
|
||||
- aucun autre membre du groupe n'a manifesté son accord avec le principe de la PR
|
||||
|
||||
|
||||
##### Co-création
|
||||
|
||||
Une PR peut être développée par plusieurs personnes. Chacun est invité à y faire des commits en se concertant avec l'auteur initial ou le nouveau gestionnaire de PR si l'auteur est indisponible, manque de temps ou souhaite se consacrer à d'autres travaux.
|
||||
|
||||
Si ces commits sont conséquents, dans ce cas on peut prendre **partiellement** en compte l'avis des auteurs dans les quotas de relectures et de tests.
|
||||
|
||||
Exemple : si une PR est écrite par A et B (50/50), A et B pourront relire le code de l'autre. Dans ce cas, on pourra par exemple compter une relecture pour ces 2 relectures partielles.
|
||||
|
||||
|
||||
##### Validation "allégé" en cas de manque de relecteurs
|
||||
|
||||
En cas de manque de relecteurs, l'auteur d'une PR peut déclencher une procédure de validation alternative si :
|
||||
- l'auteur est membre du groupe concerné par la PR
|
||||
- il s'agit d'une PR mineure ou moyenne
|
||||
- la PR a été déclarée comme prête
|
||||
- il n'y a pas de demande de changement en attente
|
||||
- les quotas de relecture "standards" n'ont pas été remplis
|
||||
- une semaine s'est écoulée depuis le dernier commentaire ou commit
|
||||
|
||||
Dans ce cas, l'auteur annonce sur le fil de discussion de la PR qu'il souhaite engager cette prodécure ainsi que sur la liste de diffusion (ou lors d'une réunion du mardi). À partir de ce moment, les quotas d'accord, relecture et tests pour valider cette PR sont diminués de 1. Au minimum une semaine devra s'écouler avant que cette PR ne soit effectivement mergée. Un autre membre du groupe peut à tout moment mettre fin à cette procédure si il juge la PR trop critique pour être mergée de la sorte.
|
||||
|
||||
## Composition des groupes
|
||||
|
||||
- Conseil : Bram, ju, ljf, Maniack, Moul, opi, theodore.
|
||||
- Core Dev : AlexAubin, Bram, JimboJoe, Ju, ljf, Moul, opi
|
||||
- Apps : Bram, cyp, frju365, JimboJoe, Josue-T, Ju, ljf, Maniack C, Maxime, Moul, Scith, Tostaki
|
||||
- Infra : Bram, Ju, Maniack C, Moul, opi
|
||||
- Communication
|
||||
- Com : Bram, Moul, korbak, ljf, opi, frju365
|
||||
- Doc : Moul, Theodore
|
||||
- Trad : Jean-Baptiste
|
||||
- Distribution : Heyyounow
|
||||
|
||||
|
||||
## Droits d’administration afférents aux groupes
|
||||
Cette partie liste les kits de droits d’administration pour les différents groupes du projet YunoHost :
|
||||
|
||||
(Attention, il ne s’agit pas des droits de prises de décisions dans ce cas).
|
||||
|
||||
### Conseil
|
||||
- Aucun droits d’administration. Les droits sont complétés avec le fait d’être présents dans les autres groupes,
|
||||
- Forum : membre du [groupe `Conseil`](https://forum.yunohost.org/groups/Conseil).
|
||||
|
||||
### Dev
|
||||
- GitHub : membre de l’[équipe `Devs` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/devs),
|
||||
- Redmine : membre des projets [`YunoHost`](https://dev.yunohost.org/projects/yunohost) et [`Moulinette`](https://dev.yunohost.org/projects/moulinette),
|
||||
- Intégration continue : droits sur les outils d’intégrations continue CI-core,
|
||||
- XMPP : modérateur du salon [`dev`](xmpp:dev@conference.yunohost.org?join),
|
||||
- Forum : membre du [groupe `Dev`](https://forum.yunohost.org/groups/Dev).
|
||||
|
||||
### Infra
|
||||
- Serveurs : accès SSH par clé sur certains (selon les besoins) ou sur la totalité des serveurs,
|
||||
- GitHub : membre de l’[équipe `Infra` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/infra),
|
||||
- Redmine: membre du [projet `Infra`](https://dev.yunohost.org/projects/y-u-no-infra/),
|
||||
- Forum, Weblate, Redmine, XMPP, CI: administrateur,
|
||||
- Forum : membre du [groupe `Infra`](https://forum.yunohost.org/groups/Infra).
|
||||
|
||||
### Apps
|
||||
- GitHub : propriétaire (Owner) [de l’organisation YunoHost-Apps](https://github.com/orgs/YunoHost-Apps/people?utf8=%E2%9C%93&query=%20role%3Aowner),
|
||||
- Redmine : membre du [projet `Apps`](https://dev.yunohost.org/projects/apps),
|
||||
- GitHub : membre de l’[équipe `Apps` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/apps),
|
||||
- Intégration continue : accès à [CI-Apps](https://ci-apps.yunohost.org),
|
||||
- XMPP : modérateur sur le [salon `Apps`](xmpp:apps@conference.yunohost.org?join),
|
||||
- Forum : membre du [groupe `Apps`](https://forum.yunohost.org/groups/Apps).
|
||||
|
||||
### Communication
|
||||
- Forum : membre du [groupe `Com`](https://forum.yunohost.org/groups/Communication).
|
||||
|
||||
#### Doc
|
||||
- GitHub : membre de l’[équipe `Doc` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/doc).
|
||||
|
||||
#### Communication
|
||||
- Diaspora* : accès au compte [YunoHost](https://framasphere.org/people/01868d20330c013459cf2a0000053625),
|
||||
- Twitter : accès au compte [YunoHost](https://twitter.com/yunohost),
|
||||
- Forum : accès au compte [`YunoHost`](https://forum.yunohost.org/users/yunohost/activity).
|
||||
|
||||
#### Traduction
|
||||
- Weblate : administrateur sur l’[outil de traduction](https://translate.yunohost.org/projects/yunohost/).
|
||||
|
||||
#### Entraide
|
||||
- Forum : statut de modérateur,
|
||||
- XMPP : statut de modérateur sur le salon [`support`](xmpp:support@conference.yunohost.org?join).
|
||||
|
||||
### Distribution
|
||||
- GitHub : membre de l’[équipe `Distrib` de l’organisation `YunoHost`](https://github.com/orgs/YunoHost/teams/distribution),
|
||||
- Information : la diffusion des images (ISO…) doit se faire en collaboration avec le groupe `Infra` (et `Doc`),
|
||||
- Publication : un accès SFTP peut être mis en place,
|
||||
- Forum : membre du [groupe `Distribution`](https://forum.yunohost.org/groups/Distribution).
|
||||
|
||||
## Décisions à venir pour les groupes
|
||||
### Conseil
|
||||
- Faut-il élire les membres du Conseil plutôt que de les coopter ? Risque de se transformer en "campagne politique" !
|
||||
- Faut-il limiter l'ouverture des groupes d'intérêts par cooptation comme pour le Conseil ?
|
||||
- Proposition de changer Conseil en Collégiale
|
||||
- Migrer le serveur d’infrastructure du projet sous YunoHost. (avec apps déjà packagées pad, Gogs, Mumble?)
|
||||
- Nouveau système pour la documentation
|
||||
- Amélioration de la documentation
|
||||
- Migration du serveur XMPP
|
||||
- Hébergement de notre forge Git
|
||||
- Revoir système de build : stable <— testing <— branches
|
||||
- Gel de nohost.me et question de l'abandon des services
|
||||
|
||||
### Groupe Dev
|
||||
- Comment gérer les pull request ?
|
||||
- Chaque ticket fait l'objet d'une branche et d'un ticket, tu fais une pull/merge request, la communauté vérifie que ça fonctionne, une décision est prise d'intégrer.
|
||||
|
||||
### Groupe Apps
|
||||
- Pour les apps communautaires, les issues sont bien sur GitHub, les discussions sur le forum
|
||||
|
||||
### Groupe Communication
|
||||
- Rapport de bug à partir du forum
|
||||
- Faire en sorte de nettoyer le forum pour éviter le bruit
|
||||
- Proposition de supprimer le salon de support
|
||||
- Comment rendre le forum plus actif et central
|
||||
- Comment s'organiser pour les privilèges sur le forum (si les groupes veulent voter sur le forum)
|
||||
|
||||
### Autres
|
||||
- Demande sur le forum avec notification des membres du Conseil et des représentants des groupes d’intérêts concernés.
|
||||
- Vote sur deux semaines par un post sur le forum
|
||||
- Créer quatre canaux pour le Dev, les Apps, la Communication et l'Infrastructure
|
||||
- La release devrait être validée par l'ensemble des 4 (ou 5) groupes d’intérêts
|
||||
- Communication en français et en anglais
|
||||
- Annuaire ou contact des groupes pour les nouveaux arrivants. Voir peut-être annuaire tout court pour savoir qui fait quoi. https://yunohost.org/#/contribs_fr à compléter. Et à mettre en avant.
|
||||
- Proposition de laisser les membres YunoHost s'auto déterminer -> Comment gérer les accès ?
|
||||
|
||||
## Moyens de communication actuels
|
||||
|
||||
- Rencontres à des évènements.
|
||||
- Réunions hebdomadaires Mumble.
|
||||
- [Forum](https://forum.yunohost.org).
|
||||
- [Bugtracker Redmine](https://dev.yunohost.org).
|
||||
- Forge Git pour la review de code : [YunoHost](https://github.com/YunoHost) [YunoHost-Apps](https://github.com/YunoHost-Apps).
|
||||
- [Salons de discussions XMPP](https://yunohost.org/#/chat_rooms_fr)
|
||||
|
|
|
@ -1,334 +1,9 @@
|
|||
---
|
||||
title: Project organisation
|
||||
template: docs
|
||||
taxonomy:
|
||||
category: docs
|
||||
redirect: 'https://github.com/YunoHost/project-organization/'
|
||||
routes:
|
||||
default: '/yunohost_project_organization'
|
||||
aliases:
|
||||
- '/project_organization'
|
||||
---
|
||||
|
||||
! This page is outdated and should be reworked
|
||||
|
||||
## Document objective
|
||||
|
||||
This document aims at allowing contributors to feel legitimate in contributing to the YunoHost project together with collective feedback.
|
||||
The project is community-based and hasty decisions made by a restricted group of contributors can generate frustrations at a later stage.
|
||||
To address this issue, the proposed solution here is to ensure that decisions are taken collectively and that they are sufficiently thought out.
|
||||
An advisory council provides orientations for the evolution of the YunoHost project and special interest groups allow more efficient contribution in relation to each specific topic.
|
||||
|
||||
## Definition of YunoHost
|
||||
|
||||
###Objectives
|
||||
|
||||
The goal of YunoHost is to make accessible to the largest number of people, the installation and administration of a server, without prejudice to the quality and reliability of the software.
|
||||
|
||||
### Values
|
||||
|
||||
#### A free and community-based software
|
||||
|
||||
YunoHost is a software under free licence, fully community-based and based on applications which are themselves community-based and often free (Roundcube, baïkal, etc.)
|
||||
|
||||
#### That everyone can appropriate
|
||||
|
||||
Historically, the project has been very close to initiatives which aim at creating a neutral and decentralised Internet. This proximity especially with the [FFDN](https://www.ffdn.org/), has materialised by having some contributors to create the InternetCu.be whose mission is to facilitate self-hosting by providing a complete solution including a service (via a VPN) and a device. This militant aspect does not inhibit commercial software initiatives hereby companies could propose support or hosting.
|
||||
|
||||
## YunoHost organisation
|
||||
|
||||
### A theme-based, open structure
|
||||
|
||||
The objective of the YunoHost organisation is to allow the largest number of people to contribute to software improvement, whether from a technical point of view (development, application packaging) or otherwise (communication, end-user assistance, documentation, etc.). Inspired by the projects which were reviewed at a recent event (Kodi, Debian, Django, Fedora, Wikipedia, etc.) and by ideas stemming from YunoHost contributors (Jérôme, Bram, opi, scith, ju), a decision was made to organise work by special interest groups, federated thanks to a council to key contributors.
|
||||
|
||||
YunoHost project organisation schema
|
||||
|
||||
<img src="https://raw.githubusercontent.com/YunoHost/yunohost-project-organization/master/organization_schema.png" height="600px" />
|
||||
|
||||
#### Definition and structure of groups
|
||||
|
||||
Groups are structured as a result of the fact that YunoHost counts many sub-projects (a total of 13), but without always knowing who is in charge or who is competent. It has therefore been decided to simplify the organisation into sub-projects according to theme-based groups:
|
||||
|
||||
- ##### Core Dev Group
|
||||
- YunoHost Core
|
||||
- Moulinette
|
||||
- Web admin
|
||||
- SSOwat
|
||||
- Dynette
|
||||
- YNH-Dev
|
||||
|
||||
- ##### Distribution Group
|
||||
- Creation and maintenance of installation images on various architectures
|
||||
- Distribution of images
|
||||
- Management of Debian packages distribution
|
||||
|
||||
- ##### Infra/Sysadmin Group
|
||||
- Infrastructure
|
||||
- Website (wiki, forum, chat room, redmine, Mumble)
|
||||
- Demo
|
||||
- Services
|
||||
- [ip.yunohost.org](https://ip.yunohost.org/) and ip6.yunohost.org
|
||||
- [yunoports](http://ports.yunohost.org/)
|
||||
- nohost.me and noho.st
|
||||
- [yunodash](https://dash.yunohost.org/)
|
||||
- [yunopaste](http://paste.yunohost.org/)
|
||||
|
||||
- ##### Apps Group
|
||||
- apps.json list
|
||||
- App development tools (package_checker, package linter)
|
||||
|
||||
- ##### Communication Group
|
||||
- Documentation
|
||||
- Communication (announcement of project evolutions on the forum, social networks)
|
||||
- Translation
|
||||
- Mutual assistance (support)
|
||||
|
||||
Groups are open to all contributors willing to participate to the development of YunoHost. Everyone can register with the communication channels associated with the group they want to get involved with. Everyone is free to exchange with the rest of the group and to submit a decision point which will follow a prior stage of exchange and improvement of the proposal.
|
||||
In order to facilitate its management, each group names a coordinator (and a deputy) whose role is:
|
||||
|
||||
- to welcome and to federate new regular contributors to the group
|
||||
- to keep the Council informed of decisions taken within the group (see next point)
|
||||
|
||||
The choice of a communication tool is left to each group depending on its relevance (forum, chat, email, etc.)
|
||||
|
||||
#### Definition and structure of the Council
|
||||
|
||||
YunoHost is growing and it's important to maintain a coherence among all the groups. However, it is impossible to impose on every member within every group to take interest or to get involved in all aspects of the project (due to time and competency constraints). To address this, it has been suggested that a meta-group be created where every group has at least one representative: hence the Council.
|
||||
The Council is independent of groups and brings together contributors wishing to get involved in the project to the maximum extent. It's role is to:
|
||||
|
||||
- take important decisions affecting YunoHost which are dependent on one single group (for instance, changing the wiki engine)
|
||||
- regularly follow up on the overall aspect of the project to ensure its cohesion (Mumble meeting)
|
||||
- call on the whole community of contributors (or even end-users) when a decision appears divisive between groups or within the Council
|
||||
|
||||
To take part at Council-level votes, you must have contributed to the project and have obtained a right to vote (or right of entry) at the Council. This right is delivered by the Council (and may be upon request). The Council is free at any moment to change its decision process.
|
||||
To be a member of the Council does not imply that you have access to all resources (infrastructure, repositories, etc.).
|
||||
|
||||
### A decision process based on soft consensus
|
||||
|
||||
Decisions to be taken can be of 2 kinds:
|
||||
|
||||
1. for a group (for example, "to merge a PR" would be assumed by the Dev Group whereas to "post a tweet" would fall under the responsibility of the Communication Group)
|
||||
2. for the overall project (for instance, to decide on a release with new features)
|
||||
|
||||
If a consensus is not reached over a decision within a particular group, they must refer to the Council for further discussions. If no consensus has been reached, the proposal will be submitted to a vote by all contributors.
|
||||
|
||||
#### The decision process in detail
|
||||
|
||||
##### 1) Initiating a decision
|
||||
- can be initiated by anyone following predefined media within each group (e.g. to open a PR automatically triggers this process)
|
||||
- necessarily public with the exception of well-defined situations (bug related to a critical security issue or vote relative to individuals)
|
||||
- an end-date is automatically set for every type of proposition. This date is used for various reasons:
|
||||
- to leave enough time for everyone to express themselves and to avoid hasty decisions
|
||||
- to maintain a certain rhythm otherwise if the quota of responses is reached then there's no need to wait for everyone's views within a group
|
||||
- the quota is evaluated according to people registered in a group (or the Council, depending on the situation) who have expressed their desire to be considered as a regular voter => for instance kload could wish to give their opinion at a particular occasion, but with no intention of applying as a active voting member at the Council
|
||||
- so it can be postponed upon simple request by any one member of the group—and only the group, not all contributors.
|
||||
|
||||
##### 2) Opening a discussion with several possible responses:
|
||||
Anyone can change their position at any moment, but it's expected to let the group react if necessary (e.g. avoid going from positive to negative to reject a proposal altogether after just 3 minutes).
|
||||
|
||||
- "simple" replies
|
||||
- "I agree" –> counts as a positive view
|
||||
- "It seems good to me, but I'd rather abide by others' opinion" –> if there are only such views (or like the next one) and at least one positive view and the due date is past, then the proposal is accepted
|
||||
- "no views" / "I'm not in a position to express a helpful view (e.g. I can't code in X)"
|
||||
- delayed reponse
|
||||
- request for clarification, in which case the decision is suspended
|
||||
- refusal: any refusal should be argued and justified
|
||||
|
||||
##### 3) Suspension/Postponement
|
||||
- while there is no response, a decision is considered suspended; at the moment of a response, the end date is automatically postponed (if needed) (for a duration to be determined, which is shorter than the initial time)
|
||||
- in a situation where there are positive and negative views, or where there is a choice between several proposals
|
||||
|
||||
##### 4) Request for modifications
|
||||
- however, it may happen that discussions take place around these modifications; if such is the case, there is a new decision to be added to the list of existing decisions, and the process applies again (with a postponement of the date)
|
||||
- if there aren't enough people agreeing, the date is postponed and a recall must be sent
|
||||
- if the result is very close, the group is invited to rediscuss the matter if it is important, otherwise this could turn into a divisive issue and of tensions in the future
|
||||
|
||||
##### 5) Closure
|
||||
- if the group is unanimous in its decision
|
||||
- with agreements only
|
||||
- with refusals only
|
||||
- no opinions (relying on others' views)
|
||||
- For a minor or standard decision, if the quota of responses is reached by the minimal deadline and there's a consensus.
|
||||
- The quota of responses means necessary views as detailed below according to different types of decisions. The percentage is based on the number of active members in the group. The coordinator and its deputy are in charge of managing active and inactive members in a group, as they maintain an up-to-date list of members at least at every decision point within the group. (An inactive member who shows up for a decision automatically becomes active).
|
||||
- If it isn't possible to have enough people (vacations, not enough members in a group to provide their views), a group can request closing a vote before the voting quota is reached; there's then a new postponement and if the new postponed date is reached, then the proposal is closed according to recorded views.
|
||||
|
||||
###### Micro-decision:
|
||||
- A decision taken and immediately applied by a single member. This kind of decision must necessarily be reversible, and can be questioned by anyone from any group.
|
||||
|
||||
###### Minor decision
|
||||
- Initial duration: 1 week.
|
||||
- Minimal duration: 3 days.
|
||||
- Postponement, if necessary: 3 days.
|
||||
- Necessary views: 2 members of a group (the person who initiated the decision can express their view); in an anticipated format, 3 of which 2 members of the group.
|
||||
|
||||
###### Standard decision:
|
||||
- Initial duration: 2 weeks.
|
||||
- Minimal duration: 1 week.
|
||||
- Postponement, if necessary: 1 week.
|
||||
- Necessary views: 50% of members of a group (the person who initiated the decision can express their view); in an anticipated format, 66% of members.
|
||||
- Validation by voting (when applicable): 75% of positive votes.
|
||||
|
||||
###### Major decision:
|
||||
- Initial duration: 1 month.
|
||||
- Postponement, if necessary: 2 weeks.
|
||||
- Necessary views: 75% of members of a group (the person who initiated the decision can express their view).
|
||||
- Validation by voting (when applicable): 90% of positive votes.
|
||||
|
||||
##### 6) Application
|
||||
Then a member of a group can announce their decision as effective (and proceed with necessary actions such as releasing, merging, announcing, etc.). If certain actions are required, it's important that people commit themselves to performing them, since a decision without designated people is of little use
|
||||
|
||||
## Composition of groups
|
||||
|
||||
- Council : Bram, ju, ljf, Maniack, Moul, opi, theodore
|
||||
- Core Dev : AlexAubin, Bram, JimboJoe, Ju, ljf, Moul, opi
|
||||
- Apps : Bram, cyp, frju365, JimboJoe, Josue-T, Ju, ljf, Maniack C, Maxime, Moul, Scith, Tostaki
|
||||
- Infra : Bram, Ju, Maniack C, Moul, opi
|
||||
- Communication
|
||||
- Com : Bram, Moul, korbak, ljf, opi, frju365
|
||||
- Doc : Moul, Theodore
|
||||
- Trans : Jean-Baptiste
|
||||
- Distribution : Heyyounow
|
||||
|
||||
## Summary table of the number of views required for a decision
|
||||
|
||||
_Values are rounded (e.g. 5.4 => 5 and 5.5 => 6)._
|
||||
|
||||
|
||||
| | **Minor** | **Standard** | **Major** |
|
||||
|----------------------|---------|----------|---------|
|
||||
| **Council** |
|
||||
| Standard closure | 2 | 4 | 5 |
|
||||
| Anticipated closure | 3* | 5 |
|
||||
| Closure by voting | 5 | 5 | 6 |
|
||||
| **Core Dev** |
|
||||
| Standard closure | 2 | 3 | 5 |
|
||||
| Anticipated closure | 3* | 4 |
|
||||
| Closure by voting | 4 | 5 | 5 |
|
||||
| **Apps** |
|
||||
| Standard closure | 2 | 5 | 8 |
|
||||
| Anticipated closure | 3* | 7 |
|
||||
| Closure by voting | 7 | 8 | 9 |
|
||||
| **Infra** |
|
||||
| Standard closure | 2 | 3 | 4 |
|
||||
| Anticipated closure | 3* | 3 |
|
||||
| Closure by voting | 3 | 4 | 5 |
|
||||
| **Communication -> Com** |
|
||||
| Standard closure | 2 | 2 | 3 |
|
||||
| Anticipated closure | 3* | 3 |
|
||||
| Closure by voting | 3 | 3 | 4 |
|
||||
| **Communication -> Doc** |
|
||||
| Standard closure | 1 | 1 | Council |
|
||||
| Anticipated closure | 2* | 2* |
|
||||
| Closure by voting | Council | Council | Council |
|
||||
| **Distribution** |
|
||||
| Standard closure | 1 | Council | Council |
|
||||
| Anticipated closure | 1 | Council |
|
||||
| Closure by voting | 1 | Council | Council |
|
||||
|
||||
\* of which 1 view can be external to the group
|
||||
|
||||
For the translation group, the process needs to be adapted.
|
||||
|
||||
For the documentation group, the number of views for an anticipated closure of a minor decision eat for the moment limited (there are only 2 people in the group). The other types of decision are taken by the Council.
|
||||
|
||||
For the distribution group, since there's only Heyyounow at the moment, the Council will have the task of making Standard and Major decisions.
|
||||
|
||||
## Administration group's rights
|
||||
This part list administration rights for differents groups of YunoHost project:
|
||||
|
||||
(Warning, this is not decision rights here).
|
||||
|
||||
### Council
|
||||
- No administration right. Authorizations are completed through the other groups membership,
|
||||
- Forum: ["Conseil" group member](https://forum.yunohost.org/groups/Conseil).
|
||||
|
||||
### Core Dev
|
||||
- GitHub: Devs team member inside YunoHost's organization (permission to push, merge…),
|
||||
- Redmine: project member of [`YunoHost`](https://dev.yunohost.org/projects/yunohost) and [`Moulinette`](https://dev.yunohost.org/projects/moulinette),
|
||||
- Continous integration: writting access to CI-Core,
|
||||
- XMPP: ["dev"](xmpp:dev@conference.yunohost.org?join) channel moderator,
|
||||
- Forum: ["Dev" group member](https://forum.yunohost.org/groups/Dev).
|
||||
|
||||
### Infra
|
||||
- Servers: SSH access using SSH key on some (as needed) or every servers,
|
||||
- GitHub: [Infra team member inside YunoHost's organization](https://github.com/orgs/YunoHost/teams/infra) (permission to push, merge…),
|
||||
- Redmine: [Infra project member](https://dev.yunohost.org/projects/y-u-no-infra/),
|
||||
- Forum, Weblate, Redmine, XMPP, CI: administrator,
|
||||
- Forum: [Infra group member](https://forum.yunohost.org/groups/Infra).
|
||||
|
||||
### Apps
|
||||
- GitHub: YunoHost-Apps [Owner](https://github.com/orgs/YunoHost-Apps/people?utf8=%E2%9C%93&query=%20role%3Aowner) (permission to push and merge on all repositories),
|
||||
- Redmine: [Apps project member](https://dev.yunohost.org/projects/apps),
|
||||
- GitHub: [Apps team member inside YunoHost's organization](https://github.com/orgs/YunoHost/teams/apps) (permission to push, merge…),
|
||||
- Continous integration: access to [CI-Apps](https://ci-apps.yunohost.org),
|
||||
- XMPP: [Apps channel moderator](https://im.yunohost.org/logs/apps),
|
||||
- Forum: [Apps group member](https://forum.yunohost.org/groups/Apps).
|
||||
|
||||
### Communication
|
||||
- Forum: [Com group member](https://forum.yunohost.org/groups/Communication).
|
||||
|
||||
#### Documentation
|
||||
- GitHub: [Doc team member of YunoHost's organization](https://github.com/orgs/YunoHost/teams/doc).
|
||||
|
||||
#### Communication
|
||||
- Diaspora*: [account access](https://framasphere.org/people/01868d20330c013459cf2a0000053625),
|
||||
- Twitter: [account access](https://twitter.com/yunohost),
|
||||
- Forum: [account access](https://forum.yunohost.org/users/yunohost/activity).
|
||||
|
||||
#### Translation
|
||||
- Weblate: [translator tool admin](https://translate.yunohost.org/projects/yunohost/).
|
||||
|
||||
#### Mutual assistance (support)
|
||||
- Forum: moderator status,
|
||||
- XMPP: [`support` chanel moderator](xmpp:support@conference.yunohost.org?join).
|
||||
|
||||
### Distribution
|
||||
- GitHub: [YunoHost's organisation `Distrib` team member](https://github.com/orgs/YunoHost/teams/distribution),
|
||||
- Information: image distribution (ISO…) should be done in collaboration with `Infra` group (and `Doc`),
|
||||
- Publication: SFTP access can be set up,
|
||||
- Forum: [`Distribution` group team member](https://forum.yunohost.org/groups/Distribution).
|
||||
|
||||
## Pending decisions for the groups
|
||||
|
||||
### Council
|
||||
- Should we elect Council members rather than co-opt them? There's a risk of it becoming a "political campaign"!
|
||||
- Should special interest group membership be restricted to cooptation like for the Council?
|
||||
- Proposal to change Council to Collegiate
|
||||
- Migrate the project infrastructure server under YunoHost (with prepackaged apps like pad, dogs and mumble?)
|
||||
- New system for documentation
|
||||
- Improvement of documentation
|
||||
- XMPP server migration
|
||||
- Hosting of our Git forge
|
||||
- Review the build system: stable <— testing <— branches
|
||||
- Freeze nohost.me and abandoning services
|
||||
|
||||
### Core Dev Group
|
||||
- How to manage pull requests?
|
||||
- Each ticket gives rise to a branch and a ticket; you make a pull/merge request, the community verifies that it works, a decision is taken to integrate.
|
||||
|
||||
### Apps Group
|
||||
- For community-based apps, issues are on GitHub as they should be, but discussions are on the forum
|
||||
|
||||
### Communication Group
|
||||
- Bug report from the forum
|
||||
- Cleanup of the forum to avoid noise
|
||||
- Proposal to delete support chat
|
||||
- How to make the forum a more active and central hub
|
||||
- How to organise rights on the forum (if groups want to vote on the forum)
|
||||
|
||||
### Miscellaneous
|
||||
- Request on the forum with notification to the Council members and to representatives of relevant special interest groups
|
||||
- Vote over 2 weeks with a post on the forum
|
||||
- Create 4 channels for Core Dev, Apps, Communication and Infrastructure
|
||||
- A release should be validated by all 4 (or 5) interest groups
|
||||
- Communication in French and English
|
||||
- Directory or group contact for new people. Maybe just a directory to know who's who. https://yunohost.org/#/contribs to be completed. And to be highlighted.
|
||||
- Proposal to leave YunoHost members auto-determine themselves -> How to manage access rights?
|
||||
|
||||
## Current means of communication
|
||||
|
||||
- Get-togethers at events
|
||||
- Weekly Mumble meetings
|
||||
- [Forum](https://forum.yunohost.org).
|
||||
- [Bugtracker Redmine](https://dev.yunohost.org).
|
||||
- Git Forge for code reviews: [YunoHost](https://github.com/YunoHost) [YunoHost-Apps](https://github.com/YunoHost-Apps).
|
||||
- [XMPP chat rooms](https://yunohost.org/#/chat_rooms)
|
||||
|
|
Loading…
Add table
Reference in a new issue