Ma première contribution au noyau m’a été volée
(ariel-miculas.github.io)- Ariel Miculas a enquêté sur un problème qui cassait le débogage multithread avec gdbserver sur PowerPC32 et a découvert un bug de corruption mémoire dans le noyau Linux, mais le correctif final a été intégré sous forme d’un patch séparé du mainteneur, ne lui laissant qu’un crédit
Reported-by - Les indices venaient d’un ancien fil de discussion par e-mail portant sur les mêmes symptômes et d’un commit qui déplaçait l’emplacement de
thread_struct threaddanstask_struct; certains threads restaient dans un état de processus incorrect, ce qui faisait perdre le contrôle à gdbserver - L’analyse de la cause a utilisé
pahole, ftrace et des points d’arrêt matériels basés sur le DABR de PowerPC ; elle a confirmé qu’un débordement de tampon dansptrace_put_fprécrasait des champs commetask_struct.__state - Le débordement se produisait parce qu’un index prévu pour des éléments 32 bits était appliqué à un tableau 64 bits ; après le tableau
fp_state.fpr, qui ne contient que 32 entrées, le gdbserver côté utilisateur pouvait écrire jusqu’à 256 octets au-delà de la limite - Le mainteneur PowerPC Michael Ellerman a appliqué son propre correctif ; dans une réponse ultérieure, il a présenté des excuses, reconnaissant que le seul crédit
Reported-byne reflétait pas correctement la contribution et qu’il aurait fallu faire évoluer le patch avec lui
Débogage gdbserver cassé sur PowerPC32
- Il y a environ un an et demi, Ariel Miculas a demandé du temps dans son ancienne entreprise pour enquêter sur un problème qui bloquait les fonctionnalités de débogage d’un projet
- Le problème était que, sur l’architecture PowerPC32, gdbserver ne parvenait pas à déboguer correctement les applications multithread
- La connexion à gdbserver se coupait et il n’était plus possible de contrôler la session de débogage
- Il n’était pas certain que la cause se trouve dans la toolchain, gdbserver, le noyau Linux ou des patches noyau personnalisés
- Après des recherches et une enquête sur l’existant, il a trouvé un fil de discussion par e-mail décrivant les mêmes symptômes
- Ce fil pointait aussi vers le commit ayant provoqué le problème
- Le patch en question déplaçait la définition de
thread_struct thread, auparavant au milieu detask_struct, vers la fin
Des indices menant de l’état des threads à une corruption mémoire
- Selon l’analyse existante de Holger Brunck, gdbserver envoyait un
SIGSTOPau noyau pour chaque thread et attendait une réponse, mais en situation d’erreur le noyau ne répondait qu’à certains signaux - À bas niveau, après interaction avec gdbserver, certains threads se retrouvaient dans un état de processus incorrect, puis gdbserver perdait le contrôle
- Ariel a passé trois à quatre jours à lire les descriptions de commits liés à PowerPC et les changements autour de
task_struct, afin de vérifier si le problème avait été résolu dans des versions ultérieures du noyau, mais n’a pas trouvé de solution - Il a modifié l’emplacement de
thread_struct threadpour confirmer les conditions de reproduction, et a examiné la disposition detask_structavec pahole - Il a utilisé ftrace pour suivre quand les threads du processus débogué étaient ordonnancés
- Les threads bloqués n’étaient ordonnancés qu’une seule fois, contrairement aux autres threads
- Cette observation l’a amené à reconsidérer la possibilité d’une corruption mémoire
La cause réelle trouvée grâce aux points d’arrêt matériels
- Il a confirmé que, comme les debug registers sur x86, PowerPC disposait d’une fonctionnalité similaire via le registre DABR
- Après avoir étudié comment utiliser les points d’arrêt matériels sous Linux, il a implémenté un module noyau en s’appuyant sur une réponse Stack Overflow
- Avec ce module, il a posé un point d’arrêt matériel sur le champ
task_struct.__stateafin de tracer qui écrivait cette valeur - Le module noyau personnalisé affichait la stack trace de l’emplacement qui écrivait dans
task_struct.__state, et l’un des chemins suspects menait à un débordement de tampon dansptrace_put_fpr ptrace_put_fprest utilisé par l’API POKEUSER, et le débordement écrasait des champs importants detask_struct, comme__state__statestocke l’état du processus- Le noyau utilise aussi ce champ pour suivre les processus arrêtés par un débogueur
Une écriture de tableau pouvant dépasser jusqu’à 256 octets
- La cause du débordement était l’application à un tableau d’éléments 64 bits d’un index conçu pour écrire dans un tableau d’éléments 32 bits
- L’index pointant vers les FPR comportait 64 valeurs, et la plage d’accès avec des éléments de 64 bits était de
64 * 8 = 512octets - En réalité, le tableau
fp_state.fprne contenait que 32 entrées, avec seulement32 * 8 = 256octets de mémoire utilisable - Résultat : l’utilisateur, c’est-à-dire gdbserver, pouvait écrire jusqu’à 256 octets au-delà de la fin du tableau
Soumission upstream et conflit autour du crédit
- Ariel a estimé que ce problème de corruption mémoire, capable d’écraser la mémoire d’état des processus, pouvait avoir un impact de sécurité et a envoyé le patch à
security@kernel.org- Cette liste de diffusion étant privée, il n’était pas possible de lier le patch soumis à l’origine
- Le mainteneur PowerPC Michael Ellerman l’a contacté en privé pour répondre qu’il allait traiter le problème
- Ariel a envoyé deux patches de correction
- Le patch original envoyé à la liste de diffusion sécurité
- Une autre version du patch intégrant des suggestions faites sur la soumission originale
- Le second patch s’appuyait sur du code noyau existant qui émulait le comportement PowerPC32 sur PowerPC64, et ce code gérait correctement l’indexation des FPR
- Michael Ellerman n’a accepté aucun des deux patches et a implémenté son propre correctif
- Ariel voulait que son patch soit accepté, à la fois pour le mérite d’avoir corrigé ce problème et pour être crédité comme contributeur au noyau pour la première fois ; il était aussi prêt à envoyer une version de suivi intégrant les retours
- En pratique, le seul crédit reçu a été le tag
Reported-by, ce qu’Ariel a jugé injuste au regard des efforts consacrés à l’analyse de la cause, au correctif, aux tests, à la validation, à la prise en compte des retours internes et à l’adaptation au noyau le plus récent- D’après la documentation Linux,
Reported-byest un tag qui crédite la personne ayant trouvé et signalé un bug - Ce problème avait déjà été signalé six ans auparavant
- D’après la documentation Linux,
Mise à jour et réponse d’excuses
- Un utilisateur de Hacker News a signalé un e-mail dans lequel Michael Ellerman écrivait : « merci pour le patch, mais je préférerais corriger autrement. Peux-tu tester le patch ci-dessous pour vérifier qu’il corrige le bug ? »
- Cet e-mail montre que Michael Ellerman a choisi sa propre implémentation plutôt que de relire le patch d’Ariel, et a demandé à Ariel de tester ce patch
- Ariel a retrouvé le patch original envoyé à la liste de diffusion sécurité et a transféré le fil de discussion vers linuxppc-dev
- La mise à jour ultérieure inclut une réponse d’excuses concernant la manière dont le patch a été traité
- Elle contient notamment : « j’aurais dû consacrer plus de temps à faire évoluer ton patch avec toi »
- Elle indique également que le tag
Reported-byne reflétait pas correctement la contribution d’Ariel
1 commentaires
Avis sur Hacker News
Même s’il ne fallait pas accepter l’intégralité du patch, il aurait été plus approprié de créditer Ariel Miculas.
Il y a de fortes chances que ce problème de sécurité n’aurait été corrigé par personne s’il ne l’avait pas trouvé et envoyé une proposition de correction.
Si Michael a lu son patch, n’a modifié que quelques éléments de style puis l’a soumis sous son propre nom, ne pas lui attribuer de crédit est contraire à l’éthique ; même si le code était mauvais, cela restait une collaboration, et après une telle expérience on n’aurait pas envie de retravailler ensemble.
Dans ce dernier cas, il reste au moins un
Co-Authored-By, mais je n’ai compris à quel point l’expérience pouvait être amère pour le contributeur que lorsqu’une personne a déversé le code de mon projet dans son propre dépôt, sans historique de commits, en appelant ça un « fork ».Même si le code était mauvais, la correction refactorée qui a été fusionnée n’aurait pas existé sans lui, et dire « ma version est meilleure » peut être perçu comme assez méprisant.
Cela dit, après avoir vu une réponse qui renvoie à la vraie réponse du mainteneur, la dernière phrase ne tient pas.
Mais dans ce cas, l’auteur du billet est plutôt un coauteur de ce patch.
Dans l’édition académique, ce serait un peu comme envoyer une prépublication à quelqu’un, puis voir cette personne publier un article sur le même sujet en vous mentionnant seulement dans les remerciements, sans vous inclure comme coauteur.
Ici, il ne s’agit pas de publication académique mais de développement du noyau, mais la mention d’auteur reste importante dans un CV professionnel.
Les retours sur le style et la cohérence de structure sont nécessaires, mais un bon mainteneur est quelqu’un qui reconnaît le mérite et fait en sorte que les choses avancent sans heurts en coulisses.
À l’époque, quand Ted Tso a été satisfait de l’exactitude de mon travail, il a intégré le patch, et je n’ai ni demandé ni reçu de crédit.
Ce qui m’intéressait, c’était seulement d’améliorer le noyau, pas d’y laisser mon nom.
Quelques années plus tard, mon nom s’est retrouvé dans la liste des contributeurs pour autre chose, mais dans un cas comme dans l’autre, ça m’était égal.
Reported-by: Ariel Miculas, et cela semble exact.Le patch du mainteneur est meilleur.
fpidx < (PT_FPSCR - PT_FPR0)dans le cas 32 bits.*data = child->thread.fp_state.fpscr;utilisée quandfpidxest hors limites dans la fonctionput.FPRINDEX, qui se réduit à une identité quandTS_FPRWIDTHvaut 1.Le message de commit du patch original disait « sur PPC32, on peut supposer que
TS_FPRWIDTHvaut 1 », tout en incluant quand mêmeFPRNUMBER,FPRHALFetFPRINDEX.Ce n’est pas parce qu’on a trouvé une incohérence de tableau facile à corriger qu’il faut accepter tel quel un patch bogué.
Cela dit, le mainteneur aurait dû reconnaître que Miculas n’avait pas simplement signalé le problème : il l’avait étudié, avait trouvé la cause racine et avait même produit sa propre version d’une correction simple presque identique.
Reported-byest imprécis pour exprimer la nuance selon laquelle la personne concernée a mené une investigation approfondie et identifié la cause.C’est souvent ainsi qu’on procède avec les nouveaux contributeurs dans un projet, et c’est la bonne manière de faire.
C’est un processus d’apprentissage et d’intégration ; si l’on refait simplement le travail à leur place, on sape leur motivation à contribuer et on leur retire aussi l’occasion d’apprendre.
Écrire une deuxième version est toujours plus facile.
Qualifier cela de simple correction, c’est ne pas comprendre la quantité de travail qu’implique la correction de bugs en développement logiciel.
Ici, Michael a lui-même reconnu qu’il n’avait pas réussi à reproduire le problème au début et ne l’avait confirmé que plus tard.
Cela montre bien la quantité de travail que l’OP a consacrée au débogage et à la correction, et il n’est pas correct de s’approprier ce travail.
Dans le texte original, il disait vouloir que son patch soit accepté pour obtenir le crédit et devenir contributeur du noyau, et qu’il était prêt à envoyer des versions suivantes en tenant compte des retours.
Le mainteneur aurait pu checkout le code de l’OP, y apporter les changements souhaités, puis prendre les deux minutes nécessaires pour committer en tant que coauteur.
Ainsi, la meilleure correction aurait été fusionnée et le travail de quelqu’un d’autre aurait aussi été reconnu.
C’était d’autant plus la meilleure solution que l’OP avait clairement exprimé vouloir être crédité.
Cela dit, ces mainteneurs de dépôts semblent souvent manquer de savoir-vivre, donc ce n’est pas très surprenant.
Les PR ne sont souvent pas acceptées pour diverses raisons, mais je ne m’en soucie pas.
J’envoie des PR pour rendre le code public, pas pour passer du temps à les rendre suffisamment « bonnes » pour être fusionnées.
Je les fournis telles quelles, et si quelqu’un les apprécie assez, il peut s’occuper de la procédure.
Certaines ont été fusionnées telles quelles, d’autres ont été un peu modifiées par le propriétaire du dépôt avant d’être fusionnées.
Je n’écris pas du code open source pour la gloire ou la popularité, mais parce que j’aime ça.
Les années 80 et 90 me manquent.
Le noyau Linux n’est pas une récompense, et même si je compatis avec l’auteur du post, il est normal que la communauté préfère la solution la plus maintenable parmi les versions proposées
Le mainteneur était donc dans son périmètre d’autorité
Cela dit, il est très facile de créditer la personne qui a contribué au correctif
Dans Node.js, on attribue le mérite dans les notes de version, et quand on reprend une partie du travail d’une PR en la modifiant, on essaie d’ajouter
Co-Authored-By:Quand on maintient un projet depuis longtemps, le crédit finit par compter moins pour soi-même, et il est facile d’oublier qu’il compte énormément pour les nouveaux contributeurs
Dans un cas comme celui-ci, où partager le crédit était important pour l’auteur du post et mérité, le manque d’attention a été une perte à la fois pour lui et pour cette partie de Linux
Ce n’est pas une façon durable de faire vivre un projet qui dépend des efforts de la communauté
Pour un projet aussi vaste et respecté que le noyau Linux, je pensais qu’il y aurait des gens capables de veiller à l’intérêt du projet tout en respectant les nouveaux contributeurs
Personne ne dit qu’il faudrait accepter une solution qui n’est pas la meilleure simplement parce qu’elle vient d’un nouveau contributeur
La bonne approche consiste à relire le patch, expliquer ce qui pose problème et pourquoi, proposer comment le réécrire, et, si nécessaire, écrire cette partie ensemble afin de devenir coauteurs
C’est ainsi qu’on crée un flux de contributeurs qui continueront à s’y intéresser
Reported-ByLa documentation du noyau définit
Suggested-bycomme l’une des conventions de tagsLe tag
Suggested-by:indique que l’idée du patch a été proposée par cette personne et garantit qu’elle soit créditée pour cette idéeIl est notamment indiqué qu’il ne faut pas l’ajouter sans l’autorisation de la personne à l’origine de la suggestion, surtout si l’idée n’a pas été publiée sur un forum public
Le texte précise aussi que créditer correctement les personnes qui signalent des idées augmente les chances qu’elles aident à nouveau à l’avenir
Dans cette situation,
Suggested-byaurait peut-être été plus appropriéCela aurait mieux exprimé le fait qu’il avait trouvé la solution au problème, mais que, n’étant pas familier avec le projet, la syntaxe exacte du patch n’avait pas été conservée
Référence : https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
L’un place le
ifdefà l’extérieur duif, l’autre dans leifinterne ; il ne s’agirait donc pas d’une différence technique, mais d’une différence de styleSi c’est le cas, l’auteur a fait bien plus que simplement « suggérer » une idée de patch
Il a débogué le problème et rédigé le patch complet, qui a été accepté avec une petite modification
1 : https://news.ycombinator.com/item?id=37672558
Pour les problèmes de sécurité, la rapidité et l’exactitude comptent davantage que la forme, et les mainteneurs du noyau ont correctement traité le sujet en le créditant avec
Reported-bySuggested-byaurait été un peu mieux, mais ce n’est pas ce que voulait l’auteur du post ; il semble qu’il voulait le badge de « contributeur au noyau » sur la base d’un très petit patchÀ voir certaines réactions dans ce fil, j’espère que certains ne géreront surtout pas de développeurs juniors ou intermédiaires
Si vous avez dans l’équipe un junior motivé, qui soumet une PR utile sur un problème mais de qualité insuffisante, la pire réaction est de le réprimander parce que ce n’est « pas assez bien », de jeter son code puis de le réécrire soi-même
Cela casse sa motivation, fait perdre du temps à cette personne comme à vous, l’empêche d’apprendre quoi que ce soit, l’empêche de s’améliorer ou de contribuer utilement la prochaine fois, et le dissuade aussi de demander de l’aide ou de contribuer spontanément
Même s’il s’est attaqué à une zone de code complexe, il existe de meilleures façons d’interagir
Pour un junior de l’équipe, on s’attend à ce qu’il reste un certain temps, et l’entretien a déjà permis de vérifier dans une certaine mesure ses compétences de base, donc on peut faire confiance à son potentiel de progression
Une personne quelconque sur Internet n’a aucune obligation de rester, et la plupart de ces correctifs « drive-by » ne débouchent sur rien de durable
On ne sait pas quelles sont réellement ses compétences, ni comment elle réagira aux demandes de modification
Du point de vue du management, l’une des choses les plus frustrantes est que quelqu’un place une personne quelconque dans ma ligne hiérarchique et me rende responsable de ses performances
Maintenant, imaginez qu’une personne sur Internet, pétrie d’un fort sentiment de dû, ait passé quelques jours à produire un correctif médiocre, et qu’on attende de moi que je la coache comme si j’étais son manager : cette analogie ne tient pas
Avant, je me demandais pourquoi il y avait tant de remous autour des PR non sollicitées quand on héberge un projet sur GitHub, mais maintenant je comprends
Se faire accuser d’être un « mauvais manager qui casse la motivation et fait perdre du temps » parce qu’on ne veut pas gérer des PR aléatoires, c’est un niveau excessif de sentiment de dû
Exemple : https://news.ycombinator.com/item?id=25940799
Devenir professionnel, c’est aussi apprendre à séparer sa personne de son travail, et à comprendre que ses collègues ne cherchent pas à nous barrer la route par un plan malveillant
Tout le monde a déjà vu un projet de plusieurs mois annulé, ou reçu des commentaires durs en code review
Accepter ce genre de choses et en tirer des leçons fait partie du métier de professionnel
Bien sûr, les personnes directes et impolies doivent aussi apprendre que cette attitude détruit beaucoup de relations
Nous ne sommes pas des artistes, nous sommes des professionnels
Si un ingénieur civil junior conçoit un pont présentant des défauts structurels et que le senior dit « désolé, mais à ce stade c’est difficilement récupérable, je vais devoir tout refaire », le senior n’a rien à se reprocher
Je n’ai pas envie de rouler sur un pont bancal pour préserver l’ego d’un junior
On dirait que beaucoup de commentaires, écrits par des gens qui n’ont pas beaucoup d’expérience de maintenance de grands projets open source, voient les mainteneurs comme particulièrement durs
Quand on maintient même un petit projet open source, traiter les PR de personnes quelconques représente beaucoup de travail, et prend souvent plus de temps que de le faire soi-même
Il faut relire le code minutieusement, échanger avec le contributeur pour corriger les problèmes, et aligner le tout sur le niveau de qualité attendu et les conventions
Un junior en entreprise a déjà passé un entretien, alors qu’ici il s’agit d’un inconnu quelconque qui demande un changement
C’est décevant quand une PR est refusée, mais je comprends les deux points de vue
En lisant les échanges du mainteneur, il ne me semble pas particulièrement méchant ou impoli
On se croirait presque dans un mauvais fil de la LKML
Cette personne a littéralement fait 95 % du travail, et on lui reproche de vouloir être créditée
Je ne comprends vraiment pas pourquoi
En comparant les deux patchs, on voit une différence claire
La contribution dans l’article lié modifie le comportement des deux branches
if...else, tandis que la contribution finale ne modifie que le chemin dans la brancheifLe mainteneur avait sans doute une raison de changer le code
Cela dit, le correctif effectif a été copié presque à 100 %, donc il aurait été approprié de donner le crédit à l’auteur du patch initial
Le résultat initial n’a pas non plus de
flush_fp_to_threadni de conditionelsesur l’architecture PPC32Le patch final appelle
flush_fp_to_thread(child);, traite le cas selonCONFIG_PPC32à l’intérieur de la vérification de plage defpidx, puis affectefpscrsi l’on est hors plageIl y a donc une vraie différence entre les deux solutions
Je ne peux pas dire laquelle est correcte ou meilleure, mais il est clair que le résultat diffère
Cela peut indiquer une certaine immaturité en C
La maintenance d’une grande base de code, c’est pour moitié éteindre des incendies, et pour moitié éviter les collisions de noms
Ce patch était assez différent, et j’aurais dû l’enregistrer quelque part pour pouvoir le montrer
Cela fait partie du fonctionnement normal des contributions au kernel
Souvent, la façon la plus concise de communiquer un problème est un patch, donc on envoie un patch, et l’attente devrait être qu’ils ne l’utiliseront pas tel quel
Rien qu’en y repensant, cela m’est arrivé au moins trois fois [1][2][3]
Honnêtement, il ne m’est jamais venu à l’idée de me mettre en colère, parce que mon objectif principal était de corriger le bug, et j’étais content que ce soit fait
Je recommanderais sincèrement à l’OP de supprimer ce billet de blog. Il le regrettera plus tard
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
[3] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin...
J’ai été assez surpris de voir le nom de l’autre personne
Dans les projets open source, ce genre de chose arrive tout le temps, et au final cela ne fait que décourager les contributions futures
L’an dernier, j’ai pris en charge une issue ouverte depuis plusieurs années, créé une PR, corrigé aussi le code de test, et même fait un travail séparé pour corriger un problème de build
Le mainteneur n’a repris que la PR qui corrigeait le problème de build et a simplement ignoré l’issue d’origine
Il n’y a absolument aucune chance que je consacre de nouveau du temps à contribuer à ce projet
On ouvre une PR, puis on reçoit des commentaires demandant des changements
Quelques jours plus tard, quand on a le temps de les corriger, elle est déjà fermée par une autre PR soumise par un contributeur régulier
En regardant cette PR, on voit qu’elle est quasiment identique à mon code, avec seulement un nom de variable changé, et qu’elle est approuvée instantanément selon un critère de review « entre amis »
Quand on regarde le profil de cette personne, presque toutes ses contributions sont du code copié d’autres personnes
J’essaie de les aider à nettoyer leur contribution pour qu’elle s’accorde avec le reste du codebase, et c’est ce qu’il y a de plus difficile
Parce que la plupart des développeurs veulent simplement pousser leur correction plutôt que d’apprendre d’abord les conventions du projet
Malgré tout, si le code est à peu près correct et qu’après le merge il me suffit de passer une quinzaine de minutes à le retoucher et à ajouter quelques tests, je l’accepte
Ce cas-ci ressemble aussi à ce genre de situation, et le mainteneur aurait dû agir ainsi
Le contributeur aurait obtenu le crédit, et le mainteneur n’aurait eu qu’à faire quelques minutes de nettoyage nécessaires pour que ce soit accepté en amont ; tout le monde aurait été content
Dire « ma version est meilleure » est très arrogant et peu professionnel, qu’elle soit effectivement meilleure ou non
Si vous n’avez pas réussi à corriger le problème pendant les six années qui ont suivi son premier signalement, vous devez reconnaître que, sans la contribution de cette personne, votre propre correctif n’aurait pas existé non plus
Voir la « solution » puis reprendre le correctif revient, en pratique, presque à du vol
Les gens prennent personnellement le fait que leur code ne soit pas accepté ou soit réécrit, mais ils oublient que l’écriture de code n’est qu’une petite partie de la gestion d’un projet
En général, je regarde les rapports de bugs et les demandes de merge pour évaluer comment les patchs seront traités
Sur les projets qui ne semblent pas propices aux contributions, j’ai tout simplement abandonné de nombreuses corrections de bugs, et le kernel Linux de 2003 en était un exemple
Certains projets fonctionnent simplement comme ça : mieux vaut ne pas s’en mêler, c’est généralement une perte de temps
Désormais, depuis la révolution de l’IA et les violations massives des licences open source, je n’ai plus soumis de code open source et je ne le ferai plus
J’ai vraiment du mal à comprendre la toxicité ici
Les discours du genre « il ne faut pas faire ça pour la reconnaissance, les étoiles, les récompenses ou le CV » me semblent délirants
Les gens qui disent ça ont-ils un emploi ? Si oui, pour être cohérents, ils devraient travailler entièrement gratuitement
Un salaire est aussi une forme de reconnaissance d’une contribution
Personnellement, même si la solution finale diffère de celle proposée, si elle repose sur la découverte de la solution initiale, ajouter un coauteur est une toute petite chose
L’auteur a des raisons valables de s’en plaindre, et ce ne sera ni la première ni la dernière fois que quelqu’un a le sentiment que sa contribution n’est pas reconnue
Même si le patch lui-même était inférieur, l’effort de débogage ne l’était certainement pas
Dans un emploi, l’employeur et l’employé concluent un accord selon lequel un travail est effectué en échange d’une rémunération
Si vous entrez sans prévenir dans une entreprise et commencez à faire un travail que personne n’a demandé, peu de gens soutiendraient que vous avez droit à une rémunération
L’analogie la plus juste avec ce qui est arrivé à l’OP est plutôt celle-là
Une réponse du genre « désolé, mais ma version est meilleure. Si tu veux devenir contributeur du noyau Linux, voici un problème que tu peux corriger » est un excellent moyen de faire en sorte que quelqu’un ne veuille plus jamais aider, et de démotiver les autres au passage
Le mainteneur disait qu’il n’avait pas pu reproduire le crash avec
gdbserver, mais qu’il disposait d’un cas de test montrant le bug, qu’il l’avait vérifié et avait testé le correctif ; il a écrit : « merci pour le patch, mais je voulais corriger ça autrement. Peux-tu essayer le patch ci-dessous et vérifier si le bug est corrigé ? »https://lists.ozlabs.org/pipermail/linuxppc-dev/2022-June/24...
Il y avait aussi d’autres commentaires de revue qui n’ont pas été mentionnés
Ils disaient qu’on ne voyait pas bien l’intérêt d’une macro réservée à PPC32, qu’il fallait éviter autant que possible les
#ifdef, et que le patch de Michael était plus facile à comprendrehttps://lists.ozlabs.org/pipermail/linuxppc-dev/2022-June/24...
L’OP met des mots dans la bouche de l’autre personne puis s’en indigne, ce qui n’est pas une bonne stratégie, surtout dans une communication écrite
L’OP donne l’impression que l’échange a été discourtois, mais ce n’était pas le cas