Copyright (c) 2004, 2005, 2007, 2008  Free Software Foundation, Inc.

     Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover texts being ``A GNU Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the license is included in the section entitled ``GNU Free Documentation License'' in the Emacs manual.

     この文書を、フリーソフトウェア財団発行の GNU フリー文書利用許諾契約書第 1.2 版またはそれ以降の版が定める条件の下で複製、配布、あるいは変更することを許可します。変更不可部分は指定しません。「A GNU Manual」は表表紙テキスト、以下の (a) は裏表紙テキストです。この利用許諾契約書の複写は「Emacs manual」の「GNU フリー文書利用許諾契約書」という章に含まれています。

     (a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify this GNU Manual, like GNU software.  Copies published by the Free Software Foundation raise funds for GNU development.''

     (a) FSF の裏表紙テキスト:「あなたにはこの GNU Manual を GNU ソフトウェアのように複製したり変更する自由があります。複製はフリーソフトウェア財団によって出版されました。(フリーソフトウェア財団は) GNU の開発のために必要な資金を集めています。」

     This document is part of a collection distributed under the GNU Free Documentation License.  If you want to distribute this document separately from the collection, you can do so by adding a copy of the license to the document, as described in section 6 of the license.

     この文書は「GNU フリー文書利用許諾契約書」に基づいて配布された収集著作物の一部です。もしあなたがこの文書を収集著作物から分離して配布したいときは、契約書の第 6 項に記述されているように、文書に契約書の複写を付加することによって、行なうことができます。

Gnus Coding Style and Maintainance Guide
****************************************

このマニュアルは ... を説明します。

Gnus でコードを書くときの流儀
=================

依存関係
----

Gnus の配布は、Gnus のために書かれ Gnus のために集中的に使われるたくさんのライブラリーを含んでいます。しかし、それらのライブラリーの多くはそれら単独でも有用です。例えば他の Emacs Lisp パッケージが、MIME ライブラリーを使うかもしれません。See The Emacs MIME Manual.

汎用ライブラリー
--------

netrc.el
     .netrc を解析する機能を提供します。このファイルは Gnus に依存しません。

format-spec.el
     任意のフォーマット文字列をフォーマットする関数群を提供します。このファイルは Gnus に依存しません。

hex-util.el
     16進数の文字列をエンコード/デコードするための関数群です。このファイルは Gnus に依存しません。

暗号化とセキュリティー
-----------

encrypt.el
     ファイルを暗号化するルーチン群を提供します。このファイルは Gnus に依存しません。

password.el
     利用者のパスワードを読み取り、パスワードキャッシュを使うこともあります。このファイルは Gnus に依存しません。

tls.el
     GnuTLS で囲むラッパーを介して TLS/SSL をサポートします。このファイルは Gnus に依存しません。

pgg*.el
     さまざまな PGP の実装のためのインターフェースを提供します。これらのファイルは Gnus に依存しません。

sha1.el
     SHA1 Secure Hash Algorithm. このファイルは Gnus に依存しません。

ネットワーキング
--------

dig.el
     ドメイン名システム dig へのインターフェースです。このファイルに Gnus への重大な依存はありません。 gnus-run-mode-hooks (ラッパー関数) を使います。

dns.el, dns-mode.el
     ドメイン名サービスで調べます。これらのファイルは Gnus に依存しません。

RFC に関係するメールとニュースのライブラリー
------------------------

pop3.el
     ポストオフィスプロトコル (RFC1460) へのインターフェースです。このファイルは Gnus に依存しません。

imap.el
     IMAP ライブラリーです。このファイルは Gnus に依存しません。

ietf-drums.el
     RFC822bis ヘッダーを解析する関数群を提供します。このファイルは Gnus に依存しません。

rfc1843.el
     HZ (RFC1843) デコードを行ないます。HZ は中国語と ASCII 文字を任意に混ぜ合わせた文章の、ファイル交換のためのデータです。 rfc1843-gnus-setup は Gnus でだけ役に立つでしょう。Gnus への依存を無くすために、この関数は別の場所に移設すべきかもしれません。これ以外に、重大ではないけれども Gnus に依存している関数 rfc1843-decode-article-body については、引数をオプションにすることによって、gnus-newsgroup-name を除外することができるでしょう。

rfc2045.el
     RFC2045 ヘッダーをデコードする関数群を提供します。このファイルは Gnus に依存しません。

rfc2047.el
     RFC2047 メッセージをエンコードおよびデコードする関数群を提供します。このファイルは Gnus に依存しません。でも、いくつかの Gnus 由来のシンボルをテストします (訳注: それらが無くても動作します)。

rfc2104.el
     RFC2104 に基づくメッセージのハッシュによる認証のためのコードを提供します。このファイルは Gnus に依存しません。

rfc2231.el
     RFC2231 ヘッダーをデコードする関数群を提供します。このファイルは Gnus に依存しません。

flow-fill.el
     RFC2646 の "flowed" テキストを処理します。このファイルは Gnus に依存しません。

uudecode.el
     ELisp 版の uudecode です (訳注: でも外部プログラムの uudecode がある場合は、ディフォルトでそれを使います)。このファイルは Gnus に依存しません。

canlock.el
     Cancel-Lock 機能のための関数群を提供します。このファイルは Gnus に依存しません。

message
-------

Gnus ではすべてのメッセージ (メールとニュースの両方) の作成を Message モードのバッファーで行ないます。Message モードは Emacs のメールモードの置き換えになることが意図されています。message.el は Gnus に依存しないようにすべきです。しかし、残念ながらそうなっていないのです。依存関係を絶ち切るためのパッチや提案を歓迎します。

Emacs MIME
----------

mml*.el および mm-*.el のファイル群は Emacs のための MIME の機能を提供します。

MML (MIME Meta Language) は Gnus からは独立したものだと考えられていますが、残念ながら現実はそうではありません。その依存関係を絶つためのパッチや提案を歓迎します。

Gnus バックエンド
-----------

nn*.el のファイル群は NNTP (nntp.el), IMAP (nnimap.el) および複数の他のメールバックエンドの機能を提供します (おそらく nnml.el, nnfolder.el および nnmaildir.el が、もっとも広く使われているメールバックエンドです)。

互換性
===

No Gnus と Gnus 5.10.10 以上は次のもので動作します:

  * Emacs 21.1 とそれ以上。

  * XEmacs 21.4 とそれ以上。

Gnus 5.10.8 以下は次のもので動作します:

  * Emacs 20.7 とそれ以上。

  * XEmacs 21.1 とそれ以上。

Gnus の維持管理に関する手引
****************

安定版と開発版
=======

Gnus の開発は通常 CVS の幹で行なわれます。すなわち、開発することと新しい機能をテストするために分離された枝はありません。幹ではとても活発に、ほとんど日替りで開発が行なわれています。新しいメジャーなリリース (例えば 5.10.1) の後だけは、通常、数ヶ月間に渡って新規な機能の開発が凍結されます。Gnus 5.10.6 がリリースされた後で新規な機能の開発が再開しましたが、必要に応じてさらに安定な版 (5.10.7, ...) をリリースするための安定版の枝 (v5-10) で、5.10 系列は存続しています。 See Gnus の開発 (The Gnus Newsreader).

Gnus の安定版のリリースは、最終的には Emacs の一部になります。例えば Gnus 5.8 は (Gnus 5.9 に改称して) Emacs 21 の一部になりました。 5.10 系列は Gnus 5.11 として Emacs 22 の一部になりました。

同期
==

その昔、Emacs に Gnus を編入させるのは、まったくやっかいなことでした。 Emacs のリポジトリーにある Gnus に対して行なわれた変更が、新しい Gnus の版にも適用されているかどうかをチェックしなければならなかったのです。そうしないと、Emacs のリポジトリーで行なわれたバグの修正が失われてしまうかもしれませんから。

Gnus 5.10 を編入するにあたっては、Emacs CVS で行なわれたバグの修正が Gnus CVS に伝搬することを確実にするために、Miles Bader さんが半自動的な Emacs-Gnus ゲートウェイを立ち上げました。それらのバグの修正は、安定版の枝と幹に取り込まれます。基本的にそのアイデアは、Emacs と Gnus v5-10 におけるすべての共通なファイルを Emacs-Gnus ゲートウェイが同じにすることです。ただし非常に正当な理由がある (例えば Emacs では Gnus の版を表す文字列が 5.11 ですが v5-10 枝では 5.10.何がし のままになっている) 場合を除きます。さらに Emacs か v5-10 枝のどちらかで、それらのファイルに対して行なわれたすべての変更は、Gnus の CVS の幹にも反映されます。ただし、こちらも正当な理由がある場合を除きます。これによって、次の Gnus のメジャーな版が Emacs に編入されるとき、それは非常に楽なはずです---Emacs だけで変更されたことが失われてしまうことを心配せずに、Gnus の幹をそれらのファイルにどさっと置くだけで良いのです。

この結果、ハッカーであるあなたは、通常は一つの場所で変更を行なうだけで済むことになります:

  * Gnus の外にあると見なされるファイル (例えば新しい encrypt.el) が対象の場合は、おそらく Emacs で変更を行なうべきです。それは二〜三日後に Gnus に現われるでしょう。

     Emacs の CVS への書き込みが許されていない (またはそれが不便) ならば、 v5-10 枝で変更を行なえば良いでしょう。それは Emacs の CVS に伝搬されるはずです---しかし、それが論争の的になる可能性があって、メーリングリストで議論することが必要かどうかを判断するために、追加の調査が (Miles さんによって) 行なわれるでしょう。しかし多くの変更は明らかなバグの修正なので、たいていの場合は問題ありません。

  * Gnus のファイルへの変更で、それが十分に重要な Emacs と v5-10 枝の部分であるのならば、変更は v5-10 枝で行なえば良いでしょう。そしてそれは Emacs の CVS と Gnus の CVS の幹に反映されるでしょう (二〜三日後に)。そのような変更の最も顕著な例は、ドキュメントの改善を含むバグの修正です。

     (おそらく、対象になるソースコードが v5-10 枝と Gnus の CVS の幹で異なるために) 衝突を生じることがわかっている場合は、あなたの変更を両方の場所にインストールしてください。そして、私がそれらを同期させようとすると衝突するでしょう---そういうほとんどの場合に とにかく 衝突します。でも、私が二つの「同一の」変更を調べる場合に、それを解決してかつ実際にコードを修正しなければならないことに比べれば、適切なものを選ぶだけで済む方が、多くの場合、私にはより簡単です。

  * Gnus の開発における雑多な変更については、単に Gnus の CVS の幹を変更すれば、それは Emacs に反映されるでしょう。二〜三年後に... :-)

もちろんどんな場合でも、私が同期させる作業を待てないのであれば、あなたの変更を二つ以上の場所にチェックインすることはできるし、恐らく問題にならないでしょう。通常、変更は文字どおりにとにかく同一ですから、容易に自動的に解決することができます (ときどき私はそのように重複して行なわれるチェックインの中でお間抜けなもの、例えば空白文字の違いに気づいて、それらを統一しますけれどね ;-)。

いろんなこと
======

GNUS-NEWS
=========

texi/gnus-news.texi を元に GNUS-NEWS を生成させるのは、No Gnus から始まりました。GNUS-NEWS は編集しないでください。 texi/gnus-news.texi を編集し、texi ディレクトリーで make GNUS-NEWS をタイプしてから、 GNUS-NEWS と texi/gnus-news.texi をチェックインしてください。

defcustoms で使う :version 情報の流儀
=============================

新しいカスタマイズ可能な変数を Oort Gnus (v5-10 枝を含む) に導入するときは、コメントを含んだ :version "22.1" ;; Oort Gnus を使ってください。あるいは、もしその機能が例えば Emacs 22.2 の Gnus 5.10.10 のために追加されたのであれば、:version "22.2" ;; Gnus 5.10.10 を使ってください。その変数が No Gnus で新規だったら、:version "23.0" ;; No Gnus を使ってください。

カスタマイズ可能な変数のディフォルト値を変更したときも、同じことを行なってください。