Commit 21d541aa19e90752232bf6c43002f019f204f988

Authored by Keiichi Kii
Committed by Greg Kroah-Hartman
1 parent d0a542637f

updated Documentation/ja_JP/SubmittingPatches

Updated Documentaion/ja_JP/SubmittingPatches due to changes from upstream
version(2.6.39) of the file.

And also, this translated SubmittingPatches is already reviewed by JF
project. The JF project is the Japanese equivalent of LDP.

Signed-off-by: Keiichi Kii <k-keiichi@bx.jp.nec.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

Showing 1 changed file with 213 additions and 45 deletions Side-by-side Diff

Documentation/ja_JP/SubmittingPatches
... ... @@ -11,16 +11,18 @@
11 11 fork. So if you have any comments or updates of this file, please try
12 12 to update the original English file first.
13 13  
14   -Last Updated: 2007/10/24
  14 +Last Updated: 2011/06/09
  15 +
15 16 ==================================
16 17 これは、
17   -linux-2.6.23/Documentation/SubmittingPatches の和訳
  18 +linux-2.6.39/Documentation/SubmittingPatches の和訳
18 19 です。
19 20 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
20   -翻訳日: 2007/10/17
  21 +翻訳日: 2011/06/09
21 22 翻訳者: Keiichi Kii <k-keiichi at bx dot jp dot nec dot com>
22 23 校正者: Masanari Kobayashi さん <zap03216 at nifty dot ne dot jp>
23 24 Matsukura さん <nbh--mats at nifty dot com>
  25 + Takeshi Hamasaki さん <hmatrjp at users dot sourceforge dot jp>
24 26 ==================================
25 27  
26 28 Linux カーネルに変更を加えるための Howto
... ... @@ -97,7 +99,7 @@
97 99 http://savannah.nongnu.org/projects/quilt
98 100  
99 101 Andrew Morton's patch scripts:
100   -http://userweb.kernel.org/~akpm/stuff/tpp.txt
  102 +http://userweb.kernel.org/~akpm/stuff/patch-scripts.tar.gz
101 103 このリンクの先のスクリプトの代わりとして、quilt がパッチマネジメント
102 104 ツールとして推奨されています(上のリンクを見てください)。
103 105  
104 106  
... ... @@ -109,9 +111,25 @@
109 111 「ドライバー X に対するバグフィックス」あるいは「このパッチはサブシス
110 112 テム X に対する更新を含んでいます。どうか取り入れてください。」などです。
111 113  
  114 +パッチの説明を Linux カーネルのソースコードマネジメントシステム「 git 」の
  115 +コミットログとして簡単に引用できる形で書けば、メンテナから感謝されるでしょう。
  116 +以下の #15 を見てください。
  117 +
112 118 説明が長くなりだしたのであれば、おそらくそれはパッチを分ける必要がある
113 119 という兆候です。次の #3 を見てください。
114 120  
  121 +パッチ(シリーズ)を(再)投稿する時、十分なパッチの説明とそのパッチが必要な理由を
  122 +パッチに含めてください。ただ「これはパッチ(シリーズ)のバージョン N」とだけ
  123 +書かないでください。そして、パッチをマージする人にパッチの説明を探させそれを
  124 +パッチに追記させるため、過去のバージョンのパッチやそのパッチの URL を参照する
  125 +手間をかけさせないでください。
  126 +つまり、パッチシリーズとその説明は一緒にあるべきです。これはパッチをマージする
  127 +人、レビューする人、どちらのためにもなります。レビューする人の中には、おそらく
  128 +過去のバージョンのパッチを受け取ってもいない人がいます。
  129 +
  130 +登録済みのバグエントリを修正するパッチであれば、そのバグエントリを示すバグ ID
  131 +や URL を明記してください。
  132 +
115 133 3) パッチの分割
116 134  
117 135 意味のあるひとまとまりごとに変更を個々のパッチファイルに分けてください。
... ... @@ -141,7 +159,7 @@
141 159 拒否されるでしょう。
142 160  
143 161 あなたはパッチを投稿する前に最低限パッチスタイルチェッカー
144   -( scripts/patchcheck.pl )を利用してパッチをチェックすべきです。
  162 +( scripts/checkpatch.pl )を利用してパッチをチェックすべきです。
145 163 もしパッチに違反がのこっているならば、それらの全てについてあなたは正当な
146 164 理由を示せるようにしておく必要があります。
147 165  
148 166  
... ... @@ -192,13 +210,13 @@
192 210 情報がマニュアルページの中に入ってくるように、変更が起きたという
193 211 通知を送ってください。
194 212  
195   -たとえ、メンテナが #4 で反応がなかったとしても、メンテナのコードに変更を
  213 +たとえ、メンテナが #5 で反応がなかったとしても、メンテナのコードに変更を
196 214 加えたときには、いつもメンテナに CC するのを忘れないようにしてください。
197 215  
198   -小さなパッチであれば、Adrian Bunk が管理している Trivial Patch Monkey
199   -(ちょっとしたパッチを集めている)<trivial@kernel.org>に CC してもいい
200   -です。ちょっとしたパッチとは以下のルールのどれか1つを満たしていなけ
201   -ればなりません。
  216 +小さなパッチであれば、Trivial Patch Monkey(ちょっとしたパッチを集めている)
  217 +<trivial@kernel.org>に CC してもいいです。その現管理者については MAINTAINERS
  218 +ファイルを見てください。ちょっとしたパッチとは以下のルールのどれか1つを満たして
  219 +いなければなりません。
202 220 ・ドキュメントのスペルミスの修正
203 221 ・grep(1) コマンドによる検索を困難にしているスペルの修正
204 222 ・コンパイル時の警告の修正(無駄な警告が散乱することは好ましくないた
... ... @@ -210,7 +228,6 @@
210 228 ・移植性のないコードから移植性のあるコードへの置き換え(小さい範囲で
211 229 あればアーキテクチャ特有のことでも他の人がコピーできます)
212 230 ・作者やメンテナによる修正(すなわち patch monkey の再転送モード)
213   -EMAIL: <trivial@kernel.org>
214 231  
215 232 7) MIME やリンクや圧縮ファイルや添付ファイルではなくプレインテキストのみ
216 233  
217 234  
218 235  
... ... @@ -233,26 +250,15 @@
233 250 例外:お使いの電子メールクライアントがパッチをめちゃくちゃにするので
234 251 あれば、誰かが MIME 形式のパッチを再送するよう求めるかもしれません。
235 252  
236   -警告: Mozilla のような特定の電子メールクライアントは電子メールの
237   -ヘッダに以下のものを付加して送ります。
238   ----- message header ----
239   -Content-Type: text/plain; charset=us-ascii; format=flowed
240   ----- message header ----
241   -問題は、「 format=flowed 」が付いた電子メールを特定の受信側の電子メール
242   -クライアントがタブをスペースに置き換えるというような変更をすることです。
243   -したがって送られてきたパッチは壊れているように見えるでしょう。
  253 +余計な変更を加えずにあなたのパッチを送信するための電子メールクライアントの設定
  254 +のヒントについては Documentation/email-clients.txt を参照してください。
244 255  
245   -これを修正するには、mozilla の defaults/pref/mailnews.js ファイルを
246   -以下のように修正します。
247   -pref("mailnews.send_plaintext_flowed", false); // RFC 2646=======
248   -pref("mailnews.display.disable_format_flowed_support", true);
249   -
250 256 8) 電子メールのサイズ
251 257  
252 258 パッチを Linus へ送るときは常に #7 の手順に従ってください。
253 259  
254 260 大きなパッチはメーリングリストやメンテナにとって不親切です。パッチが
255   -未圧縮で 40KB を超えるようであるなら、インターネット上のアクセス可能な
  261 +未圧縮で 300KB を超えるようであるなら、インターネット上のアクセス可能な
256 262 サーバに保存し、保存場所を示す URL を伝えるほうが適切です。
257 263  
258 264 9) カーネルバージョンの明記
... ... @@ -324,7 +330,7 @@
324 330 (c) 本寄与は(a)、(b)、(c)を証明する第3者から私へ直接提供された
325 331 ものであり、私はそれに変更を加えていない。
326 332  
327   - (d) 私はこのプロジェクトと本寄与が公のものであることに理解及び同意す
  333 + (d) 私はこのプロジェクトと本寄与が公のものであることに理解及び同意す
328 334 る。同時に、関与した記録(投稿の際の全ての個人情報と sign-off を
329 335 含む)が無期限に保全されることと、当該プロジェクト又は関連する
330 336 オープンソースライセンスに沿った形で再配布されることに理解及び
331 337  
... ... @@ -340,8 +346,52 @@
340 346 無視されますが、あなたはそのタグを社内の手続きに利用したり、sign-off に特別
341 347 な情報を示したりすることができます。
342 348  
343   -13) いつ Acked-by: を使うのか
  349 +あなたがサブシステムまたはブランチのメンテナであれば、受け取ったパッチを自身の
  350 +ツリーにマージするために、わずかに変更が必要となる場合があります。なぜなら
  351 +あなたのツリーの中のコードと投稿者のツリーの中のコードは同一ではないためです。
  352 +もし、あなたが厳密に上記ルール(c)にこだわるのであれば、投稿者に再度差分を
  353 +とるよう依頼すべきです。しかし、これは時間とエネルギーを非生産的に浪費する
  354 +ことになります。ルール(b)はあなたにコードを修正する権利を与えてくれます。
  355 +しかし、投稿者のコードを修正し、その修正によるバグを投稿者に押し付けてしまう
  356 +ことはとても失礼なことです。この問題を解決するために、末尾の投稿者の
  357 +Signed-off-by とあなたがその末尾に追加する Signed-off-by の間に、修正を
  358 +加えたことを示す1行を追加することが推奨されています。
  359 +(その1行の書き方に)決まりはありませんが、大括弧の中に電子メールアドレスや氏名
  360 +と修正内容を記載するやり方は目につきやすく、最終段階での変更の責任があなたに
  361 +あることを明確にするのに十分な方法のようです。例えば、
344 362  
  363 + Signed-off-by: Random J Developer <random@developer.example.org>
  364 + [lucky@maintainer.example.org: struct foo moved from foo.c to foo.h]
  365 + Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org>
  366 +
  367 +あなたが安定版のブランチを管理しており、作成者のクレジット、変更の追跡、
  368 +修正のマージ、と同時に苦情からの投稿者の保護を行いたい場合、この慣習は特に
  369 +有用となります。いかなる事情があってもチェンジログに出てくる作成者の
  370 +アイデンティティ情報(From ヘッダ)は変更できないことに注意してください。
  371 +
  372 +バックポートする人のための特別な注意事項。追跡を容易に行うために、コミット
  373 +メッセージのトップ(サブジェクト行のすぐ後)にパッチの起源を示す情報を記述する
  374 +ことは一般的で有用な慣習です。例えば、これは 2.6-stable ツリーでの一例です。
  375 +
  376 + Date: Tue May 13 19:10:30 2008 +0000
  377 +
  378 + SCSI: libiscsi regression in 2.6.25: fix nop timer handling
  379 +
  380 + commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream
  381 +
  382 +そして、これは 2.4 ツリーでの一例です。
  383 +
  384 + Date: Tue May 13 22:12:27 2008 +0200
  385 +
  386 + wireless, airo: waitbusy() won't delay
  387 +
  388 + [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a]
  389 +
  390 +どんな形式であれ、この情報はあなたのツリーを追跡する人やあなたのツリーのバグを
  391 +解決しようとしている人にとって価値のある支援となります。
  392 +
  393 +13) いつ Acked-by: と Cc: を使うのか
  394 +
345 395 「 Signed-off-by: 」タグはその署名者がパッチの開発に関わっていたことやパッチ
346 396 の伝播パスにいたことを示しています。
347 397  
... ... @@ -354,7 +404,7 @@
354 404  
355 405 Acked-by: は Signed-off-by: のように公式なタグではありません。それはメンテナが
356 406 少なくともパッチをレビューし、同意を示しているという記録です。そのような
357   -ことからパッチの統合者がメンテナの「うん、良いと思うよ」という発言を
  407 +ことからパッチをマージする人がメンテナの「うん、良いと思うよ」という発言を
358 408 Acked-by: へ置き換えることがあります。
359 409  
360 410 Acked-by: が必ずしもパッチ全体の承認を示しているわけではありません。例えば、
361 411  
... ... @@ -364,8 +414,63 @@
364 414 この点は、ご自分で判断してください。(その Acked-by: が)疑わしい場合は、
365 415 メーリングリストアーカイブの中の大元の議論を参照すべきです。
366 416  
367   -14) 標準的なパッチのフォーマット
  417 +パッチにコメントする機会を持っていたが、その時にコメントしなかった人がいれば、
  418 +その人を指す「Cc:」タグを任意で追加してもかまいません。これは指定された人からの
  419 +明確なアクションなしに付与できる唯一のタグです。
  420 +このタグはパッチに関心があると思われる人達がそのパッチの議論に含まれていたこと
  421 +を明文化します。
368 422  
  423 +14) Reported-by と Tested-by: と Reviewed-by: の利用
  424 +
  425 +他の誰かによって報告された問題を修正するパッチであれば、問題報告者という寄与を
  426 +クレジットするために、Reported-by: タグを追加することを検討してください。
  427 +こまめにバグ報告者をクレジットしていくことで、うまくいけばその人たちが将来再び
  428 +コミュニティの力となってくれるでしょう。
  429 +ただし、報告者の許可無くこのタグを追加しないように注意してください。特に、
  430 +問題が公の場で報告されていなかったのであれば。
  431 +
  432 +Tested-by: タグはタグで指定された人によって(ある環境下で)パッチのテストに成功
  433 +していることを示します。このタグはメンテナにテストが実施済みであることを
  434 +知らせ、将来の関連パッチのテスト協力者を見つける方法を提供し、テスト実施者に
  435 +対するクレジットを保証します。
  436 +
  437 +Reviewed-by: タグは、それとは異なり、下記のレビューア宣言の下にレビューされ、
  438 +受け入れ可能とみなされたパッチであることを示します。
  439 +
  440 + レビューアによる監督宣言
  441 +
  442 + 私は Reviewed-by: タグを提示することによって、以下のことを明言する。
  443 +
  444 + (a) 私はメインラインカーネルへの統合に向け、その妥当性及び「即応性
  445 + (訳注)」を検証し、技術的側面からパッチをレビュー済みである。
  446 +
  447 + 訳注:
  448 + 「即応性」の原文は "readiness"。
  449 + パッチが十分な品質を持っており、メインラインカーネルへの統合を即座に
  450 + 行うことができる状態であるかどうかを "readiness" という単語で表現
  451 + している。
  452 +
  453 + (b) パッチに関するあらゆる問題、懸念、あるいは、疑問は投稿者へ伝達済み
  454 + である。私はそれらのコメントに対する投稿者の返答に満足している。
  455 +
  456 + (c) 投稿に伴い改良されるコードがある一方で、現時点で、私は(1)それが
  457 + カーネルにとって価値のある変更であること、そして、(2)統合に際して
  458 + 議論になり得るような問題はないものと確信している。
  459 +
  460 + (d) 私はパッチをレビューし適切であると確信している一方で、あらゆる
  461 + 状況においてその宣言した目的や機能が正しく実現することに関して、
  462 + いかなる保証もしない(特にどこかで明示しない限り)。
  463 +
  464 +Reviewd-by タグはそのパッチがカーネルに対して適切な修正であって、深刻な技術的
  465 +問題を残していないという意見の宣言です。興味のあるレビューアは誰でも(レビュー
  466 +作業を終えたら)パッチに対して Reviewed-by タグを提示できます。このタグは
  467 +レビューアの寄与をクレジットする働き、レビューの進捗の度合いをメンテナに
  468 +知らせる働きを持ちます。そのパッチの領域に詳しく、そして、しっかりとした
  469 +レビューを実施したレビューアによって提供される時、Reviewed-by: タグがあなたの
  470 +パッチをカーネルにマージする可能性を高めるでしょう。
  471 +
  472 +15) 標準的なパッチのフォーマット
  473 +
369 474 標準的なパッチのサブジェクトは以下のとおりです。
370 475  
371 476 Subject: [PATCH 001/123] subsystem: summary phrase
372 477  
373 478  
... ... @@ -396,19 +501,38 @@
396 501 電子メールのサブジェクト内のサブシステム表記は、パッチが適用される
397 502 分野またはサブシステムを識別できるようにすべきです。
398 503  
399   -電子メールのサブジェクトの「概要の言い回し」はそのパッチの概要を正確
400   -に表現しなければなりません。「概要の言い回し」をファイル名にしてはい
401   -けません。一連のパッチ中でそれぞれのパッチは同じ「概要の言い回し」を
402   -使ってはいけません(「一連のパッチ」とは順序付けられた関連のある複数の
  504 +電子メールのサブジェクトの「summary phrase」はそのパッチの概要を正確
  505 +に表現しなければなりません。「summary phrase」をファイル名にしてはい
  506 +けません。パッチシリーズ中でそれぞれのパッチは同じ「summary phrase」を
  507 +使ってはいけません(「パッチシリーズ」とは順序付けられた関連のある複数の
403 508 パッチ群です)。
404 509  
405   -あなたの電子メールの「概要の言い回し」がそのパッチにとって世界で唯
406   -一の識別子になるように心がけてください。「概要の言い回し」は git の
407   -チェンジログの中へずっと伝播していきます。「概要の言い回し」は、開
408   -発者が後でパッチを参照するために議論の中で利用するかもしれません。
409   -人々はそのパッチに関連した議論を読むために「概要の言い回し」を使って
410   -google で検索したがるでしょう。
  510 +あなたの電子メールの「summary phrase」がそのパッチにとって世界で唯一の識別子に
  511 +なるように心がけてください。「summary phrase」は git のチェンジログの中へ
  512 +ずっと伝播していきます。「summary phrase」は、開発者が後でパッチを参照する
  513 +ために議論の中で利用するかもしれません。
  514 +人々はそのパッチに関連した議論を読むために「summary phrase」を使って google で
  515 +検索したがるでしょう。それはまた2、3ヶ月あとで、人々が「gitk」や
  516 +「git log --oneline」のようなツールを使用して何千ものパッチに目を通す時、
  517 +唯一目にとまる情報となるでしょう。
411 518  
  519 +これらの理由のため、「summary phrase」はなぜパッチが必要であるか、パッチが何を
  520 +変更するかの2つの情報をせいぜい70〜75文字で表現していなければなりません。
  521 +「summary phrase」は簡潔であり説明的である表現を目指しつつ、うまく
  522 +まとめられている概要となるべきです。
  523 +
  524 +「summary phrase」は「Subject: [PATCH tag] <summary phrase>」のように、
  525 +大括弧で閉じられたタグを接頭辞として付加してもかまいません。このタグは
  526 +「summary phrase」の一部とは考えませんが、パッチをどのように取り扱うべきかを
  527 +表現します。
  528 +一般的には「v1, v2, v3」のようなバージョン情報を表すタグ(過去のパッチに対する
  529 +コメントを反映するために複数のバージョンのパッチが投稿されているのであれば)、
  530 +「RFC」のようなコメントを要求するタグが挙げられます。パッチシリーズとして4つの
  531 +パッチがあれば、個々のパッチに「1/4, 2/4, 3/4, 4/4」のように番号を付けても
  532 +かまいません。これは開発者がパッチを適用する順番を確実に把握するためです。
  533 +そして、開発者がパッチシリーズの中のすべてのパッチをもらさずレビュー或いは
  534 +適用するのを保証するためです。
  535 +
412 536 サブジェクトの例を二つ
413 537  
414 538 Subject: [patch 2/5] ext2: improve scalability of bitmap searching
... ... @@ -426,7 +550,12 @@
426 550  
427 551 説明本体は無期限のソースのチェンジログにコミットされます。なので、説明
428 552 本体はそのパッチに至った議論の詳細を忘れているある程度の技量を持っている人
429   -がその詳細を思い出すことができるものでなければなりません。
  553 +がその詳細を思い出すことができるものでなければなりません。パッチが対処する
  554 +障害の症状(カーネルログメッセージや oops メッセージ等)を記載することは問題に
  555 +対処可能なパッチを求めてコミットログを検索する人々にとって特に有用です。
  556 +パッチがコンパイル問題を解決するのであれば、そのパッチを探している人が見つける
  557 +ことができる情報だけで十分であり、コンパイル時の全てのエラーを含める必要は
  558 +ありません。「summary phrase」と同様に、簡潔であり説明的であることが重要です。
430 559  
431 560 「 --- 」マーカー行はパッチ処理ツールに対して、チェンジログメッセージの終端
432 561 部分を認識させるという重要な役目を果たします。
433 562  
434 563  
... ... @@ -436,14 +565,46 @@
436 565 追加され何行消されたかを示すものです。diffstat コマンドは特に大きなパッチに
437 566 おいて役立ちます。その時点でだけ又はメンテナにとってのみ関係のあるコメント
438 567 は無期限に保存されるチェンジログにとって適切ではありません。そのため、この
439   -ようなコメントもマーカー行の後に書かれるべきです。ファイル名はカーネルソー
440   -スツリーのトップディレクトリからの表記でリストされるため、横方向のスペース
441   -をとり過ぎないように、diffstat コマンドにオプション「 -p 1 -w 70 」を指定し
442   -てください(インデントを含めてちょうど80列に合うでしょう)。
  568 +ようなコメントもマーカー行の後に書かれるべきです。
  569 +このようなコメントの良い例として、v1 と v2 のバージョン間で何が変更されたかを
  570 +表す「パッチの変更履歴」が挙げられます。
443 571  
  572 +「 --- 」マーカー行の後に diffstat コマンドの結果を含めるのであれば、ファイル
  573 +名はカーネルソースツリーのトップディレクトリからの表記で列記されるため、横方向
  574 +のスペースをとり過ぎないように、diffstat コマンドにオプション「 -p 1 -w 70 」
  575 +を指定してください(インデントを含めてちょうど80列に合うでしょう)。
  576 +
444 577 適切なパッチのフォーマットの詳細についてはセクション3の参考文献を参照して
445 578 ください。
446 579  
  580 +16) 「git pull」要求の送り方(Linus の電子メールから)
  581 +
  582 +間違ったブランチから引っ張るのを防ぐために、git リポジトリのアドレスと
  583 +ブランチ名を同じ行に1行で記載してください。そうすることで、3回の連続クリック
  584 +で全て選択できます。
  585 +
  586 +正しい形式は下記の通りです。
  587 +
  588 + "Please pull from
  589 +
  590 + git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus
  591 +
  592 + to get these changes:"
  593 +
  594 +その結果、アドレスを自分自身でタイピングして間違えることはなくなります(実際に、
  595 +何度か間違ったブランチから引っ張ってきてしまい、その時に diffstat の結果を
  596 +検証して間違っていることに気づいたことがあります。どこから何を引っ張るべきかを
  597 +「探したり」、正しいブランチ名かどうかを重ねてチェックしたりする必要が
  598 +なくなればより快適になるでしょう)。
  599 +
  600 +diffstat の結果を生成するために「 git diff -M --stat --summary 」を使って
  601 +ください。-M オプションはファイル名の変更を検知でき、--summary オプションは
  602 +新規ファイル、削除されたファイル、名前が変更されたファイルの概要を生成します。
  603 +
  604 +-M オプション(ファイル名の変更検知)を指定すると、diffstat の結果はかなり
  605 +異なってきます。git は大規模な変更(追加と削除のペア)をファイル名の変更と
  606 +判断するためです。
  607 +
447 608 ------------------------------------
448 609 セクション2 - ヒントとTIPSと小技
449 610 ------------------------------------
... ... @@ -459,7 +620,7 @@
459 620 も逸脱していると、レビューやコメントなしに受け取ってもらえないかもし
460 621 れません。
461 622  
462   -唯一の特筆すべき例外は、コードをあるファイルから別のファイルに移動
  623 +特筆すべき例外は、コードをあるファイルから別のファイルに移動
463 624 するときです。この場合、コードを移動するパッチでは、移動されるコード
464 625 に関して移動以外の変更を一切加えるべきではありません。これにより、
465 626 コードの移動とあなたが行ったコードの修正を明確に区別できるようにな
... ... @@ -553,5 +714,10 @@
553 714  
554 715 Linus Torvalds's mail on the canonical patch format:
555 716 <http://lkml.org/lkml/2005/4/7/183>
  717 +
  718 +Andi Kleen, "On submitting kernel patches"
  719 + Some strategies to get difficult or controversial changes in.
  720 + http://halobates.de/on-submitting-patches.pdf
  721 +
556 722 --