Le danger de jamais suggérer une fonctionnalité sur un produit, en particulier l'open source, est que vous obtiendrez la réponse "pourquoi ne le faites-vous pas?".
C'est valable et c'est cool que vous puissiez faire le changement vous-même. Mais nous savons pratiquement que les produits s'améliorent souvent lorsque les programmeurs écoutent la voix des utilisateurs - même si ces utilisateurs sont d'autres programmeurs. Et, le moyen efficace d'apporter ces changements peut inclure une personne qui travaille déjà sur le projet en reprenant l'idée et en la mettant en œuvre.
Il existe des termes courants utilisés pour désigner les problèmes de développement logiciel. par exemple. Bikeshedding . Y a-t-il un terme commun utilisé qui répond essentiellement: "Oui, je sais que je peux changer à peu près n'importe quoi dans le monde - même une source fermée. Je pourrais être embauché et aller écrire ce code. Mais dans ce cas, je fais juste une observation qui peut en fait être utile pour un autre codeur déjà bien adapté pour effectuer facilement ce changement - ou tout simplement pour discuter des possibilités. "
[p.s. (quelques jours) - J'aurais dû souligner que "soumettre un patch" est souvent dit avec un humour ironique, et je cherche une réponse spirituelle appropriée.]
C'est un point difficile: puisque l'utilisateur ne paie pas directement ou indirectement un produit, il ne peut pas demander la mise en œuvre d'une fonctionnalité. Ce n'est pas comme si vous étiez une partie prenante ou un client direct qui avait commandé le produit, et même pas un utilisateur final d'un produit commercial.
Cela étant dit, "soumettre un correctif" n'est pas une réponse valide. Ce n'est pas poli. Ce n'est pas correct. Même pour un produit open source. "Soumettre un correctif" est la version courte de:
"nous ne nous soucions pas si vous aimez notre produit ou non. Allez le modifier si vous le souhaitez, mais ne nous dérangez pas avec vos demandes des clients."
Qu'en est-il de la soumission d'un patch?
Eh bien, ce n'est pas si facile. Pour le faire:
Vous devez connaître la ou les langues utilisées dans le projet open source.
Vous devez pouvoir charger le code source à partir du contrôle de version pour pouvoir le modifier.
Vous devez avoir installé toutes les versions correctes de toutes les dépendances de build (y compris les bibliothèques d'exécution et les outils de build).
Vous devez être capable de compiler ce code source, ce qui n'est pas si évident dans certains cas. Surtout, quand un énorme projet prend quelques heures à compiler et affiche 482 erreurs et des milliers d'avertissements, vous pouvez être courageux d'aller chercher la source de ces erreurs.
Vous devez très bien comprendre comment le projet est réalisé, quel est le style de codage à utiliser, le cas échéant, comment exécuter des tests unitaires, etc. Si le projet ne dispose pas d'une documentation décente (qui est c'est souvent le cas pour les projets open source), cela peut être très difficile.
Vous devez vous adapter au projet et aux habitudes des développeurs qui participent activement au projet. Par exemple, si vous utilisez .NET Framework 4 quotidiennement, mais que le projet utilise .NET Framework 2.0, vous ne pouvez pas utiliser LINQ, ni Code Contracts, ni d'autres milliers de nouvelles fonctionnalités des dernières versions du framework.
Votre patch doit être accepté (à moins que vous ne fassiez le changement que pour vous-même, sans l'intention de le partager avec la communauté).
Si votre intention est de participer activement au projet, vous pouvez faire toutes ces choses et y consacrer votre temps. Si, d'autre part, il n'y a qu'un bug mineur ennuyeux ou une fonctionnalité simple qui manque, passer des jours, des semaines ou des mois à étudier le projet, alors faire le travail lui-même en quelques minutes est tout simplement déraisonnable, sauf si vous l'aimez.
Y a-t-il donc une riposte canonique à "c'est open source, soumettre un patch"? Je ne pense pas. Soit vous expliquez à la personne qu'elle est impolie, soit vous arrêtez simplement de lui parler.
La riposte canonique consiste à soumettre un patch.
C'est la réponse standard lorsque les développeurs ne pensent pas qu'ils seront en mesure de faire quelque chose dans un délai raisonnable, mais cela a été mentionné à plusieurs reprises.
C'est plus injuste quand cela a été soulevé à plusieurs reprises, mais la personne qui a mentionné le plus récemment ne le sait pas, et obtient tout de suite "nous prenons des correctifs pour cela" tout de suite. Dans ce cas, le responsable en a marre de la discussion mais l'utilisateur pense que c'est un nouveau sujet. Quoi qu'il en soit, très probablement si vous "prenez des correctifs" immédiatement, vous ne devriez pas le prendre personnellement, mais vous voudrez peut-être lire les archives et le suivi des bogues pour plus de détails sur le problème.
Si vous lancez vous-même une demande à plusieurs reprises, "prendre des correctifs" est potentiellement destiné à être une solution de rechange relativement polie, par rapport à d'autres alternatives moins polies ...
Et puis bien sûr, il y a des responsables grossiers qui diront "prendre des correctifs" sans aucune explication à personne, mais je dirais que c'est une minorité.
Si vous avez déjà géré un projet open source avec un grand nombre d'utilisateurs, vous saurez qu'il y a 100 fois plus de demandes que les responsables ne pourraient jamais atteindre, et bon nombre de ces demandes sont importantes pour le demandeur, mais ce serait extrêmement difficile, ou perturberait beaucoup d'autres utilisateurs, ou aurait un autre défaut qui n'est visible qu'avec une compréhension globale du projet et de la base de code. Ou parfois, il n'y a que des appels au jugement, et il faut trop de temps pour se disputer sans cesse.
La plupart des entreprises non open source ne vous donneront pas du tout accès aux développeurs, et vous obtiendrez simplement le traitement silencieux ou une histoire polie mais bidon du support client. Donc, en open source au moins, vous avez quelques options (payer quelqu'un pour coder la fonctionnalité, etc.) et bien que les développeurs puissent être impolis, au moins ils donnent des réponses directes. Je préfère avoir "non" que d'habitude "c'est sur notre feuille de route ... [2 ans plus tard] ... c'est toujours sur notre feuille de route" le genre de chose que j'ai obtenu d'un certain nombre de fournisseurs ...
Je ne pense donc pas qu'il y ait de réplique. Peut-être que le mainteneur open source est juste très occupé, peut-être qu'il est un con, mais de toute façon, il a probablement un travail difficile et entrer dans un débat sur qui a le dernier mot ne va nulle part. Le mieux que vous puissiez faire est de contribuer d'une manière ou d'une autre et d'essayer d'être constructif.
Ce n'est peut-être pas du code, mais il y a peut-être beaucoup d'analyse et de documentation des scénarios utilisateur que vous pourriez faire. Lorsque je maintenais le gestionnaire de fenêtres GNOME, il aurait souvent été utile pour les gens d'analyser un problème globalement en considérant tous les utilisateurs, et d'écrire vraiment les problèmes, les avantages et les inconvénients et ce qui devrait arriver. dans une perspective globale.
(Au lieu de cela, la chose habituelle était de commencer à flamber comme si c'était le seul utilisateur qui comptait et il n'y avait pas de compromis. Et bien que ce soit génial, c'était un point de donnée, et souvent j'ai réussi à rester poli ou même à résoudre leur problème finalement .. . flamber ne fait rien se produire plus rapidement. Il confond simplement les émotions dans le problème et fait perdre du temps à tout le monde.)
La raison pour laquelle vous obtenez cette réponse n'est pas que les responsables sont des imbéciles, c'est que vous ne les avez pas suffisamment convaincus de la proposition de valeur de eux travaillant sur votre fonctionnalité pour vous.
La meilleure réponse est d'entamer un dialogue sur la valeur de votre fonctionnalité pour leur communauté dans son ensemble, pour voir si vous pouvez les convaincre de changer d'avis. Peut-être qu'ils ont raison et qu'ils en savent plus sur les besoins de leur propre communauté que vous - mais, encore une fois, peut-être pas.
Si la fonctionnalité n'est valable que pour vous et n'a que peu ou pas de valeur pour la communauté, je trouve que l'argent est un excellent facteur de motivation, alors que se plaindre de son attitude ne l'est pas.
Quelle est la riposte canonique à "c'est open source, soumettre un patch"?
Il n'y a pas de riposte raisonnable susceptible de faire la différence. Tenter de persuader les bénévoles de faire quelque chose qu'ils n'ont pas l'intention de faire est une perte de temps ... ou pire.
Vos options sont:
Faites ce que la réponse suggère; c'est-à-dire implémenter la fonctionnalité et la soumettre en tant que patch. Cela s'appelle "redonner quelque chose".
Trouvez quelqu'un qui serait prêt à implémenter la fonctionnalité pour vous avec de l'argent réel. Il peut s'agir du projet lui-même (par exemple en échange d'un parrainage), d'une personne associée au projet ou d'un "codeur à embaucher" aléatoire.
Trouvez un produit alternatif.
Si vous avez reçu cette réponse lorsque vous avez fait une suggestion "utile", réfléchissez à la façon dont vous auriez pu réagir si vous étiez à sa place. Par exemple, comment répondriez-vous si vous pensiez que la suggestion ne valait pas la peine/bien pensée/intelligible/etc., mais que vous n'aviez pas le temps ou la patience de vous engager dans un débat prolongé?
J'ai été impliqué dans un projet de système d'exploitation open source de longue date, et l'une des choses les plus ennuyeuses est que les gens qui sont assis dans la "galerie d'arachides" et vous donnent un flot de suggestions pour faire des choses "mieux" qui:
Souvent, la meilleure réponse est de mettre au défi la personne de s'impliquer dans le projet ... et d'espérer qu'elle prenne l'astuce ... de "mettre en place ou fermer". Malheureusement, les plus ennuyeux ne prennent même pas la moindre idée.
Bien sûr, l'autre réponse à ces personnes est de ne pas répondre du tout ou de les ignorer complètement.
La réponse serait raisonnable si vous et le programmeur en question étaient égaux, et saviez à peu près la même chose sur la base de code et le langage et toutes les autres choses pertinentes à cette chose particulière que vous signalez.
Vous n'êtes pas égaux (ou vous l'auriez probablement fait), je suggérerais donc une riposte appropriée:
"Il n'y a aucun moyen que je puisse faire aussi vite et aussi bien que possible, c'est pourquoi je vous ai demandé de m'aider en premier lieu. S'il vous plaît!"
Je crois qu'il va à l'encontre de la nature humaine fondamentale de dire alors "oh, oui, cette chose sur laquelle j'ai passé longtemps et sur laquelle je suis vraiment bon, est si simple que n'importe qui peut venir de la rue et faire un aussi bon travail que [~ # ~] je [~ # ~] peut ".
La riposte canonique est de bifurquer le projet.
La réponse canonique à "soumettre un patch" est:
"Je n'ai pas les compétences, l'expérience ou le temps requis, alors pouvez-vous me dire où expédier les caisses de bière au gars qui peut le faire pour moi"
Soumettez un cas de test complet .
"Si vous le faites, je vais l'inclure" est bien mieux que "non".
Si vous n'êtes pas en mesure de faire le travail pour une raison ou une autre, expliquez la circonstance au responsable du projet en privé.
Si vous ne souhaitez pas contribuer d'une manière ou d'une autre à un projet open source que vous souhaitez utiliser, vous devriez plutôt rechercher un support commercial ou un autre produit commercial.
"Merci pour la réponse."
Parce que:
Vous n'avez rien à dire. Le fait même que les développeurs aient répondu est une indication suffisante qu'ils savent déjà que le problème existe et que cela cause de la douleur (au moins à certains) utilisateurs.
Au bout du compte, rien de ce que vous dites ne convaincra le développeur de travailler pour vous s'il ne le souhaite pas.
Un bon projet open source aura un système de demande de bug/fonctionnalité où les utilisateurs peuvent soumettre des bugs/fonctionnalités et d'autres peuvent voter sur eux afin que les responsables puissent identifier ce qui est important pour la communauté dans son ensemble. Cependant, le moyen le plus rapide de mettre votre fonctionnalité en place est de lui soumettre un correctif. Période ... aucun moyen de contourner cela.
Répondre simplement "soumettre un patch" est grossier IMO, mais quand même ... si vous utilisez un logiciel open source pour quelque chose de sérieux, vous devez être prêt à en prendre soin si le besoin s'en fait sentir.
Ce qui suit est basé sur n article par Jeremias Maerki (de la renommée d'Apache FOP):
Si quelque chose ne fonctionne pas pour vous, vous avez plusieurs options:
- C'est open source: vous pouvez le réparer vous-même.
- Si vous ne pouvez pas le réparer vous-même, vous pouvez attendre que quelqu'un ait du temps libre et pense que c'est amusant à mettre en œuvre.
- Si cela ne se produit pas, vous pouvez trouver ou embaucher quelqu'un pour le faire pour vous.
Je pense que c'est une version complète très valide de la réponse "soumettre un patch".
Personnellement, je préfère obtenir une réponse de "C'est un problème connu, mais malheureusement ce n'est pas un problème qui sera résolu de sitôt. Les développeurs travaillent sur d'autres problèmes. Il n'y a pas d'ETA pour le moment."
La réponse "soumettre un patch" est très grossière, car elle suppose un certain nombre de choses:
Même si nous supposons que le créateur de la réponse "soumettre un patch" sait tout ce qui précède, cela fait simplement sonner la déclaration comme "X heures de mon temps valent plus que les ordres de grandeur plus d'heures de votre temps que vous voudriez vous lever pour accélérer et résoudre le problème ".
Généralement, lorsque je reçois une réponse grossière d'un développeur lorsque je pose des questions sur un problème que j'ai ou que je soumets un bogue, je arrêtez d'utiliser ce programme. Je n'utilise plus uTorrent (pas open source, mais le point demeure) par exemple, parce que les réponses que j'ai reçues sur leur forum "support" étaient tellement grossières. J'ai soumis un problème que j'ai rencontré dans le forum Bug Reports. Le thread a été immédiatement verrouillé avec un lien vers un autre thread sur un problème similaire, mais différent dans un thread (qui était également verrouillé, bien sûr). En attendant, j'ai ouvert un fil dans le forum de discussion générale pour demander si quelqu'un avait trouvé une solution au problème. Dans le temps qu'il a fallu pour enregistrer ce fil et revenir en arrière et voir que mon premier fil avait été verrouillé, mon fil en général était verrouillé et mon compte de forum interdit pour comportement perturbateur. J'ai désinstallé uTorrent et je ne suis pas revenu depuis.
Chaque fois que je vois cela, je commence immédiatement à chercher un produit alternatif. Pour moi, c'est un signe dangereux que les responsables ne se soucient pas de leurs utilisateurs (mauvais si votre projet est utilisé partout) ou ont perdu tout intérêt pour le projet. Les deux signifient généralement que le projet mourra bientôt ou sera en proie à la stagnation car les développeurs refusent de faire avancer le projet
(Notez que je ne dis pas que le tout premier rapport de bogue que vous voyez avec ce type de réponse que vous exécutez. Vous devez regarder une tendance générale. Si la plupart des rapports de bogue se terminent par ce type de réponse, suivez ces conseils. Si ce ne sont que quelques-uns, alors ce sont probablement des demandes de fonctionnalités qui ne correspondent pas aux objectifs du projet ou qui sont extrêmement spécifiques à l'utilisation)
Comme l'a dit @MainMa, commencer à contribuer à un tout nouveau projet est très difficile. La plupart des développeurs ne comprennent pas cela car ils travaillent sur le projet depuis des mois/années et cela a du sens pour eux. Cela peut parfois être une erreur honnête.
Je plaisante de temps en temps que le logiciel libre peut être gratuit comme dans la bière, gratuit comme dans la parole ou gratuit comme dans vous obtenez ce que vous payez.
Bien que je le dis en plaisantant (je travaille pour une entreprise qui utilise beaucoup d'OSS), mais je pense qu'il y a une vérité là-bas - si vous voulez une assistance de niveau commercial, vous devez soit utiliser un logiciel commercial avec une offre d'assistance appropriée, soit trouver un solution logicielle open source qui vous permet ce niveau de support (généralement par le biais d'une personne payée pour le fournir mais potentiellement par le biais de votre organisation employant ou affectant des ressources de développement pour y travailler).
"Soumettre un patch" est exaspérant mais il met en évidence quelque chose à propos d'OSS et peut-être devrait-il être un rappel que l'OSS n'est pas adapté à tout le monde dans toutes les situations, du moins pas sans vous assurer que vous disposez d'un cadre de support solide pour cela (soit interne, payé pour ou par la communauté).
Nous pensons souvent aux logiciels qui sont gratuits comme dans la bière mais pas comme dans la parole (c'est un freeware non ouvert). C'est peut-être un cas où nous devrions penser au logiciel aussi libre que dans la parole mais pas comme dans la bière.
Passez à une alternative bien entretenue.
D'après mon expérience avec des projets open source bien entretenus, si vous créez un rapport de bogue bien défini ou une demande de fonctionnalité, cela a très de chances d'être mis en œuvre.
Il y a plusieurs façons de procéder.
Présentez la proposition et votez. mais cela prend du temps.
Faites-vous engager par une entreprise qui en a besoin pour réaliser le patch. Évidemment, c'est la meilleure solution, mais préparez-vous à collaborer avec le gars qui crée le logiciel open source que vous souhaitez mettre à niveau.
Il est également important de savoir pourquoi la fonctionnalité n'est pas implémentée en premier lieu. Souvent, la fonctionnalité est en dehors du projet logiciel: l'équipe ne veut pas de cette fonctionnalité, ne se sent pas nécessaire ou pense simplement que ce n'est pas la bonne façon de faire quelque chose. Dans ce cas, vous devez simplement forker le projet et le faire vous-même.
Utilisez un logiciel propriétaire qui fait ce que vous voulez.
N'oubliez pas que le logiciel OOP facilite souvent le processus d'intégration d'une fonctionnalité.
Pleurer sur une liste de diffusion, sur irc ou dans un forum ne fera qu'énerver les programmeurs et donnera des munitions aux partisans de l'OSS.
"Je ne peux travailler que sur une seule chose à la fois, mais je peux me plaindre de plusieurs choses à la fois. Je pense que les deux fonctions sont utiles." - akkartik sur ycombinator .
Je considère que lorsque l'on travaille sur un projet, fournissant des versions et du support, un contrat de support implicite et implicite entre le développeur et l'utilisateur se crée. Le développeur a assumé la responsabilité implicite de prendre en charge la base de code pour ses utilisateurs, y compris l'ajout de fonctionnalités à la demande.
"Soumettre un patch", c'est à mon sens donner le doigt aux utilisateurs. C'est contextuel - parfois, c'est juste trop d'efforts à mettre en œuvre, parfois cela ferait échouer le projet existant ou entraînerait une créatite de piqûre, ou tout autre hôte pour d'autres raisons. Mais, en fin de compte, il s'agit de "te baiser, pas de le faire". Ce qui, à mon avis, est, à un certain niveau, une violation de ce contrat tacite.
Je suggérerais de créer un projet pour implémenter la fonctionnalité sur des sites comme RentACoder/ELance/etc, et de publier à ce sujet sur le forum du projet open source d'origine. Tous les programmeurs des projets open source, y compris l'auteur, ont désormais une incitation financière à considérer votre demande.
Il n'y a rien que vous puissiez dire qui le fera faire le faire. Après tout, pourquoi le ferait-il? En raison des souhaits d'un utilisateur? Ce n'est pas une raison suffisante.
Mais, si vous pouvez collecter un nombre raisonnable d'utilisateurs et donner des raisons rationnelles ("je le veux" n'est pas une raison rationnelle.) Pourquoi cette fonctionnalité pourrait être utile, en général et pour vous et le nombre de d'autres, il pourrait juste changer d'avis.
Cependant, il existe également un cas particulier qui doit être pris en considération. C'est un dev. est fatigué de développer l'application, souhaitant lentement l'abandonner (a d'autres choses à faire), et donc il abandonne lentement les demandes de fonctionnalités. À part frm qui essaie de le convaincre de publier le code, dans ce cas, il n'y a pratiquement rien que vous puissiez faire, même en ce qui concerne ce qui précède.
Les projets open source en particulier sont favorables aux primes ou au financement du développement d'une fonctionnalité particulière, même si la nouvelle fonctionnalité ne parvient pas aux versions officielles.
De plus, oui, l'une des idées derrière la publication de l'open source est que quiconque et chacun ait le droit et la responsabilité d'apporter sa propre contribution.
Avec une source fermée, votre meilleure ressource est de rassembler un groupe statistiquement important de la base d'utilisateurs qui souhaite des solutions comme celles que vous souhaitez.
D'après mon expérience, cette réponse est généralement donnée si la demande de l'utilisateur ne correspond pas à l'objectif du projet. Cela se produit lorsque les gens pensent que vous allez mettre en œuvre tout ce qu'ils vous proposent, et un peu plus - gratuitement, open source et un grand et heureux avenir.
"Soumettre un correctif" est une réponse relativement grossière (et cela doit être évité, bien sûr. Surtout sous cette forme concise et précise. Il existe de nombreuses façons d'exprimer à peu près le même message - par exemple "invitez" les utilisateurs à vous aider parce que vous n'ont pas le temps de l'implémenter par vous-même). Mais tel quel, c'est un indicateur clair "Arrêtez de perdre mon temps". En tant que tel, vous ne pouvez pas faire grand-chose à ce sujet, ni de réponse "canonique".
La meilleure réponse à laquelle je peux penser est de présenter un patch. En supposant que votre patch fonctionne, vous avez au moins prouvé que l'idée n'est pas totalement irréaliste. Habituellement, cela signifie que les personnes en charge du projet réexamineront la proposition.
"soumettre un patch" est une brosse légitime pour les idées qui ne correspondent pas aux objectifs du projet. Il est probablement préférable à long terme de simplement vous dire que l'idée est nulle ou que vous essayez d'utiliser le projet pour quelque chose de bien en dehors de sa portée, mais "hé, si vous pensez que ce que vous demandez est si trivial, pourquoi ne pas" t vous essayez de l'adapter à notre base de code existante "est parfois approprié.
Si c'est mineur et vraiment utile pour les utilisateurs prévus du projet, alors soumettez simplement le rapport de bogue, décrivez clairement le problème, donnez les étapes à reproduire, indiquez que vous utilisez la construction nocturne actuelle et laissez-le.
Ce qui peut sembler être un simple changement mineur qui aiderait des tonnes d'utilisateurs peut en fait être une énorme douleur dans le cul que personne n'utiliserait à part vous. C'est le meilleur cas pour "soumettre un patch".
Il est également possible que vous ayez rencontré un cas comme le célèbre mainteneur de la glibc qui semble avoir un esprit à sens unique que son système est l'univers, son interprétation des spécifications est la Parole de Dieu, et c'est tout ce qu'il y a, indépendamment combien de personnes préféreraient autrement.