Le BDFL (Dictateur Bénévole Bienveillant À Vie) et créateur du langage Python vient d’annoncer qu’il laissait son bébé à la communauté.
Sans quitter son rôle de core dev, et en suggérant qu’il passe plus de temps en tant que mentor de ses collègues sur le projet, il abandonne néanmoins son pouvoir de décision absolu sur le langage et son rôle de validateur ultime de chaque introduction de nouvelles fonctionnalités.
Dans son email, il ne passe pas le pouvoir à qui que ce soit ni n’invite à un mode de direction particulier. Il suggère que l’équipe actuelle des core devs, les développeurs ayant les droits de commit sur le repository du langage, choisisse le format qui leur convienne le mieux pour diriger à présent le projet.
Un moment important dans la vie de Python, mais aussi un événement qui demande beaucoup de remise en contexte.
Python-idea, Python-dev et les PEP
Durant les dernières années, les décisions de modification du langage passaient généralement par plusieurs phases.
D’abord, la proposition faite sur la mailing list python-idea. Cette liste est publique. Tout le monde peut y participer et y donner son avis.
Après débat, si le climat n’est pas hostile (ce qui est une notion TRES subjective), un des core devs suggère généralement à l’auteur de l’idée d’écrire un PEP.
Le PEP (Proposition d’Amélioration de Python) est l’équivalent d’une RFC pour Python. C’est un document formalisant une proposition d’amélioration du langage et de son écosystème. Le plus connu est bien entendu le PEP 8.
S’ensuit encore plus de débats, et des modifications itératives du PEP, jusqu’à, soit l’abandon du projet par l’auteur, soit l’oubli, soit le verdict de Guido.
Ce dernier est définitif: le PEP est approuvé ou rejeté. Dans le premier cas, il sera appliqué. Dans le second, il part à la poubelle.
Quelque part à la fin de ce processus, les implémenteurs du PEP discutent en plus petit comité, sur la liste python-dev, de la réalisation.
Guido a toujours, jusqu’ici, été donc la dernière étape de filtre de cet enchaînement. A la foi gardien de sa philosophie du langage, et goulot d’étranglement.
Il y a eu quelques améliorations, comme la nomination ponctuelle de BDFL délégués pour certains sujets, mais le format reste quand même globalement le même.
Pride and prejudice
Ce système a l’avantage d’être très ouvert. Tout le monde peut participer. Peu de personnes le font pourtant, par rapport à la masse d’utilisateurs de Python, mais c’est déjà beaucoup si on considère l’inertie que ça implique.
Le mail est un format très accessible, décentralisé, ouvert et standard. Son austérité évite l’effet réseau social qu’on voit trop souvent sur les outils plus modernes.
En contrepartie, le processus est très flou. Il n’y a pas de vote a proprement parler. Les threads s’enchaînent un peu n’importe comment. Les nouveaux venus ne sachant pas comment utiliser l’outil le font imparfaitement. Et le media ne permet pas facilement de suivre la continuité à court terme et à long terme de grand-chose, ni en termes de flux, ni en termes de référence, ni en termes de recherche.
Mais c’est aussi l’aspect social qui est problématique. Il n’y a aucune organisation claire dans la liste, et tout le monde semble “au même niveau”. Or ce n’est pas absolument pas le cas. La réputation et les participations passées, ainsi que les caractères des participants et leurs relations jouent énormément sur le processus. Le timing également.
Ça parait équitable sur le papier, mais c’est une illusion, et en prime cela implique des frictions qui pourraient être évitées. Par exemple quand un étudiant demande à Larry Hastings de l’aider à faire ses devoirs ou qu’un auteur de PEP cite le Zen of Python à Tim Peters. Inversement, quand vous proposez une idée, et que tout le monde vous envoie péter, mais que 6 mois plus tard, Brett Cannon dit que c’est intéressant et que tout le monde crie au génie, ça fout les boules.
Ajouté à cela, la qualité du débat qui peut varier du tout au tout : du caprice à la revue technique, en passant par le mail à côté de la plaque, la crise d’égo, l’appel au calme, le récap qui aide tout le monde, les idées brillantes, les suggestions étonnantes, les redites, et le spam.
Et évidement, la réponse par défaut est toujours non.
Se faire entendre là dedans est très difficile. Garder son calme l’est souvent aussi. Mais surtout, persévérer à travers le processus durant le temps nécessaire pour l’aboutissement de celui-ci est une épreuve épuisante, irritante, et ingrate. Surtout quand 9 fois sur 10, elle se finit par un rejet.
Un rejet cependant, n’est pas la mise à mort d’une idée. L’année suivante on peut relancer le débat, et ainsi de suite, comme un politicien à l’assemblée qui veut faire passer son projet de loi. Et comme au Parlement, la même idée présentée par une nouvelle personne, ou avec un autre timing peut avoir un résultat radicalement différent.
Un anus pour les rassembler tôt
GvR, bien qu’au sommet de cette pyramide, n’est pas isolé de tout cela, bien au contraire. Il est une des rares personnes qui doit trancher sur presque tout, et donc se coltiner une bonne partie des débats. Et des réactions quand il rejette l’idée d’autrui.
À ceci se rajoute sa présence sur les bugs trackers, et bien entendu son activité de développeur.
Un rôle difficile, fatigant, et un vrai sacerdoce pour quelqu’un qui pourrait dire “allez tous vous faire foutre, j’ai pondu ce langage utilisé par des millions de personnes tout seul, je sais mieux que vous” au lieu de prendre en considération l’avis du public.
Un rôle, je vous le rappelle, qu’il tient depuis plus de 20 ans.
Depuis la 3.4, on sent le poids commencer à peser sur ses épaules. A 62 ans, et toujours avec un travail à plein temps chez Dropbox (qui heureusement lui laisse le loisir de travailler sur Python), on peut imaginer l’énergie nécessaire pour s’impliquer encore autant.
Cela se ressent particulièrement dans ses mails et ses tickets. Une sorte de lassitude. Et une retenue qu’on devine de plus en plus difficile.
Honnêtement, je ne sais pas comment il a fait pour ne pas exploser sur quelqu’un. Dans certains échanges que j’ai eus avec lui sur la liste ou sur github, si nos rôles avaient été inversés, j’aurais sans aucun doute été bien moins diplomate.
sys.exit()
maintenant, avant que la charge ne devienne trop pesante, est à mon sens un acte de grande classe.
Comme un comédien, un musicien, un metteur en scène ou un écrivain qui fait ses adieux au sommet de son art. J’aurais aimé que Lucas, Spielberg et Besson aient su en faire autant.
Mais pour bien comprendre à quel point cette décision de laisser sa place demande du courage, il faut réaliser une chose: il laisse son enfant dans les mains des autres. L’œuvre de sa vie. Une réalisation colossale qui plus est, qui a généré des centaines de milliers d’emplois, fait tourner des milliers de projets.
Moi, j’ai du mal à m’imaginer arrêter d’écrire ce misérable petit blog. Et pourtant j’y ai pensé souvent.
L’étincelle qui a fait déborder la moutarde, c’est bien entendu le débat sans fin sur l’expression d’assignation, et la critique vigoureuse de son acceptation. (C’est vrai que c’était chaud)
Guido en a eu ras le cul, quoi.
So what now ?
Personnellement, j’accueille la nouvelle avec un mélange d’espoir et de mélancolie.
Python n’aurait jamais été ce qu’il est aujourd’hui sans la constante vigilance de son BDFL.
Dire “non” est la partie la plus importante pour sculpter une expérience. C’est ce qui fait la différence entre Gates et Jobs, Van dam et Lee, Hitler et… heu… non.
C’est ce qui fait qu’on n’a des lambda
bridées et pas d’opérateur pour ajouter un élément dans une liste. Qu’on le veuille ou pas.
Et c’est ce qui fait qu’un langage né en fucking 1985 (avant Java !) tient toujours la route aujourd’hui. A gardé sa lisibilité. Sa facilité de prise en main. Et continue d’être utile.
C’est un travail de titan !
Néanmoins je ne peux m’empêcher de noter que les dernières fonctionnalités majeures de Python ont été introduites de manière brouillonne. Je pense notamment au type hints et à asyncio, que Guido a bdfl -f
sans donner le temps de mûrir leur design. Elles ont mis plusieurs versions à ne serait-ce qu’être utilisables, et méritent encore du travail.
Je pense aussi que Python est prêt pour des ajustements, et espère que passer le flambeau à l’équipe de core dev va apporter du renouveau au langage.
En effet, il est peu probable qu’un nouveau BDFL s’installe, et bien qu’il soit trop tôt pour faire une prédiction, la mise en place d’un quorum semble plus probable. Dans ce cas, il faudra sans doute un vecteur de vote. Et de là, qui sait, naîtra peut-être un complément ou replacement à python-idea.
Je l’espère en tout cas.
Sortir de l’usage de la mailing list pour un outil plus encadré, mettant les propositions en avant, avec un système de sondage, des procédures plus claires, des références plus faciles au passé, et une distinction explicite du statut des personnes qui s’expriment.
Bref, faciliter l’accès au processus, tout en permettant une gestion plus saine. On ne voudrait pas que Victor ou Yuri nous posent leur dem dans les 6 mois pour cause de pétage-de-cablite aigue.
Également, qui sait, peut-être reviendra-t-on – pour le meilleur ou pour le pire ? – sur des BanDFL tel que:
- le pattern matching
- les exceptions sous forme d’expression
- pathlib.Path dans les builtins
- le mot clé
lazy
- et bien d’autres
Difficile de croire que le débat ne sera pas relancé maintenant que Cerbère ne garde plus les Champs Élysées.
Évidemment, il est logique qu’il y ait un temps de flottement. D’abord par respect pour le père de Python. Ça ferait un peu GoT d’enchaîner quand même. Ensuite parce qu’il va falloir qu’un nouveau mode de fonctionnement émerge, et prouve son efficacité.
Quoi qu’il arrive
Merci à Guido Van Rossum pour ce cadeau immense.
On va essayer de ne pas trop l’abîmer.
“On ne voudrait pas que Victor ou Yuri nous posent leur dem dans les 6 mois pour cause de pétage-de-clablite aigue.”
Suite à un burn out, j’ai cessé toute contribution à Python pendant 3 mois au début de l’année.
Je comprends tellement.
Ok, tout est foutu, sauve qui peu,,,
mais pas de panic. Je vais démarrer mon fork de Python avec vous les gars.
Stinner a la technic et Sam master dev,
et j’ai deja trouver le nouveau nom,,, équé s’appelera: “Pitou” comme mon chien( un caniche nain tres gentil) joke
Merci pour cet article, et encore et encore merci infiniment à Guido pour son œuvre.
Async/await c’est pas si mal maintenant. En tout cas c’est un truc que je comprends mieux que les promises.
Si je comprends bien, la pep précède l’implémentation ? Je crois que dans le monde php la rfc vient souvent avec un patch implémentant la feature… Ça peut faire du taf pour rien si la rfc est rejetée, du coup je trouve la procédure plus saine pour les pep.
Oui mais le pep peut venir avec un patch ou une branch de demo si l’auteur estime que ca aide sa proposition.
Quand a asyncio, il a fallut attendre la 3.5.3 pour que ce ne soit pas buggé en cas de multi threading, and la 3.7 pour avoir asyncio.run qui aurait du être là depuis le début. Je ne parles même pas de la doc qui fait la promotion de loop.run_forever + asyncio.ensure_future alors que la bonne pratique (la seule qui permette de garder sa sanité) et loop.run_until_complete + asyncio.gather.
Mais je pense que ça va se passer comme avec unicode. Notre support de base était tellement pourri qu’on a finit avec une des meilleures implémentations du monde :)
> Moi, j’ai du mal à m’imaginer arrêter d’écrire ce misérable petit blog. Et pourtant j’y ai pensé souvent.
Il est peut-être misérable et petit, mais pour les petites et misérables gens comme nous, lecteurs, ça nous aide à nous identifier et nous sentir un groupe. On a besoin d’être social. On ne peut pas être tout seul.
À l’inverse, quand on est constamment avec des gens qui n’arrêtent pas de nous critiquer, on a forcément envie de prendre sa retraite. Et oui, savoir prendre sa retraite, c’est la meilleure chose du monde. Les retraités font un boulot de dingue, rien que parce qu’ils sont motivés, et qu’ils savent qu’ils ne doivent rien à personne.
Je veux bien parier que l’activité de Guido en tant que retraité de BDFL sur Python sera bien plus prolifique qu’avant.
Si l’on sort d’une dictature, peut-être faudrait-il envisager la suite une démocratie. Une base neutre telle qu’un outil pourrait voir le jour pour expliciter et assurer le processus d’acceptation des nouvelles idées. Pour ceux qui proposent il y aurait un bouton “My ideas” et on verrait :
Il y aurait un système de vote qui pourrait avoir plusieurs niveaux (communauté puis core-devs). On aurait l’historique des versions des propositions… Les commentaires de chacun et surtout qui est qui (ou qui est quoi). Ce serait beau, mais je ne saurais dire si ça supprimerait les biais (parfois bénéfiques) introduits par les personnes, le timing ou les intérêts personnels.
Merci pour la dépêche et l’edito.
Petite typo :
> Néanmoins je ne me peux m’empêcher
un “me” de trop
> Néanmoins je ne peux m’empêcher
@Tim: la démocratie dans un projet comme ça, c’est le meilleur moyen de n’avoir aucune vision produit et de se retrouver avec un vrac, ne blaissant personne et moyen en tout.
@ticabri: merci
> @Tim: la démocratie dans un projet comme ça, c’est le meilleur moyen de n’avoir aucune vision produit et de se retrouver avec un vrac, ne blaissant personne et moyen en tout.
J’ai pensé à la même chose, « Design by committee » (https://en.wikipedia.org/wiki/Design_by_committee) m’est venu à l’esprit.
La fin d’une époque…
La PEP 401 va “enfin” s’appliquer ( https://www.python.org/dev/peps/pep-0401/)!
Gloire au Friendly Language Uncle For Life :)
Merci Sam pour l’édito!
Bravo à Guido et tout les core-dev / contributeurs pour ce travail de titan
Hello,
Autres typos :
– les implémenteurs du PEP discutent en plus petit commité -> les implémenteurs du PEP discutent en plus petit comité
– et que tout le monde cri au génie, ça fout les boules -> et que tout le monde crie au génie, ça fout les boules
En tout cas, merci pour tous ces articles de qualité ;)
Python sans Guido c’est comme Apple sans Jobs…ça va mal finir sur le long terme.
Les gens n’ont toujours pas compris que dans toute aventure humaine il faut des chefs et
des personnalités fortes, mais on a lavé le cerveau des gens avec des faux concepts de démocratie
participative…donc désormais tout le monde se prend pour un chef, tous chef personne responsable…comme au taff quoi…
Gérer un projet de cette taille et avoir la tête dans le Guido, c’est ballo ;)
Merci pour l’article.
Petite typo:
“C’est ce qui fait qu’on n’a des lambda bridées” -> “C’est ce qui fait qu’on a”
Deux autres coquilles :
– A la foi -> A la fois
– on n’a des lambda -> on a des lambda
> tous chef personne responsable…comme au taff quoi…
Pas encore lu, mais je crois que « Jouer sa peau: Asymétries cachées dans la vie quotidienne » traite de ce sujet (https://www.amazon.fr/Jouer-peau-Asym%C3%A9tries-cach%C3%A9es-quotidienne/dp/2251447598/).
« Êtes-vous prêt à mettre votre peau en jeu ?
Pourquoi devrait-on cesser d’écouter ceux qui parlent au lieu d’agir ? Pourquoi les entreprises font-elles faillite ? Comment se fait-il que nous avons plus d’esclaves aujourd’hui qu’au temps des Romains ? Pourquoi imposer la démocratie aux autres pays ne marche jamais ?
Réponse : trop nombreux sont ceux qui dirigent le monde sans mettre leur peau en jeu. »