製品、特にオープンソースの機能を提案することの危険性は、「なぜそれをしないのですか」という応答が得られることです。
それは有効であり、自分で変更できるのは素晴らしいことです。ただし、プログラマーがユーザーの声を聞くと、そのユーザーが他のプログラマーであっても、製品が改善されることがよくあることはわかっています。また、これらの変更を行うための効率的な方法には、すでにプロジェクトに取り組んでいる人がアイデアを取り上げて実装することが含まれます。
ソフトウェア開発の問題を指すために使用されるいくつかの一般的な用語があります。例えば バイクシェディング 。 「はい、私は世界中のほぼすべてのものを変更できることを知っています。私は採用され、そのコードを書き始めることができます。しかしこの場合、私はただ作っているだけです。実際に、その変更を簡単に行うのにすでに適している別のコーダーにとって、または単に一般的に可能性について話し合うのに役立つかもしれない観察です。」
[ps (数日後)-「パッチを提出する」はしばしばユーモアのあるユーモアで言われることを指摘しておく必要があり、適切な機知に富んだ対応を求めています。]
これは難しい点です。ユーザーが製品に直接または間接的に支払うわけではないため、実装する機能を要求することはできません。それは、製品を注文した利害関係者や直接の顧客であるかのようではなく、商用製品のエンドユーザーでさえありません。
つまり、「パッチを送信する」は有効な答えではありません。礼儀正しくはありません。不正解です。オープンソース製品でも同じです。「パッチを送信する」は、次の短いバージョンです。
「私たちの製品が気に入ったかどうかは関係ありません。必要に応じて変更してください。ただし、顧客の要求で私たちを気にしないでください。」
パッチの提出についてはどうですか?
まあ、それはそれほど簡単ではありません。それを行うには:
オープンソースプロジェクトで使用されている言語を知っている必要があります。
ソースコードを変更するには、バージョンコントロールからソースコードをロードできる必要があります。
ビルド依存関係のすべての正しいバージョンがインストールされている必要があります(ランタイムライブラリとビルドツールの両方を含む)。
このソースコードをコンパイルできる必要があります、場合によってはそれほど明白ではありません。特に、巨大なプロジェクトをコンパイルして482のエラーと数千の警告を表示するのに数時間かかる場合、それらのエラーの原因を探して勇気を出して探索することができます。
プロジェクトがどのように行われるかを十分に理解する必要があります、使用するコーディングスタイルは何か(ある場合)、ユニットテストを実行する方法など。プロジェクトに適切なドキュメントがない場合(これは多くの場合、オープンソースプロジェクトの場合)、それは本当に難しいかもしれません。
プロジェクトに積極的に参加し、プロジェクトに積極的に参加している開発者の習慣に慣れる必要があります。たとえば、.NET Framework 4を毎日使用しているが、プロジェクトが.NET Framework 2.0を使用している場合、LINQもコードコントラクトも、フレームワークの最新バージョンの他の何千もの新機能も使用できません。
パッチを受け入れる必要があります(コミュニティーと共有する意図なしに、自分だけのために変更を行う場合を除きます)。
プロジェクトに積極的に参加するつもりであれば、これらすべてのことを実行し、プロジェクトに時間を費やすことができます。一方、迷惑なマイナーなバグや欠けている単純な機能だけがあり、プロジェクトの研究に数日、数週間、または数か月を費やしている場合は、気に入らない限り、数分で作業自体を行うのは不合理です。
それでは、「オープンソースであり、パッチを提出する」という正規のレトルトはありますか?私はそうは思いません。彼女に失礼なことを説明するか、彼女に話しかけるのをやめてください。
標準的なレトルトは、パッチを提出することです。
これは、開発者が妥当な時間内に何かに取り掛かるとは思わないが、繰り返し取り上げられてきた場合の標準的な回答です。
繰り返し取り上げられた場合は最も不公平ですが、最近話した人はそれを知らず、すぐに「そのためのパッチを取得しています」と表示されます。この場合、メンテナは議論にうんざりしていますが、ユーザーはそれを新しいトピックだと思っています。とにかく、すぐに "パッチを取得"した場合は、個人的に取得するべきではありませんが、問題の詳細については、アーカイブとバグトラッカーを確認することをお勧めします。
自分でリクエストを繰り返し出している場合、「パッチの取得」は、比較的丁寧な代替案ではなく、比較的丁寧な代替案になることを意図しています...
そしてもちろん、誰にも説明のない「パッチをとる」と言う無礼なメンテナーもいますが、それは少数派だと思います。
多くのユーザーでオープンソースプロジェクトを維持したことがある場合、メンテナが達成できるよりも100倍多くのリクエストがあり、それらのリクエストの多くはリクエスタにとって重要ですが、法外に難しいでしょう。または、他の多くのユーザーを混乱させるか、プロジェクトとコードベースをグローバルに理解している場合にのみ目に見える他のいくつかの欠陥があります。あるいは、判断の呼びかけがあり、誰もが何度も議論するのに時間がかかりすぎる場合もあります。
ほとんどの非オープンソース企業は、開発者へのアクセスをまったく許可しません。顧客サポートから、静かな扱いまたは丁寧でありながら偽の話を得るだけです。したがって、オープンソースでは少なくともいくつかのオプション(機能をコーディングするために誰かに支払うなど)があり、開発者は失礼かもしれませんが、少なくとも彼らは正直な答えを出します。いつもよりも「いいえ」のほうがいいです。「ロードマップに載っています... [2年後] ...まだロードマップに載っています」いくつかのベンダーから入手したようなもの...
だからレトルトはないと思います。オープンソースのメンテナは本当に忙しいかもしれませんし、たぶん意地悪かもしれませんが、いずれにせよ、彼らはおそらく難しい仕事をしていて、誰が最後の言葉を持っているかという議論に参加することはできません。最善の方法は、何らかの形で貢献し、建設的になることです。
多分それはコードではないかもしれませんが、おそらくあなたができる多くの分析と文書化されたユーザーシナリオがあります。私がGNOMEウィンドウマネージャーを保守していたとき、人々がallユーザーを考慮して問題をグローバルに分析し、実際に問題と長所と短所を書き留めて、何が起こるかを知ることは多くの場合役立つでしょうグローバルな視点から。
(代わりに、通常のことは、重要なのはユーザーだけであり、トレードオフはないかのように燃え上がることでした。そして、それは素晴らしいことであり、データポイントでしたが、多くの場合、礼儀を守り、最終的には問題を解決することさえできました。 。炎上しても何も起こらないので、感情が混乱し、全員の時間が無駄になります。)
あなたがこの返答を得る理由は、メンテナがジャークであるということではなく、themに取り組んでいるthem機能your機能---の価値提案を十分に確信していないためです(あなたのために)==。
最良の対応は、機能の価値についての対話を開始することですコミュニティ全体に対して。彼らに彼らの考えを変えるよう説得できるかどうかを確認します。多分彼らは正しいです、そして彼らはあなたよりも彼ら自身のコミュニティのニーズについてもっと知っています-しかし、再び、多分そうではありません。
機能があなたにとってのみ価値があり、コミュニティにとってほとんど価値がない場合、私はお金が優れた動機であるのに、彼らの態度について不平を言っているわけではありません。
「オープンソースであり、パッチを提出する」という標準的なレトルトは何ですか?
違いを生む可能性のある合理的なレトルトはありません。ボランティアが意図しないことをするようにボランティアを説得しようとするのは、あなたの時間の浪費です...
オプションは次のとおりです。
応答が示唆することを行います。つまり、機能を実装し、パッチとして送信します。それを「お返し」といいます。
実際のお金のためにあなたのために機能を実装することをいとわないだれかを見つけてください。それは、プロジェクト自体(スポンサーの見返りなど)、プロジェクトに関連する誰か、またはランダムな「雇用のためのコーダー」である可能性があります。
代替製品を探す。
「役立つ」提案をしたときにこの応答を受け取った場合は、彼の立場にいた場合にどのように応答したかを検討してください。たとえば、提案は価値がない/よく考えられている/わかりやすい/などであると考えていたが、長引く議論に取り組む時間や忍耐力がなかった場合、あなたはどのように対応しますか?
私は長期にわたるオープンソースOSプロジェクトに関与してきました。最も厄介なことの1つは、「ピーナッツギャラリー」に座って、「より良い」ことを行うための提案の流れを提示する人々です。
多くの場合、最善の対応は、プロジェクトに関与するように人にはっきりと挑戦することです...そして、彼らがヒントを得るように願います...「立てるか閉めるか」。残念ながら、最も迷惑なものはヒントすらありません。
もちろん、そのような人々に対する他の反応は、まったく反応しないか、完全に無視することです。
あなたと問題のプログラマーが同等で、コードベースと言語、そしてあなたが指摘しているこの特定の事柄に関連する他のすべてについてほぼ同じである場合、応答は合理的です。
あなたは等しくない(またはおそらくあなたはそれをしたでしょう)ので、私は適切なレトルトになることをお勧めします:
"私があなたのように速くて良いことができる方法はありません。それが私がそもそも私を助けてくれるよう頼んだ理由です。"
「ああ、そうです、私が長い間費やしてきた、本当に得意なことはとても簡単なので、誰もが通りから入り、同じように仕事をすることができます。 [〜#〜] i [〜#〜]できます "。
標準的なレトルトは、プロジェクトをフォークすることです。
「パッチを送信する」ための標準的な答えは次のとおりです。
「私は必要なスキル、経験、または時間を持っていないので、私のためにそれを行うことができる人にビールのケースをどこに出荷するかを教えてもらえますか」
包括的なテストケースを送信します。
「そうするなら、含める」は「いいえ」よりはるかに優れています。
なんらかの理由で作業を行うことができない場合は、プロジェクトメンテナーに状況を説明してください。
使用したいオープンソースプロジェクトに何らかの形で貢献したくない場合は、代わりに商用サポートまたは別の商用製品を探す必要があります。
"回答いただきありがとうございます。"
なぜなら:
何も言う必要はありません。開発者が対応したという事実は、問題が存在することを彼らがすでに知っていて、それが(少なくとも一部の)ユーザーに苦痛を引き起こしていることを示しています。
結局のところ、開発者が望まない場合でも、開発者があなたのために働くように説得することはできません。
優れたオープンソースプロジェクトには、バグ/機能のリクエストシステムがあり、ユーザーはバグ/機能を送信し、他の人はそれらに投票できるため、メンテナはコミュニティ全体にとって重要なことを識別できます。ただし、機能を実装する最も簡単な方法は、機能のパッチを提出することです。期間...それを回避する方法はありません。
「パッチを提出する」と返信するだけでは失礼なIMOですが、それでも...深刻なことにオープンソースソフトウェアを使用している場合は、必要に応じて対処する準備をしておく必要があります。
以下は、(Apache FOP名声の)Jeremias Maerkiによる 投稿 に基づいています。
うまくいかない場合は、いくつかの方法があります。
- これはオープンソースです。自分で修正できます。
- 自分で修正できない場合は、誰かが自由な時間をとり、実装するのが楽しいと思うまで待つことができます。
- それが起こらない場合は、誰かを探したり雇ったりしてくれるでしょう。
「パッチを提出する」という答えの非常に有効な完全版だと思います。
個人的には、「これは既知の問題ですが、残念ながらすぐに対応できる問題ではありません。開発者は他の問題に取り組んでいます。現時点ではETAはありません。」という返答が欲しいです。
「パッチを送信する」という応答は、いくつかのことを想定しているため、非常に失礼です。
「パッチを提出する」という応答メーカーが上記のすべてを知っていると仮定しても、「X時間は立ち上がるのに必要な時間の桁数よりも多くの価値があるというよりも、X時間の方が価値がある」というように聞こえるだけです。問題を迅速に解決するために」.
一般的に、自分が抱えている問題について質問したり、バグを送信したりしたときに、開発者から失礼な返事を受け取ったときは、私はそのプログラムの使用をやめるとしています。たとえば、私はuTorrentを使用しません(オープンソースではありませんが、要点は残っています)。なぜなら、彼らの "サポート"フォーラムで受け取った応答はとても失礼だったからです。バグレポートフォーラムに問題を提出しました。スレッドはすぐに別のスレッドへのリンクでロックされましたが、スレッドには同様の問題がありました(もちろん、ロックされていました)。それまでの間、一般的なディスカッションフォーラムでスレッドを開き、誰かが問題の回避策を見つけたかどうか尋ねました。そのスレッドを保存して戻って最初のスレッドがロックされているのを確認するのにかかった時間に、私のスレッドは全般的にロックされ、私のフォーラムアカウントは破壊的な動作を禁止されました。私はuTorrentをアンインストールし、それ以来戻っていません。
これを見るたびに、すぐに代替製品を探し始めます。私にとってこれは危険な兆候であり、メンテナーがユーザーのことを気にしない(プロジェクトがどこでも使用されている場合は悪い)か、プロジェクトへの関心を失っています。これらは通常、開発者がプロジェクトを進めることを拒否するため、プロジェクトが間もなく終了するか、停滞に悩まされることを意味します
(私がこの種の応答で実行する最初のバグレポートを実行していると言っているわけではないことに注意してください。一般的な傾向を確認する必要があります。ほとんどのバグレポートがこの種の応答で終わっている場合は、このアドバイスに従ってください。ほんの数個の場合、それらはおそらくプロジェクトの目標に適合しないか、非常に特定の用途である機能リクエストです)
@MainMaが述べたように、まったく新しいプロジェクトに貢献することは非常に困難です。彼らが数ヶ月/年の間プロジェクトに取り組んできており、彼らにとって理にかなっているので、ほとんどの開発者はこれを理解していません。これは、正直な間違いである場合があります。
無料のソフトウェアはビールのように無料でも、スピーチのように無料でも、あなたが支払うものを手に入れるのと同じように無料でもよいと私は時々冗談を言います。
私は冗談めかして言っていますが(私はOSSを多く使用する会社で働いています)、私はそこに真実があると思います-商業レベルのサポートが必要な場合は、適切なサポート契約を結んだ商業ソフトウェアを使用するか、そのレベルのサポートを可能にするオープンソースソフトウェアソリューション(通常、提供するために支払われる誰かを通じて、ただし、開発リソースを採用または割り当てる組織を通じてそれを処理することによって潜在的に)。
「パッチを提出する」は腹立たしいですが、OSSについて何かを強調しています。おそらく、OSSがあらゆる状況で誰にとっても適切ではないことを思い出させるはずです。社内で、コミュニティのために、またはコミュニティを通じて支払われます)。
私たちはしばしば、ビールのように無料であるが、スピーチのように無料ではないソフトウェア(つまり、オープンでないフリーウェア)について考えます。おそらくこれは、ソフトウェアをスピーチと同じくらい自由であると考えるべきですが、ビールと同じようにnotです。
よく維持されている代替に切り替えます。
よく維持されたオープンソースプロジェクトでの私の経験から、明確に定義されたバグレポートや機能リクエストを作成すると、実装される可能性が非常に高くなります。
それを行うにはいくつかの方法があります。
機能の提案と投票。しかし、これには時間がかかります。
パッチを作成するためにそれを必要とする会社に雇われます。明らかにこれが最良のソリューションですが、アップグレードしたいオープンソースソフトウェアを作っている人と協力する準備をしてください。
そもそも機能が実装されていない理由を見つけることも重要です。多くの場合、この機能はソフトウェアプロジェクトの範囲外です。チームはこの機能を必要としていないか、必要だと思わないか、または何かを行うための良い方法ではないと考えています。この場合、プロジェクトをフォークして自分で作成する必要があります。
必要なことを行う独自のソフトウェアを使用します。
OOPソフトウェアは、機能の統合プロセスを容易にすることがよくあります。
メーリングリスト、irc、またはフォーラムで泣き言を言うと、プログラマーを怒らせて、OSS支持者に弾薬を与えます。
「私は一度に1つのことしか処理できませんが、一度に多くのことについて不満を言うことができます。両方の機能が役立つと思います。」 - ycombinatorのakkartik 。
プロジェクトに取り組んでいて、リリースとサポートを提供しているとき、開発者とユーザーの間の暗黙の暗黙のサポート契約が生まれると思います。開発者は、要求に応じて機能を追加するなど、ユーザーのコードベースをサポートするという暗黙の責任を負っています。
私の意見では、「パッチを提出する」は基本的にユーザーに指を与えることです。これは状況に応じたものであり、実装するのに手間がかかる場合もあれば、既存のプロジェクトを台無しにしたり、手強い炎を引き起こしたりする場合もあります。しかし、最終的には、「それをやるのではなく、あなたをねじ込みます」と言っています。これは、私の考えでは、あるレベルでは、その暗黙の契約の違反です。
RentACoder/ELance/etcなどのサイトに機能を実装するためのプロジェクトを作成し、それについて元のオープンソースプロジェクトのフォーラムに投稿することをお勧めします。著者を含む、オープンソースプロジェクトのプログラマは、あなたの要求を検討する金銭的インセンティブを持っています。
make彼がそれを行うとは言えません。結局のところ、なぜ彼はそうすべきなのでしょうか。一人のユーザーの希望のため?それは十分な理由ではありません。
しかし、妥当な数のユーザーを収集し、合理的な理由を与えることができる場合(「欲しい」は合理的な理由ではありません)。他の人は彼の考えを変えるかもしれません。
ただし、考慮が必要な特殊なケースもあります。その開発者。アプリの開発にうんざりしていて、ゆっくりとそれを放棄することを望んでいる(他にやるべきことがある)ため、彼は機能要求をゆっくりと放棄しています。別にfrmが彼にコードをリリースするように説得しようとしている、この場合、上記に関してさえ、あなたがすることができることはほとんど何もありません。
特にオープンソースプロジェクトは、新機能が公式リリースに至らなかったとしても、特定の機能の開発への報奨金や資金提供に対して友好的です。
さらに、はい、オープンソースの公開の背後にあるアイデアの1つは、誰もが誰でも自分の貢献をする権利と責任を持つことです。
クローズドソースの場合、最適なリソースは、必要なソリューションのようなユーザーベースから統計的に重要なグループを集めることです。
私の経験では、この応答は通常、ユーザーの要求がプロジェクトの目的に合わない場合に出されます。それは、あなたが提案するすべてのものを実装するつもりであると人々が思ったときに発生します。そしてもう少し-無料のオープンソースと偉大で幸せな未来のために。
「パッチを提出する」は比較的失礼な反応です(もちろん、避けてください。特に、この簡潔でシャープな形式では。ほぼ同じメッセージを表現する方法はたくさんあります。たとえば、ユーザーに「招待」してもらうと、自分で実装する時間はありません)。しかし、現状では、これは明らかに「時間を無駄にするのをやめる」指標です。そのため、それについてできることはあまりなく、「標準的な」応答もありません。
私が考えることができる最良の応答は、実際にパッチを提示することです。パッチが機能すると仮定すると、そのアイデアが完全に非現実的ではないことが少なくとも証明されています。通常、これはプロジェクトの責任者が提案を再検討することを意味します。
「パッチを提出する」は、プロジェクトの目標に適合しないアイデアを正当に排除するものです。長期的には、アイデアが悪い、またはプロジェクトの意図した範囲からはるかに離れた何かにプロジェクトを使用しようとしていることを伝える方が良いでしょう。しかし、「あなたが求めていることが非常に些細なことだと思うなら、なぜしないのか私たちの既存のコードベースにそれを適合させようとするとき」はいつか適切です。
それがマイナーでプロジェクトの対象ユーザーにとって本当に役立つ場合は、バグレポートを送信し、問題を明確に説明し、再現手順を示し、現在のナイトリービルドを使用していることを示し、そのままにしておきます。
たくさんのユーザーを助ける小さな簡単な変更のように見えるかもしれませんが、実際にはあなた以外に誰も使用しないだろうというお尻には大きな痛みがあるかもしれません。それが「パッチを提出する」ための最良のケースです。
悪名高いglibcメンテナのような、彼のシステムは宇宙であり、仕様の彼の解釈は神の言葉であり、それがすべてそれであるという一心不自由なケースに遭遇した可能性もあります。そうでなければ何人の人々が好むでしょう。