[このドキュメントのシングルページバージョンもご覧いただけます。]

バグ / 問題

Subversion は完璧なソフトウェアではありません。他のソフトウェアと同様に、バグ、機能不足、改善の余地があります。ほとんどのソフトウェアプロジェクトと同様に、Subversion プロジェクトでは、既知の未解決の問題を管理するために問題追跡ツールを使用しています。しかし、おそらくほとんどのソフトウェアプロジェクトとは異なり、私たちは問題追跡ツールを比較的ゴミのない状態に保つように努めています。Subversion の問題について聞きたくないわけではありません。結局のところ、壊れていることを知らなければ修正できません。問題追跡ツールがきちんと管理されていないと、役に立つどころか邪魔になることがわかっています。

このメールはほとんどすべてを説明しています (ただし、最近では dev@ リストに投稿する前に users@ リストに投稿する必要があります)。

   From: Karl Fogel <kfogel@collab.net>
   Subject: Please ask on the list before filing a new issue.
   To: dev@subversion.tigris.org
   Date: Tue, 30 Jul 2002 10:51:24 (CDT)
   
   Folks, we're getting tons of new issues, which is a Good Thing in
   general, but some of them don't really belong in the issue tracker.
   They're things that would be better solved by a quick conversation
   here on the dev list.  Compilation problems, behavior questions,
   feature ideas that have been discussed before, that sort of thing.
   
   *Please* be more conservative about filing issues.  The issues
   database is physically much more cumbersome than email.  It wastes
   people's time to have conversations in the issues database that should
   be had in email.  (This is not a libel against the issue tracker, it's
   just a result of the fact that the issues database is for permanent
   storage and flow annotation, not for real-time conversation.)
   
   If you encounter a situation where Subversion is clearly behaving
   wrongly, or behaving opposite to what the documentation says, then
   it's okay to file the issue right away (after searching to make sure
   it isn't already filed, of course!).  But if you're
   
      a) Requesting a new feature, or
      b) Having build problems, or
      c) Not sure what the behavior should be, or
      d) Disagreeing with current intended behavior, or
      e) Not TOTALLY sure that others would agree this is a bug, or
      f) For any reason at all not sure this should be filed,
   
   ...then please post to the dev list first.  You'll get a faster
   response, and others won't be forced to use the issues database to
   have the initial real-time conversations.
   
   Nothing is lost this way.  If we eventually conclude that it should be
   in the issue tracker, then we can still file it later, after the
   description and reproduction recipe have been honed on the dev list.
   
   Thank you,
   -Karl

以下は、Subversion の問題や機能拡張の要望を報告する際に、皆さんに守っていただきたいポリシーです。

バグの報告方法

まず、それが本当にバグであることを確認してください。Subversion が期待どおりに動作しない場合は、ドキュメントやメーリングリストのアーカイブで、期待どおりに動作すべきであるという証拠を探してください。もちろん、Subversion がデータを破壊してモニターから煙が出たなどの常識的な場合は、自分の判断を信じてください。しかし、確信が持てない場合は、まずユーザーメーリングリスト(users@subversion.apache.org)で質問するか、IRC (irc.libera.chat, チャンネル #svn)(Web インターフェースまたはMatrix) で質問してください。

バグトラッカーで検索して、誰かが既にこのバグを報告していないかどうかも確認する必要があります。

それがバグであり、まだ私たちが知らないということがわかったら、最も重要なことは、簡単な説明と再現レシピを作成することです。たとえば、最初に発見したバグが、10 回のコミットで 5 つのファイルが関係している場合、1 つのファイルと 1 回のコミットだけで発生するようにしてみてください。再現レシピが単純であればあるほど、開発者がバグを再現して修正できる可能性が高くなります。

再現レシピを作成するときは、バグを発生させるために行ったことの散文的な説明だけを書かないでください。代わりに、実行した正確な一連のコマンドとその出力を逐語的に示してください。これを行うには、カットアンドペーストを使用してください。ファイルが関係する場合は、ファイルの名前、および関連性があると思われる場合はその内容も必ず含めてください。最も良いのは、再現レシピをスクリプトとしてパッケージ化することです。これは私たちにとって非常に役立ちます。以下に、このようなスクリプトの例を示します。Unix ライクなシステムおよび Bourne シェル用の repro-template.sh、または Windows シェル用の repro-template.bat (Paolo Compieta による貢献)。他のシステム用の同様のテンプレートスクリプトの貢献も歓迎します。

簡単な正気度チェック: Subversion の最新バージョンを実行していますか? :-) おそらくバグは既に修正されています。最新の Subversion 開発ツリーに対して再現レシピをテストする必要があります。

再現レシピに加えて、バグを再現した環境の完全な説明も必要になります。つまり、

  • あなたのオペレーティングシステム
  • Subversion のリリースおよび/またはリビジョン
  • Subversion をビルドしたコンパイラーと構成オプション
  • Subversion に行ったプライベートな変更
  • Subversion を使用している Berkeley DB のバージョン(ある場合)
  • その他、関連性がある可能性のあるもの。少なすぎるよりは多すぎる情報で誤った判断をしてください。

これがすべて揃ったら、レポートを作成する準備が整いました。まず、バグが何であるかを明確に説明します。つまり、Subversion がどのように動作することを期待していたかと、実際にどのように動作したかを対比して述べます。バグはあなたには明白に見えるかもしれませんが、他の人にはそうではない可能性があるので、推測ゲームを避けるのが最善です。次に、環境の説明と再現レシピを続けます。原因の推測やバグを修正するためのパッチを含めたい場合は、それは素晴らしいことです。パッチの提出ガイドラインを参照してください。

この情報をすべて dev@subversion.apache.org に投稿するか、既に行ったことがあり、問題を提出するように求められた場合は、問題追跡ツールにアクセスして、そこに書かれた手順に従ってください。

ありがとうございます。効果的なバグ報告を提出するには多くの作業が必要であることを承知していますが、優れた報告は開発者の時間を節約し、バグが修正される可能性を高めることができます。

バグの報告先

  • バグが Subversion 自体にある場合は、users@subversion.apache.org にメールを送信してください。バグであることが確認されたら、あなた自身を含めた誰かがそれを問題追跡ツールに入力できます。(または、バグについて確信がある場合は、開発リスト (dev@subversion.apache.org) に直接投稿してください。ただし、確信がない場合は、まずusers@に投稿することをお勧めします。そこで、遭遇した動作が予想されるものかどうかを教えてくれます。)

  • バグが APR ライブラリにある場合は、次の両方のメーリングリストに報告してください: dev@apr.apache.org, dev@subversion.apache.org

  • バグが Neon HTTP ライブラリにある場合は、次の宛先に報告してください: neon@webdav.org, dev@subversion.apache.org

  • バグが Apache Serf HTTP ライブラリにある場合は、次の宛先に報告してください: dev@serf.apache.org, dev@subversion.apache.org

  • バグが Apache HTTPD 2.x にある場合は、次の両方のメーリングリストに報告してください: dev@httpd.apache.org, dev@subversion.apache.org。Apache httpd 開発者メーリングリストはトラフィックが多いため、バグレポートの投稿が見落とされる可能性があります。https://httpd.apache.org/bug_report.html でバグレポートを提出することもできます。

  • バグがあなたの絨毯にある場合は、抱きしめて暖かくしてください。

マイルストーン管理

問題追跡ツールのマイルストーンは、Subversion の開発者が取り組みを組織し、Subversion のユーザーベースと相互にコミュニケーションを取る方法の重要な側面です。高レベルの問題のトリアージを行う際に主に使用される一部のマイルストーンを除いて、プロジェクトの問題追跡ツールのマイルストーンは、リリースバージョン番号とそれらのバリエーションを反映して命名される傾向があります。マイルストーンは、問題の状態に応じてわずかに異なる目的で使用されるため、これらの区別を理解することが重要です。

オープンな問題のマイルストーン

オープンな問題 (ステータスが次のいずれかであるもの)OPEN, IN PROGRESS、またはREOPENEDの場合、マイルストーンは、開発者がその問題の解決を目標としている Subversion のリリースを示します。一般的なケースでは、次の形式のマイルストーンを使用します。MINORVERSION-considerは、問題の解決が MINORVERSION.0 でリリースしたいものとして検討されていることを示します。たとえば、Subversion 1.9.0 に追加できるはずだと考えている機能は、1.9-considerのマイルストーンになります。当然のことながら、これらのリリースターゲットの精度は、将来を予測すればするほど悪くなるため、ユーザーはそれらを開発者コミュニティからの拘束力のある約束として扱わないようにしてください。

常に、コミュニティでは「次の大規模リリース」に向けた作業が行われています。そのリリースが形になり始めると、開発者はどの問題がリリースにとって「必須」なのか(「リリースブロッカ」とも呼ばれます)、どの問題が「あると便利なもの」なのか、どの問題が将来のリリースに延期されるべきなのかについて、より良く理解できるようになります。問題のマイルストーンは、これらの決定の結果を実行するために使用されるメカニズムです。リリースブロッカと見なされる問題は、MINORVERSION-considerマイルストーンからMINORVERSION.0マイルストーンに移動されます。「あると便利なもの」は、MINORVERSION-considerマイルストーンのままになります。リリースから延期された問題は、ANOTHERMINORVERSION-considerまたはunscheduledで再マイルストーン化されます。これは、問題がいつ対処されるかについて明確な推測があるかどうかによって異なります。

前の例を続けると、Subversion 1.9.0 の開発が進むにつれて、開発者はリリースを計画したその機能を評価します。Subversion 1.9 がその機能なしでリリースされるべきではないと考える場合、マイルストーンを1.9-considerから1.9.0に変更します。その機能でリリースしたいが、それにコミットしたくない場合は、マイルストーンを1.9-considerのままにします。1.9.x リリースシリーズでその機能を実装するつもりがないことがよくわかっている場合は、問題を別のもの (1.10-considerなど) で再マイルストーン化します。

の精度MINORVERSION.0マイルストーンは非常に重要です。なぜなら、開発者は主要なリリースサイクルの最終段階で、これらの課題に注力する傾向があるからです。

修正済み課題のマイルストーン

修正済みの課題(ステータスがRESOLVEDで、解決策がFIXEDであるもの)については、課題のマイルストーンに新たな役割が生まれます。それは、その課題の解決策が最初に含まれるSubversionのリリースバージョンを追跡することです。課題のターゲットリリースバージョンに関係なく、課題が解決されたら、そのマイルストーンには、その解決策が最初に含まれるリリースの正確なバージョン番号を反映する必要があります。

その他のクローズされた課題のマイルストーン

その他のクローズされた課題(「オープン」ではなく、実際には「修正」されていないもの)については、課題のマイルストーンはほとんど意味を持ちません。課題が重複していたり、無効または不正確なレポートであるために実質的に無視されている場合、そのトラッカーフィールドを維持しようとしてもほとんど意味がありません。

状態間の移行

課題をこれらの状態間で移行させる際には注意が必要です。解決済みのオープンな課題は、その変更が最初に反映されるSubversionのリリースを反映するようにマイルストーンを調整する必要があります。以前のリリースストリームにバックポートされた解決済みの課題は、その以前のリリースのバージョン番号を指すようにマイルストーンを調整する必要があります。最後に、解決済みの課題がREOPENEDリリースブロッカーであるかどうか(MINORVERSION.0)またはそうでないか(MINORVERSION-consider)という観点で、マイルストーンを再評価する必要があります。このような状況では、課題が修正済みとして解決される前に使用されていたマイルストーンを確認するために、課題の変更履歴を参照すると役立つ場合があります。

課題のトリアージ

課題が提出されると、特別なマイルストーン "---" (つまり、マイルストーン未設定)に入ります。これは、誰かがそれらを見て、何をすべきかを決定する機会を得るまで、課題が存在する保留領域です。

マイルストーンでソートすると、マイルストーン未設定の課題が最初にリストされます。そして、課題のトリアージは、すべてのオープンな課題(マイルストーン未設定のものから開始)を精査し、どれが今修正するのに十分なほど重要か、どれが別のリリースまで待つことができるか、既存の課題の重複はどれか、既に解決済みの課題はどれかなどを判断するプロセスです。オープンなままになる各課題については、タイプ、サブコンポーネント、プラットフォーム、OS、バージョン、キーワード(存在する場合)などのさまざまなフィールドが適切に設定されていることを確認することも意味します。

プロセスの概要を以下に示します(この例では、1.5が次のリリースであるため、緊急の課題はそこに移動します)。

    for i in issues_marked_as("---"):
      if issue_is_a_dup_of_some_other_issue(i):
        close_as_dup(i)
      elif issue_is_invalid(i):
        # A frequent reason for invalidity is that the reporter
        # did not follow the "buddy system" for filing.
        close_as_invalid(i)
      elif issue_already_fixed(i):
        version = fixed_in_release(i)
        move_to_milestone(i, version)
        close_as_fixed(i)
      elif issue_unreproducible(i):
        close_as_worksforme(i)
      elif issue_is_real_but_we_won't_fix_it(i):
        close_as_wontfix(i)
      elif issue_is_closeable_for_some_other_reason(i):
        close_it_for_that_reason(i)

      # Else issue should remain open, so DTRT with it...

      # Set priority, environment, component, etc, as needed.
      adjust_all_fields_that_need_adjustment(i)

      # Figure out where to put it.
      if issue_is_a_lovely_fantasy(i):
        move_to_milestone(i, "blue-sky")
      if issue_is_not_important_enough_to_block_any_particular_release(i):
        move_to_milestone(i, "nonblocking")
      elif issue_resolution_would_require_incompatible_changes(i):
        move_to_milestone(i, "2.0-consider")
      elif issue_hurts_people_somewhat(i):
        move_to_milestone(i, "1.6-consider")  # or whatever
      elif issue_hurts_people_a_lot(i):
        move_to_milestone(i, "1.5-consider")
      elif issue_hurts_and_hurts_and_should_block_the_release(i):
        move_to_milestone(i, "1.5")

セキュリティ問題の処理方法

このドキュメントは、Subversion開発者がセキュリティ問題にどのように対応するかについての情報です。問題を報告するには、セキュリティ報告の手順を参照してください。

Subversionの設計と実装におけるセキュリティアプローチ

Subversionの最初の仕事は、データを安全に保つことです。そのため、Subversion開発コミュニティはセキュリティを非常に重視しています。このことを示す1つの方法は、自分たちが暗号化やセキュリティの専門家であるふりをしないことです。Subversion用の独自のセキュリティメカニズムを多数作成するのではなく、セキュリティ分野の知識を持つ人々が提供するセキュリティライブラリやプロトコルと相互運用するようにSubversionを教えることを好みます。たとえば、Subversionはワイヤ暗号化をOpenSSLのようなものに委ねています。認証と基本的な承認は、Cyrus SASLまたはApache HTTP Serverとその豊富なモジュールコレクションが提供するメカニズムに委ねています。サードパーティのライブラリとAPIを使用してセキュリティ専門家の知識を活用できる限り、今後もそうしていくつもりです。

報告されたセキュリティ脆弱性の処理

このドキュメントでは、セキュリティ上の影響があると分類される可能性のある問題を受け取ったり発見したりしたときに、私たちが取る手順について説明します。これは、コミッター向けのApacheガイドラインを補足するものです。

メーリングリスト

セキュリティの問題は、private@subversion.apache.org + security@apache.orgで議論する必要があります。security@subversion.apache.orgは、これらの2つのリストをターゲットとする便利なエイリアスです。(security@httpd.a.oなどとは異なり、メーリングリストではないため、個別に購読/購読解除できないことに注意してください。)

課題の追跡

以前のセキュリティアドバイザリのリストを以下に公開しています。https://subversion.dokyumento.jp/security/

進行中の課題は、PMCのプライベートリポジトリで追跡します。https://svn.apache.org/repos/private/pmc/subversion/security

私たちが従う手順

公開された手順に従うことを目指しています。

通常、ASFの推奨手順に従います。通常、事前に選択された関係者への事前通知も行います。この詳細は、PMCのプライベートリポジトリで管理されています。

また、How to Roll Releases in Privateに記載されている別の手順を使用する場合があります。現在、通常はこの手順を使用しません