xref: /OK3568_Linux_fs/kernel/Documentation/translations/ja_JP/SubmittingPatches (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunNOTE:
2*4882a593SmuzhiyunThis is a version of Documentation/process/submitting-patches.rst into Japanese.
3*4882a593SmuzhiyunThis document is maintained by Keiichi KII <k-keiichi@bx.jp.nec.com>
4*4882a593Smuzhiyunand the JF Project team <http://www.linux.or.jp/JF/>.
5*4882a593SmuzhiyunIf you find any difference between this document and the original file
6*4882a593Smuzhiyunor a problem with the translation,
7*4882a593Smuzhiyunplease contact the maintainer of this file or JF project.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunPlease also note that the purpose of this file is to be easier to read
10*4882a593Smuzhiyunfor non English (read: Japanese) speakers and is not intended as a
11*4882a593Smuzhiyunfork. So if you have any comments or updates of this file, please try
12*4882a593Smuzhiyunto update the original English file first.
13*4882a593Smuzhiyun
14*4882a593SmuzhiyunLast Updated: 2011/06/09
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun==================================
17*4882a593Smuzhiyunこれは、
18*4882a593Smuzhiyunlinux-2.6.39/Documentation/process/submitting-patches.rst の和訳
19*4882a593Smuzhiyunです。
20*4882a593Smuzhiyun翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
21*4882a593Smuzhiyun翻訳日: 2011/06/09
22*4882a593Smuzhiyun翻訳者: Keiichi Kii <k-keiichi at bx dot jp dot nec dot com>
23*4882a593Smuzhiyun校正者: Masanari Kobayashi さん <zap03216 at nifty dot ne dot jp>
24*4882a593Smuzhiyun         Matsukura さん <nbh--mats at nifty dot com>
25*4882a593Smuzhiyun         Takeshi Hamasaki さん <hmatrjp at users dot sourceforge dot jp>
26*4882a593Smuzhiyun==================================
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun        Linux カーネルに変更を加えるための Howto
29*4882a593Smuzhiyun        又は
30*4882a593Smuzhiyun        かの Linus Torvalds の取り扱い説明書
31*4882a593Smuzhiyun
32*4882a593SmuzhiyunLinux カーネルに変更を加えたいと思っている個人又は会社にとって、パッ
33*4882a593Smuzhiyunチの投稿に関連した仕組みに慣れていなければ、その過程は時々みなさんを
34*4882a593Smuzhiyunおじけづかせることもあります。この文章はあなたの変更を大いに受け入れ
35*4882a593Smuzhiyunてもらえやすくする提案を集めたものです。
36*4882a593Smuzhiyun
37*4882a593Smuzhiyunコードを投稿する前に、Documentation/process/submit-checklist.rst の項目リストに目
38*4882a593Smuzhiyunを通してチェックしてください。もしあなたがドライバーを投稿しようとし
39*4882a593Smuzhiyunているなら、Documentation/process/submitting-drivers.rst にも目を通してください。
40*4882a593Smuzhiyun
41*4882a593Smuzhiyun--------------------------------------------
42*4882a593Smuzhiyunセクション1 パッチの作り方と送り方
43*4882a593Smuzhiyun--------------------------------------------
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun1) 「 diff -up 」
46*4882a593Smuzhiyun------------
47*4882a593Smuzhiyun
48*4882a593Smuzhiyunパッチの作成には「 diff -up 」又は「 diff -uprN 」を使ってください。
49*4882a593Smuzhiyun
50*4882a593SmuzhiyunLinux カーネルに対する全ての変更は diff(1) コマンドによるパッチの形式で
51*4882a593Smuzhiyun生成してください。パッチを作成するときには、diff(1) コマンドに「 -u 」引
52*4882a593Smuzhiyun数を指定して、unified 形式のパッチを作成することを確認してください。また、
53*4882a593Smuzhiyun変更がどの C 関数で行われたのかを表示する「 -p 」引数を使ってください。
54*4882a593Smuzhiyunこの引数は生成した差分をずっと読みやすくしてくれます。パッチは Linux
55*4882a593Smuzhiyunカーネルソースの中のサブディレクトリではなく Linux カーネルソースのルート
56*4882a593Smuzhiyunディレクトリを基準にしないといけません。
57*4882a593Smuzhiyun
58*4882a593Smuzhiyun1個のファイルについてのパッチを作成するためには、ほとんどの場合、
59*4882a593Smuzhiyun以下の作業を行えば十分です。
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun	SRCTREE=linux-2.6
62*4882a593Smuzhiyun	MYFILE=drivers/net/mydriver.c
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun	cd $SRCTREE
65*4882a593Smuzhiyun	cp $MYFILE $MYFILE.orig
66*4882a593Smuzhiyun	vi $MYFILE	# make your change
67*4882a593Smuzhiyun	cd ..
68*4882a593Smuzhiyun	diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun複数のファイルについてのパッチを作成するためには、素の( vanilla )、す
71*4882a593Smuzhiyunなわち変更を加えてない Linux カーネルを展開し、自分の Linux カーネル
72*4882a593Smuzhiyunソースとの差分を生成しないといけません。例えば、
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun	MYSRC=/devel/linux-2.6
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun	tar xvfz linux-2.6.12.tar.gz
77*4882a593Smuzhiyun	mv linux-2.6.12 linux-2.6.12-vanilla
78*4882a593Smuzhiyun	diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff \
79*4882a593Smuzhiyun		linux-2.6.12-vanilla $MYSRC > /tmp/patch
80*4882a593Smuzhiyun
81*4882a593Smuzhiyundontdiff ファイルには Linux カーネルのビルドプロセスの過程で生成された
82*4882a593Smuzhiyunファイルの一覧がのっています。そして、それらはパッチを生成する diff(1)
83*4882a593Smuzhiyunコマンドで無視されるべきです。dontdiff ファイルは 2.6.12 以後のバージョ
84*4882a593Smuzhiyunンの Linux カーネルソースツリーに含まれています。それより前のバージョン
85*4882a593Smuzhiyunの Linux カーネルソースツリーに対する dontdiff ファイルは、
86*4882a593Smuzhiyun<http://www.xenotime.net/linux/doc/dontdiff>から取得することができます。
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun投稿するパッチの中に関係のない余分なファイルが含まれていないことを確
89*4882a593Smuzhiyun認してください。diff(1) コマンドで生成したパッチがあなたの意図したとお
90*4882a593Smuzhiyunりのものであることを確認してください。
91*4882a593Smuzhiyun
92*4882a593Smuzhiyunもしあなたのパッチが多くの差分を生み出すのであれば、あなたはパッチ
93*4882a593Smuzhiyunを意味のあるひとまとまりごとに分けたいと思うかもしれません。
94*4882a593Smuzhiyunこれは他のカーネル開発者にとってレビューしやすくなるので、あなたの
95*4882a593Smuzhiyunパッチを受け入れてもらうためにはとても重要なことです。これを補助でき
96*4882a593Smuzhiyunる多くのスクリプトがあります。
97*4882a593Smuzhiyun
98*4882a593SmuzhiyunQuilt:
99*4882a593Smuzhiyunhttp://savannah.nongnu.org/projects/quilt
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun2) パッチに対する説明
102*4882a593Smuzhiyun
103*4882a593Smuzhiyunパッチの中の変更点に対する技術的な詳細について説明してください。
104*4882a593Smuzhiyun
105*4882a593Smuzhiyun説明はできる限り具体的に。もっとも悪い説明は「ドライバー X を更新」、
106*4882a593Smuzhiyun「ドライバー X に対するバグフィックス」あるいは「このパッチはサブシス
107*4882a593Smuzhiyunテム X に対する更新を含んでいます。どうか取り入れてください。」などです。
108*4882a593Smuzhiyun
109*4882a593Smuzhiyunパッチの説明を Linux カーネルのソースコードマネジメントシステム「 git 」の
110*4882a593Smuzhiyunコミットログとして簡単に引用できる形で書けば、メンテナから感謝されるでしょう。
111*4882a593Smuzhiyun以下の #15 を見てください。
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun説明が長くなりだしたのであれば、おそらくそれはパッチを分ける必要がある
114*4882a593Smuzhiyunという兆候です。次の #3 を見てください。
115*4882a593Smuzhiyun
116*4882a593Smuzhiyunパッチ(シリーズ)を(再)投稿する時、十分なパッチの説明とそのパッチが必要な理由を
117*4882a593Smuzhiyunパッチに含めてください。ただ「これはパッチ(シリーズ)のバージョン N」とだけ
118*4882a593Smuzhiyun書かないでください。そして、パッチをマージする人にパッチの説明を探させそれを
119*4882a593Smuzhiyunパッチに追記させるため、過去のバージョンのパッチやそのパッチの URL を参照する
120*4882a593Smuzhiyun手間をかけさせないでください。
121*4882a593Smuzhiyunつまり、パッチシリーズとその説明は一緒にあるべきです。これはパッチをマージする
122*4882a593Smuzhiyun人、レビューする人、どちらのためにもなります。レビューする人の中には、おそらく
123*4882a593Smuzhiyun過去のバージョンのパッチを受け取ってもいない人がいます。
124*4882a593Smuzhiyun
125*4882a593Smuzhiyun登録済みのバグエントリを修正するパッチであれば、そのバグエントリを示すバグ ID
126*4882a593Smuzhiyunや URL を明記してください。
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun3) パッチの分割
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun意味のあるひとまとまりごとに変更を個々のパッチファイルに分けてください。
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun例えば、もし1つのドライバーに対するバグフィックスとパフォーマンス強
133*4882a593Smuzhiyun化の両方の変更を含んでいるのであれば、その変更を2つ以上のパッチに分
134*4882a593Smuzhiyunけてください。もし変更箇所に API の更新と、その新しい API を使う新たな
135*4882a593Smuzhiyunドライバーが含まれているなら、2つのパッチに分けてください。
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun一方で、もしあなたが多数のファイルに対して意味的に同じ1つの変更を加え
138*4882a593Smuzhiyunるのであれば、その変更を1つのパッチにまとめてください。言いかえると、
139*4882a593Smuzhiyun意味的に同じ1つの変更は1つのパッチの中に含まれます。
140*4882a593Smuzhiyun
141*4882a593Smuzhiyunあるパッチが変更を完結させるために他のパッチに依存していたとしても、
142*4882a593Smuzhiyunそれは問題ありません。パッチの説明の中で「このパッチはパッチ X に依存
143*4882a593Smuzhiyunしている」と簡単に注意書きをつけてください。
144*4882a593Smuzhiyun
145*4882a593Smuzhiyunもしパッチをより小さなパッチの集合に凝縮することができないなら、まずは
146*4882a593Smuzhiyun15かそこらのパッチを送り、そのレビューと統合を待って下さい。
147*4882a593Smuzhiyun
148*4882a593Smuzhiyun4) パッチのスタイルチェック
149*4882a593Smuzhiyun
150*4882a593Smuzhiyunあなたのパッチが基本的な( Linux カーネルの)コーディングスタイルに違反し
151*4882a593Smuzhiyunていないかをチェックして下さい。その詳細を Documentation/process/coding-style.rst152*4882a593Smuzhiyun見つけることができます。コーディングスタイルの違反はレビューする人の
153*4882a593Smuzhiyun時間を無駄にするだけなので、恐らくあなたのパッチは読まれることすらなく
154*4882a593Smuzhiyun拒否されるでしょう。
155*4882a593Smuzhiyun
156*4882a593Smuzhiyunあなたはパッチを投稿する前に最低限パッチスタイルチェッカー
157*4882a593Smuzhiyun( scripts/checkpatch.pl )を利用してパッチをチェックすべきです。
158*4882a593Smuzhiyunもしパッチに違反がのこっているならば、それらの全てについてあなたは正当な
159*4882a593Smuzhiyun理由を示せるようにしておく必要があります。
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun5) 電子メールの宛先の選び方
162*4882a593Smuzhiyun
163*4882a593SmuzhiyunMAINTAINERS ファイルとソースコードに目を通してください。そして、その変
164*4882a593Smuzhiyun更がメンテナのいる特定のサブシステムに加えられるものであることが分か
165*4882a593Smuzhiyunれば、その人に電子メールを送ってください。
166*4882a593Smuzhiyun
167*4882a593Smuzhiyunもし、メンテナが載っていなかったり、メンテナからの応答がないなら、
168*4882a593SmuzhiyunLKML ( linux-kernel@vger.kernel.org )へパッチを送ってください。ほとんど
169*4882a593Smuzhiyunのカーネル開発者はこのメーリングリストに目を通しており、変更に対して
170*4882a593Smuzhiyunコメントを得ることができます。
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun15個より多くのパッチを同時に vger.kernel.org のメーリングリストへ送らな
173*4882a593Smuzhiyunいでください!!!
174*4882a593Smuzhiyun
175*4882a593SmuzhiyunLinus Torvalds は Linux カーネルに入る全ての変更に対する最終的な意思決定者
176*4882a593Smuzhiyunです。電子メールアドレスは torvalds@linux-foundation.org になります。彼は
177*4882a593Smuzhiyun多くの電子メールを受け取っているため、できる限り彼に電子メールを送るのは
178*4882a593Smuzhiyun避けるべきです。
179*4882a593Smuzhiyun
180*4882a593Smuzhiyunバグフィックスであったり、自明な変更であったり、話し合いをほとんど
181*4882a593Smuzhiyun必要としないパッチは Linus へ電子メールを送るか CC しなければなりません。
182*4882a593Smuzhiyun話し合いを必要としたり、明確なアドバンテージがないパッチは、通常まず
183*4882a593Smuzhiyunは LKML へ送られるべきです。パッチが議論された後にだけ、そのパッチを
184*4882a593SmuzhiyunLinus へ送るべきです。
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun6) CC (カーボンコピー)先の選び方
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun特に理由がないなら、LKML にも CC してください。
189*4882a593Smuzhiyun
190*4882a593SmuzhiyunLinus 以外のカーネル開発者は変更に気づく必要があり、その結果、彼らはそ
191*4882a593Smuzhiyunの変更に対してコメントをくれたり、コードに対してレビューや提案をくれ
192*4882a593Smuzhiyunるかもしれません。LKML とは Linux カーネル開発者にとって一番中心的なメー
193*4882a593Smuzhiyunリングリストです。USB やフレームバッファデバイスや VFS や SCSI サブシステ
194*4882a593Smuzhiyunムなどの特定のサブシステムに関するメーリングリストもあります。あなた
195*4882a593Smuzhiyunの変更に、はっきりと関連のあるメーリングリストについて知りたければ
196*4882a593SmuzhiyunMAINTAINERS ファイルを参照してください。
197*4882a593Smuzhiyun
198*4882a593SmuzhiyunVGER.KERNEL.ORG でホスティングされているメーリングリストの一覧が下記の
199*4882a593Smuzhiyunサイトに載っています。
200*4882a593Smuzhiyun<http://vger.kernel.org/vger-lists.html>
201*4882a593Smuzhiyun
202*4882a593Smuzhiyunもし、変更がユーザランドのカーネルインタフェースに影響を与え
203*4882a593Smuzhiyunるのであれば、MAN-PAGES のメンテナ( MAINTAINERS ファイルに一覧
204*4882a593Smuzhiyunがあります)に man ページのパッチを送ってください。少なくとも
205*4882a593Smuzhiyun情報がマニュアルページの中に入ってくるように、変更が起きたという
206*4882a593Smuzhiyun通知を送ってください。
207*4882a593Smuzhiyun
208*4882a593Smuzhiyunたとえ、メンテナが #5 で反応がなかったとしても、メンテナのコードに変更を
209*4882a593Smuzhiyun加えたときには、いつもメンテナに CC するのを忘れないようにしてください。
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun小さなパッチであれば、Trivial Patch Monkey(ちょっとしたパッチを集めている)
212*4882a593Smuzhiyun<trivial@kernel.org>に CC してもいいです。その現管理者については MAINTAINERS
213*4882a593Smuzhiyunファイルを見てください。ちょっとしたパッチとは以下のルールのどれか1つを満たして
214*4882a593Smuzhiyunいなければなりません。
215*4882a593Smuzhiyun ・ドキュメントのスペルミスの修正
216*4882a593Smuzhiyun ・grep(1) コマンドによる検索を困難にしているスペルの修正
217*4882a593Smuzhiyun ・コンパイル時の警告の修正(無駄な警告が散乱することは好ましくないた
218*4882a593Smuzhiyun   めです)
219*4882a593Smuzhiyun ・コンパイル問題の修正(それらの修正が本当に正しい場合に限る)
220*4882a593Smuzhiyun ・実行時の問題の修正(それらの修正が本当に問題を修正している場合に限る)
221*4882a593Smuzhiyun ・廃止予定の関数やマクロを使用しているコードの除去(例 check_region )
222*4882a593Smuzhiyun ・問い合わせ先やドキュメントの修正
223*4882a593Smuzhiyun ・移植性のないコードから移植性のあるコードへの置き換え(小さい範囲で
224*4882a593Smuzhiyun   あればアーキテクチャ特有のことでも他の人がコピーできます)
225*4882a593Smuzhiyun ・作者やメンテナによる修正(すなわち patch monkey の再転送モード)
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun7) MIME やリンクや圧縮ファイルや添付ファイルではなくプレインテキストのみ
228*4882a593Smuzhiyun
229*4882a593SmuzhiyunLinus や他のカーネル開発者はあなたが投稿した変更を読んで、コメントでき
230*4882a593Smuzhiyunる必要があります。カーネル開発者にとって、あなたが書いたコードの特定の
231*4882a593Smuzhiyun部分にコメントをするために、標準的な電子メールクライアントで変更が引用
232*4882a593Smuzhiyunできることは重要です。
233*4882a593Smuzhiyun
234*4882a593Smuzhiyun上記の理由で、すべてのパッチは文中に含める形式の電子メールで投稿さ
235*4882a593Smuzhiyunれるべきです。警告:あなたがパッチをコピー&ペーストする際には、パッ
236*4882a593Smuzhiyunチを改悪するエディターの折り返し機能に注意してください。
237*4882a593Smuzhiyun
238*4882a593Smuzhiyunパッチを圧縮の有無に関わらず MIME 形式で添付しないでください。多くのポ
239*4882a593Smuzhiyunピュラーな電子メールクライアントは MIME 形式の添付ファイルをプレーンテ
240*4882a593Smuzhiyunキストとして送信するとは限らないでしょう。そうなると、電子メールクラ
241*4882a593Smuzhiyunイアントがコードに対するコメントを付けることをできなくします。また、
242*4882a593SmuzhiyunMIME 形式の添付ファイルは Linus に手間を取らせることになり、その変更を
243*4882a593Smuzhiyun受け入れてもらう可能性が低くなってしまいます。
244*4882a593Smuzhiyun
245*4882a593Smuzhiyun例外:お使いの電子メールクライアントがパッチをめちゃくちゃにするので
246*4882a593Smuzhiyunあれば、誰かが MIME 形式のパッチを再送するよう求めるかもしれません。
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun余計な変更を加えずにあなたのパッチを送信するための電子メールクライアントの設定
249*4882a593Smuzhiyunのヒントについては Documentation/process/email-clients.rst を参照してください。
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun8) 電子メールのサイズ
252*4882a593Smuzhiyun
253*4882a593Smuzhiyunパッチを Linus へ送るときは常に #7 の手順に従ってください。
254*4882a593Smuzhiyun
255*4882a593Smuzhiyun大きなパッチはメーリングリストやメンテナにとって不親切です。パッチが
256*4882a593Smuzhiyun未圧縮で 300KB を超えるようであるなら、インターネット上のアクセス可能な
257*4882a593Smuzhiyunサーバに保存し、保存場所を示す URL を伝えるほうが適切です。
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun9) カーネルバージョンの明記
260*4882a593Smuzhiyun
261*4882a593Smuzhiyunパッチが対象とするカーネルのバージョンをパッチの概要か電子メールの
262*4882a593Smuzhiyunサブジェクトに付けることが重要です。
263*4882a593Smuzhiyun
264*4882a593Smuzhiyunパッチが最新バージョンのカーネルに正しく適用できなければ、Linus は
265*4882a593Smuzhiyunそのパッチを採用しないでしょう。
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun10) がっかりせず再投稿
268*4882a593Smuzhiyun
269*4882a593Smuzhiyunパッチを投稿した後は、辛抱強く待っていてください。Linus があなたのパッ
270*4882a593Smuzhiyunチを気に入って採用すれば、Linus がリリースする次のバージョンのカーネル
271*4882a593Smuzhiyunの中で姿を見せるでしょう。
272*4882a593Smuzhiyun
273*4882a593Smuzhiyunしかし、パッチが次のバージョンのカーネルに入っていないなら、いくつもの
274*4882a593Smuzhiyun理由があるのでしょう。その原因を絞り込み、間違っているものを正し、更新
275*4882a593Smuzhiyunしたパッチを投稿するのはあなたの仕事です。
276*4882a593Smuzhiyun
277*4882a593SmuzhiyunLinus があなたのパッチに対して何のコメントもなく不採用にすることは極め
278*4882a593Smuzhiyunて普通のことです。それは自然な姿です。もし、Linus があなたのパッチを受
279*4882a593Smuzhiyunけ取っていないのであれば、以下の理由が考えられます。
280*4882a593Smuzhiyun* パッチが最新バージョンの Linux カーネルにきちんと適用できなかった
281*4882a593Smuzhiyun* パッチが LKML で十分に議論されていなかった
282*4882a593Smuzhiyun* スタイルの問題(セクション2を参照)
283*4882a593Smuzhiyun* 電子メールフォーマットの問題(このセクションを参照)
284*4882a593Smuzhiyun* パッチに対する技術的な問題
285*4882a593Smuzhiyun* Linus はたくさんの電子メールを受け取っているので、どさくさに紛れて見
286*4882a593Smuzhiyun  失った
287*4882a593Smuzhiyun* 不愉快にさせている
288*4882a593Smuzhiyun
289*4882a593Smuzhiyun判断できない場合は、LKML にコメントを頼んでください。
290*4882a593Smuzhiyun
291*4882a593Smuzhiyun11) サブジェクトに「 PATCH 」
292*4882a593Smuzhiyun
293*4882a593SmuzhiyunLinus や LKML への大量の電子メールのために、サブジェクトのプレフィックスに
294*4882a593Smuzhiyun「 [PATCH] 」を付けることが慣習となっています。これによって Linus や他の
295*4882a593Smuzhiyunカーネル開発者がパッチであるのか、又は、他の議論に関する電子メールであるの
296*4882a593Smuzhiyunかをより簡単に識別できます。
297*4882a593Smuzhiyun
298*4882a593Smuzhiyun12) パッチへの署名
299*4882a593Smuzhiyun
300*4882a593Smuzhiyun誰が何をしたのかを追いかけやすくするために (特に、パッチが何人かの
301*4882a593Smuzhiyunメンテナを経て最終的に Linux カーネルに取り込まれる場合のために)、電子
302*4882a593Smuzhiyunメールでやり取りされるパッチに対して「 sign-off 」という手続きを導入し
303*4882a593Smuzhiyunました。
304*4882a593Smuzhiyun
305*4882a593Smuzhiyun「 sign-off 」とは、パッチがあなたの書いたものであるか、あるいは、
306*4882a593Smuzhiyunあなたがそのパッチをオープンソースとして提供する権利を保持している、
307*4882a593Smuzhiyunという証明をパッチの説明の末尾に一行記載するというものです。
308*4882a593Smuzhiyunルールはとても単純です。以下の項目を確認して下さい。
309*4882a593Smuzhiyun
310*4882a593Smuzhiyun        原作者の証明書( DCO ) 1.1
311*4882a593Smuzhiyun
312*4882a593Smuzhiyun        このプロジェクトに寄与するものとして、以下のことを証明する。
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun        (a) 本寄与は私が全体又は一部作成したものであり、私がそのファイ
315*4882a593Smuzhiyun            ル中に明示されたオープンソースライセンスの下で公開する権利
316*4882a593Smuzhiyun            を持っている。もしくは、
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun        (b) 本寄与は、私が知る限り、適切なオープンソースライセンスでカバ
319*4882a593Smuzhiyun            ーされている既存の作品を元にしている。同時に、私はそのライセ
320*4882a593Smuzhiyun            ンスの下で、私が全体又は一部作成した修正物を、ファイル中で示
321*4882a593Smuzhiyun            される同一のオープンソースライセンスで(異なるライセンスの下で
322*4882a593Smuzhiyun            投稿することが許可されている場合を除いて)投稿する権利を持って
323*4882a593Smuzhiyun            いる。もしくは、
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun        (c) 本寄与は(a)、(b)、(c)を証明する第3者から私へ直接提供された
326*4882a593Smuzhiyun            ものであり、私はそれに変更を加えていない。
327*4882a593Smuzhiyun
328*4882a593Smuzhiyun        (d) 私はこのプロジェクトと本寄与が公のものであることに理解及び同意す
329*4882a593Smuzhiyun            る。同時に、関与した記録(投稿の際の全ての個人情報と sign-off を
330*4882a593Smuzhiyun            含む)が無期限に保全されることと、当該プロジェクト又は関連する
331*4882a593Smuzhiyun            オープンソースライセンスに沿った形で再配布されることに理解及び
332*4882a593Smuzhiyun            同意する。
333*4882a593Smuzhiyun
334*4882a593Smuzhiyunもしこれに同意できるなら、以下のような1行を追加してください。
335*4882a593Smuzhiyun
336*4882a593Smuzhiyun	Signed-off-by: Random J Developer <random@developer.example.org>
337*4882a593Smuzhiyun
338*4882a593Smuzhiyun実名を使ってください。(残念ですが、偽名や匿名による寄与はできません。)
339*4882a593Smuzhiyun
340*4882a593Smuzhiyun人によっては sign-off の近くに追加のタグを付加しています。それらは今のところ
341*4882a593Smuzhiyun無視されますが、あなたはそのタグを社内の手続きに利用したり、sign-off に特別
342*4882a593Smuzhiyunな情報を示したりすることができます。
343*4882a593Smuzhiyun
344*4882a593Smuzhiyunあなたがサブシステムまたはブランチのメンテナであれば、受け取ったパッチを自身の
345*4882a593Smuzhiyunツリーにマージするために、わずかに変更が必要となる場合があります。なぜなら
346*4882a593Smuzhiyunあなたのツリーの中のコードと投稿者のツリーの中のコードは同一ではないためです。
347*4882a593Smuzhiyunもし、あなたが厳密に上記ルール(c)にこだわるのであれば、投稿者に再度差分を
348*4882a593Smuzhiyunとるよう依頼すべきです。しかし、これは時間とエネルギーを非生産的に浪費する
349*4882a593Smuzhiyunことになります。ルール(b)はあなたにコードを修正する権利を与えてくれます。
350*4882a593Smuzhiyunしかし、投稿者のコードを修正し、その修正によるバグを投稿者に押し付けてしまう
351*4882a593Smuzhiyunことはとても失礼なことです。この問題を解決するために、末尾の投稿者の
352*4882a593SmuzhiyunSigned-off-by とあなたがその末尾に追加する Signed-off-by の間に、修正を
353*4882a593Smuzhiyun加えたことを示す1行を追加することが推奨されています。
354*4882a593Smuzhiyun(その1行の書き方に)決まりはありませんが、大括弧の中に電子メールアドレスや氏名
355*4882a593Smuzhiyunと修正内容を記載するやり方は目につきやすく、最終段階での変更の責任があなたに
356*4882a593Smuzhiyunあることを明確にするのに十分な方法のようです。例えば、
357*4882a593Smuzhiyun
358*4882a593Smuzhiyun	Signed-off-by: Random J Developer <random@developer.example.org>
359*4882a593Smuzhiyun	[lucky@maintainer.example.org: struct foo moved from foo.c to foo.h]
360*4882a593Smuzhiyun	Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org>
361*4882a593Smuzhiyun
362*4882a593Smuzhiyunあなたが安定版のブランチを管理しており、作成者のクレジット、変更の追跡、
363*4882a593Smuzhiyun修正のマージ、と同時に苦情からの投稿者の保護を行いたい場合、この慣習は特に
364*4882a593Smuzhiyun有用となります。いかなる事情があってもチェンジログに出てくる作成者の
365*4882a593Smuzhiyunアイデンティティ情報(From ヘッダ)は変更できないことに注意してください。
366*4882a593Smuzhiyun
367*4882a593Smuzhiyunバックポートする人のための特別な注意事項。追跡を容易に行うために、コミット
368*4882a593Smuzhiyunメッセージのトップ(サブジェクト行のすぐ後)にパッチの起源を示す情報を記述する
369*4882a593Smuzhiyunことは一般的で有用な慣習です。例えば、これは 2.6-stable ツリーでの一例です。
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun    Date:   Tue May 13 19:10:30 2008 +0000
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun        SCSI: libiscsi regression in 2.6.25: fix nop timer handling
374*4882a593Smuzhiyun
375*4882a593Smuzhiyun        commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream
376*4882a593Smuzhiyun
377*4882a593Smuzhiyunそして、これは 2.4 ツリーでの一例です。
378*4882a593Smuzhiyun
379*4882a593Smuzhiyun    Date:   Tue May 13 22:12:27 2008 +0200
380*4882a593Smuzhiyun
381*4882a593Smuzhiyun        wireless, airo: waitbusy() won't delay
382*4882a593Smuzhiyun
383*4882a593Smuzhiyun        [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a]
384*4882a593Smuzhiyun
385*4882a593Smuzhiyunどんな形式であれ、この情報はあなたのツリーを追跡する人やあなたのツリーのバグを
386*4882a593Smuzhiyun解決しようとしている人にとって価値のある支援となります。
387*4882a593Smuzhiyun
388*4882a593Smuzhiyun13) いつ Acked-by: と Cc: を使うのか
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun「 Signed-off-by: 」タグはその署名者がパッチの開発に関わっていたことやパッチ
391*4882a593Smuzhiyunの伝播パスにいたことを示しています。
392*4882a593Smuzhiyun
393*4882a593Smuzhiyunある人が直接パッチの準備や作成に関わっていないけれど、その人のパッチに対す
394*4882a593Smuzhiyunる承認を記録し、示したいとします。その場合、その人を示すのに Acked-by: が使
395*4882a593Smuzhiyunえます。Acked-by: はパッチのチェンジログにも追加されます。
396*4882a593Smuzhiyun
397*4882a593Smuzhiyunパッチの影響を受けるコードのメンテナがパッチに関わっていなかったり、パッチ
398*4882a593Smuzhiyunの伝播パスにいなかった時にも、メンテナは Acked-by: をしばしば利用します。
399*4882a593Smuzhiyun
400*4882a593SmuzhiyunAcked-by: は Signed-off-by: のように公式なタグではありません。それはメンテナが
401*4882a593Smuzhiyun少なくともパッチをレビューし、同意を示しているという記録です。そのような
402*4882a593Smuzhiyunことからパッチをマージする人がメンテナの「うん、良いと思うよ」という発言を
403*4882a593SmuzhiyunAcked-by: へ置き換えることがあります。
404*4882a593Smuzhiyun
405*4882a593SmuzhiyunAcked-by: が必ずしもパッチ全体の承認を示しているわけではありません。例えば、
406*4882a593Smuzhiyunあるパッチが複数のサブシステムへ影響を与えており、その中の1つのサブシステム
407*4882a593Smuzhiyunのメンテナからの Acked-by: を持っているとします。その場合、Acked-by: は通常
408*4882a593Smuzhiyunそのメンテナのコードに影響を与える一部分だけに対する承認を示しています。
409*4882a593Smuzhiyunこの点は、ご自分で判断してください。(その Acked-by: が)疑わしい場合は、
410*4882a593Smuzhiyunメーリングリストアーカイブの中の大元の議論を参照すべきです。
411*4882a593Smuzhiyun
412*4882a593Smuzhiyunパッチにコメントする機会を持っていたが、その時にコメントしなかった人がいれば、
413*4882a593Smuzhiyunその人を指す「Cc:」タグを任意で追加してもかまいません。これは指定された人からの
414*4882a593Smuzhiyun明確なアクションなしに付与できる唯一のタグです。
415*4882a593Smuzhiyunこのタグはパッチに関心があると思われる人達がそのパッチの議論に含まれていたこと
416*4882a593Smuzhiyunを明文化します。
417*4882a593Smuzhiyun
418*4882a593Smuzhiyun14) Reported-by と Tested-by: と Reviewed-by: の利用
419*4882a593Smuzhiyun
420*4882a593Smuzhiyun他の誰かによって報告された問題を修正するパッチであれば、問題報告者という寄与を
421*4882a593Smuzhiyunクレジットするために、Reported-by: タグを追加することを検討してください。
422*4882a593Smuzhiyunこまめにバグ報告者をクレジットしていくことで、うまくいけばその人たちが将来再び
423*4882a593Smuzhiyunコミュニティの力となってくれるでしょう。
424*4882a593Smuzhiyunただし、報告者の許可無くこのタグを追加しないように注意してください。特に、
425*4882a593Smuzhiyun問題が公の場で報告されていなかったのであれば。
426*4882a593Smuzhiyun
427*4882a593SmuzhiyunTested-by: タグはタグで指定された人によって(ある環境下で)パッチのテストに成功
428*4882a593Smuzhiyunしていることを示します。このタグはメンテナにテストが実施済みであることを
429*4882a593Smuzhiyun知らせ、将来の関連パッチのテスト協力者を見つける方法を提供し、テスト実施者に
430*4882a593Smuzhiyun対するクレジットを保証します。
431*4882a593Smuzhiyun
432*4882a593SmuzhiyunReviewed-by: タグは、それとは異なり、下記のレビューア宣言の下にレビューされ、
433*4882a593Smuzhiyun受け入れ可能とみなされたパッチであることを示します。
434*4882a593Smuzhiyun
435*4882a593Smuzhiyun        レビューアによる監督宣言
436*4882a593Smuzhiyun
437*4882a593Smuzhiyun        私は Reviewed-by: タグを提示することによって、以下のことを明言する。
438*4882a593Smuzhiyun
439*4882a593Smuzhiyun        (a) 私はメインラインカーネルへの統合に向け、その妥当性及び「即応性
440*4882a593Smuzhiyun            (訳注)」を検証し、技術的側面からパッチをレビュー済みである。
441*4882a593Smuzhiyun
442*4882a593Smuzhiyun        訳注:
443*4882a593Smuzhiyun        「即応性」の原文は "readiness"。
444*4882a593Smuzhiyun        パッチが十分な品質を持っており、メインラインカーネルへの統合を即座に
445*4882a593Smuzhiyun        行うことができる状態であるかどうかを "readiness" という単語で表現
446*4882a593Smuzhiyun        している。
447*4882a593Smuzhiyun
448*4882a593Smuzhiyun        (b) パッチに関するあらゆる問題、懸念、あるいは、疑問は投稿者へ伝達済み
449*4882a593Smuzhiyun            である。私はそれらのコメントに対する投稿者の返答に満足している。
450*4882a593Smuzhiyun
451*4882a593Smuzhiyun        (c) 投稿に伴い改良されるコードがある一方で、現時点で、私は(1)それが
452*4882a593Smuzhiyun            カーネルにとって価値のある変更であること、そして、(2)統合に際して
453*4882a593Smuzhiyun            議論になり得るような問題はないものと確信している。
454*4882a593Smuzhiyun
455*4882a593Smuzhiyun        (d) 私はパッチをレビューし適切であると確信している一方で、あらゆる
456*4882a593Smuzhiyun            状況においてその宣言した目的や機能が正しく実現することに関して、
457*4882a593Smuzhiyun            いかなる保証もしない(特にどこかで明示しない限り)。
458*4882a593Smuzhiyun
459*4882a593SmuzhiyunReviewd-by タグはそのパッチがカーネルに対して適切な修正であって、深刻な技術的
460*4882a593Smuzhiyun問題を残していないという意見の宣言です。興味のあるレビューアは誰でも(レビュー
461*4882a593Smuzhiyun作業を終えたら)パッチに対して Reviewed-by タグを提示できます。このタグは
462*4882a593Smuzhiyunレビューアの寄与をクレジットする働き、レビューの進捗の度合いをメンテナに
463*4882a593Smuzhiyun知らせる働きを持ちます。そのパッチの領域に詳しく、そして、しっかりとした
464*4882a593Smuzhiyunレビューを実施したレビューアによって提供される時、Reviewed-by: タグがあなたの
465*4882a593Smuzhiyunパッチをカーネルにマージする可能性を高めるでしょう。
466*4882a593Smuzhiyun
467*4882a593Smuzhiyun15) 標準的なパッチのフォーマット
468*4882a593Smuzhiyun
469*4882a593Smuzhiyun標準的なパッチのサブジェクトは以下のとおりです。
470*4882a593Smuzhiyun
471*4882a593Smuzhiyun    Subject: [PATCH 001/123] subsystem: summary phrase
472*4882a593Smuzhiyun
473*4882a593Smuzhiyun標準的なパッチの、電子メールのボディは以下の項目を含んでいます。
474*4882a593Smuzhiyun
475*4882a593Smuzhiyun  - パッチの作成者を明記する「 from 」行
476*4882a593Smuzhiyun
477*4882a593Smuzhiyun  - 空行
478*4882a593Smuzhiyun
479*4882a593Smuzhiyun  - 説明本体。これはこのパッチを説明するために無期限のチェンジログ
480*4882a593Smuzhiyun    (変更履歴)にコピーされます。
481*4882a593Smuzhiyun
482*4882a593Smuzhiyun  - 上述した「 Signed-off-by: 」行。これも説明本体と同じくチェン
483*4882a593Smuzhiyun    ジログ内にコピーされます。
484*4882a593Smuzhiyun
485*4882a593Smuzhiyun  - マーカー行は単純に「 --- 」です。
486*4882a593Smuzhiyun
487*4882a593Smuzhiyun  - 余計なコメントは、チェンジログには不適切です。
488*4882a593Smuzhiyun
489*4882a593Smuzhiyun  - 実際のパッチ(差分出力)
490*4882a593Smuzhiyun
491*4882a593Smuzhiyunサブジェクト行のフォーマットは、アルファベット順で電子メールをとても
492*4882a593Smuzhiyunソートしやすいものになっています。(ほとんどの電子メールクライアント
493*4882a593Smuzhiyunはソートをサポートしています)パッチのサブジェクトの連番は0詰めであ
494*4882a593Smuzhiyunるため、数字でのソートとアルファベットでのソートは同じ結果になります。
495*4882a593Smuzhiyun
496*4882a593Smuzhiyun電子メールのサブジェクト内のサブシステム表記は、パッチが適用される
497*4882a593Smuzhiyun分野またはサブシステムを識別できるようにすべきです。
498*4882a593Smuzhiyun
499*4882a593Smuzhiyun電子メールのサブジェクトの「summary phrase」はそのパッチの概要を正確
500*4882a593Smuzhiyunに表現しなければなりません。「summary phrase」をファイル名にしてはい
501*4882a593Smuzhiyunけません。パッチシリーズ中でそれぞれのパッチは同じ「summary phrase」を
502*4882a593Smuzhiyun使ってはいけません(「パッチシリーズ」とは順序付けられた関連のある複数の
503*4882a593Smuzhiyunパッチ群です)。
504*4882a593Smuzhiyun
505*4882a593Smuzhiyunあなたの電子メールの「summary phrase」がそのパッチにとって世界で唯一の識別子に
506*4882a593Smuzhiyunなるように心がけてください。「summary phrase」は git のチェンジログの中へ
507*4882a593Smuzhiyunずっと伝播していきます。「summary phrase」は、開発者が後でパッチを参照する
508*4882a593Smuzhiyunために議論の中で利用するかもしれません。
509*4882a593Smuzhiyun人々はそのパッチに関連した議論を読むために「summary phrase」を使って google で
510*4882a593Smuzhiyun検索したがるでしょう。それはまた2、3ヶ月あとで、人々が「gitk」や
511*4882a593Smuzhiyun「git log --oneline」のようなツールを使用して何千ものパッチに目を通す時、
512*4882a593Smuzhiyun唯一目にとまる情報となるでしょう。
513*4882a593Smuzhiyun
514*4882a593Smuzhiyunこれらの理由のため、「summary phrase」はなぜパッチが必要であるか、パッチが何を
515*4882a593Smuzhiyun変更するかの2つの情報をせいぜい70〜75文字で表現していなければなりません。
516*4882a593Smuzhiyun「summary phrase」は簡潔であり説明的である表現を目指しつつ、うまく
517*4882a593Smuzhiyunまとめられている概要となるべきです。
518*4882a593Smuzhiyun
519*4882a593Smuzhiyun「summary phrase」は「Subject: [PATCH tag] <summary phrase>」のように、
520*4882a593Smuzhiyun大括弧で閉じられたタグを接頭辞として付加してもかまいません。このタグは
521*4882a593Smuzhiyun「summary phrase」の一部とは考えませんが、パッチをどのように取り扱うべきかを
522*4882a593Smuzhiyun表現します。
523*4882a593Smuzhiyun一般的には「v1, v2, v3」のようなバージョン情報を表すタグ(過去のパッチに対する
524*4882a593Smuzhiyunコメントを反映するために複数のバージョンのパッチが投稿されているのであれば)、
525*4882a593Smuzhiyun「RFC」のようなコメントを要求するタグが挙げられます。パッチシリーズとして4つの
526*4882a593Smuzhiyunパッチがあれば、個々のパッチに「1/4, 2/4, 3/4, 4/4」のように番号を付けても
527*4882a593Smuzhiyunかまいません。これは開発者がパッチを適用する順番を確実に把握するためです。
528*4882a593Smuzhiyunそして、開発者がパッチシリーズの中のすべてのパッチをもらさずレビュー或いは
529*4882a593Smuzhiyun適用するのを保証するためです。
530*4882a593Smuzhiyun
531*4882a593Smuzhiyunサブジェクトの例を二つ
532*4882a593Smuzhiyun
533*4882a593Smuzhiyun    Subject: [patch 2/5] ext2: improve scalability of bitmap searching
534*4882a593Smuzhiyun    Subject: [PATCHv2 001/207] x86: fix eflags tracking
535*4882a593Smuzhiyun
536*4882a593Smuzhiyun「 from 」行は電子メールのボディの一番最初の行でなければなりません。
537*4882a593Smuzhiyunその形式は以下のとおりです。
538*4882a593Smuzhiyun
539*4882a593Smuzhiyun        From: Original Author <author@example.com>
540*4882a593Smuzhiyun
541*4882a593Smuzhiyun「 from 」行はチェンジログの中で、そのパッチの作成者としてクレジットされ
542*4882a593Smuzhiyunている人を特定するものです。「 from 」行がかけていると、電子メールのヘッ
543*4882a593Smuzhiyunダーの「 From: 」が、チェンジログの中でパッチの作成者を決定するために使わ
544*4882a593Smuzhiyunれるでしょう。
545*4882a593Smuzhiyun
546*4882a593Smuzhiyun説明本体は無期限のソースのチェンジログにコミットされます。なので、説明
547*4882a593Smuzhiyun本体はそのパッチに至った議論の詳細を忘れているある程度の技量を持っている人
548*4882a593Smuzhiyunがその詳細を思い出すことができるものでなければなりません。パッチが対処する
549*4882a593Smuzhiyun障害の症状(カーネルログメッセージや oops メッセージ等)を記載することは問題に
550*4882a593Smuzhiyun対処可能なパッチを求めてコミットログを検索する人々にとって特に有用です。
551*4882a593Smuzhiyunパッチがコンパイル問題を解決するのであれば、そのパッチを探している人が見つける
552*4882a593Smuzhiyunことができる情報だけで十分であり、コンパイル時の全てのエラーを含める必要は
553*4882a593Smuzhiyunありません。「summary phrase」と同様に、簡潔であり説明的であることが重要です。
554*4882a593Smuzhiyun
555*4882a593Smuzhiyun「 --- 」マーカー行はパッチ処理ツールに対して、チェンジログメッセージの終端
556*4882a593Smuzhiyun部分を認識させるという重要な役目を果たします。
557*4882a593Smuzhiyun
558*4882a593Smuzhiyun「 --- 」マーカー行の後の追加コメントの良い使用方法の1つに diffstat コマンド
559*4882a593Smuzhiyunがあります。diffstat コマンドとは何のファイルが変更され、1ファイル当たり何行
560*4882a593Smuzhiyun追加され何行消されたかを示すものです。diffstat コマンドは特に大きなパッチに
561*4882a593Smuzhiyunおいて役立ちます。その時点でだけ又はメンテナにとってのみ関係のあるコメント
562*4882a593Smuzhiyunは無期限に保存されるチェンジログにとって適切ではありません。そのため、この
563*4882a593Smuzhiyunようなコメントもマーカー行の後に書かれるべきです。
564*4882a593Smuzhiyunこのようなコメントの良い例として、v1 と v2 のバージョン間で何が変更されたかを
565*4882a593Smuzhiyun表す「パッチの変更履歴」が挙げられます。
566*4882a593Smuzhiyun
567*4882a593Smuzhiyun「 --- 」マーカー行の後に diffstat コマンドの結果を含めるのであれば、ファイル
568*4882a593Smuzhiyun名はカーネルソースツリーのトップディレクトリからの表記で列記されるため、横方向
569*4882a593Smuzhiyunのスペースをとり過ぎないように、diffstat コマンドにオプション「 -p 1 -w 70 」
570*4882a593Smuzhiyunを指定してください(インデントを含めてちょうど80列に合うでしょう)。
571*4882a593Smuzhiyun
572*4882a593Smuzhiyun適切なパッチのフォーマットの詳細についてはセクション3の参考文献を参照して
573*4882a593Smuzhiyunください。
574*4882a593Smuzhiyun
575*4882a593Smuzhiyun16) 「git pull」要求の送り方(Linus の電子メールから)
576*4882a593Smuzhiyun
577*4882a593Smuzhiyun間違ったブランチから引っ張るのを防ぐために、git リポジトリのアドレスと
578*4882a593Smuzhiyunブランチ名を同じ行に1行で記載してください。そうすることで、3回の連続クリック
579*4882a593Smuzhiyunで全て選択できます。
580*4882a593Smuzhiyun
581*4882a593Smuzhiyun正しい形式は下記の通りです。
582*4882a593Smuzhiyun
583*4882a593Smuzhiyun	"Please pull from
584*4882a593Smuzhiyun
585*4882a593Smuzhiyun		git://jdelvare.pck.nerim.net/jdelvare-2.6 i2c-for-linus
586*4882a593Smuzhiyun
587*4882a593Smuzhiyun	 to get these changes:"
588*4882a593Smuzhiyun
589*4882a593Smuzhiyunその結果、アドレスを自分自身でタイピングして間違えることはなくなります(実際に、
590*4882a593Smuzhiyun何度か間違ったブランチから引っ張ってきてしまい、その時に diffstat の結果を
591*4882a593Smuzhiyun検証して間違っていることに気づいたことがあります。どこから何を引っ張るべきかを
592*4882a593Smuzhiyun「探したり」、正しいブランチ名かどうかを重ねてチェックしたりする必要が
593*4882a593Smuzhiyunなくなればより快適になるでしょう)。
594*4882a593Smuzhiyun
595*4882a593Smuzhiyundiffstat の結果を生成するために「 git diff -M --stat --summary 」を使って
596*4882a593Smuzhiyunください。-M オプションはファイル名の変更を検知でき、--summary オプションは
597*4882a593Smuzhiyun新規ファイル、削除されたファイル、名前が変更されたファイルの概要を生成します。
598*4882a593Smuzhiyun
599*4882a593Smuzhiyun-M オプション(ファイル名の変更検知)を指定すると、diffstat の結果はかなり
600*4882a593Smuzhiyun異なってきます。git は大規模な変更(追加と削除のペア)をファイル名の変更と
601*4882a593Smuzhiyun判断するためです。
602*4882a593Smuzhiyun
603*4882a593Smuzhiyun------------------------------------
604*4882a593Smuzhiyunセクション2 - ヒントとTIPSと小技
605*4882a593Smuzhiyun------------------------------------
606*4882a593Smuzhiyun
607*4882a593Smuzhiyunこのセクションは Linux カーネルに変更を適用することに関係のある一般的な
608*4882a593Smuzhiyun「お約束」の多くを載せています。物事には例外というものがあります。しか
609*4882a593Smuzhiyunし例外を適用するには、本当に妥当な理由が不可欠です。あなたは恐らくこの
610*4882a593Smuzhiyunセクションを Linus のコンピュータ・サイエンス101と呼ぶでしょう。
611*4882a593Smuzhiyun
612*4882a593Smuzhiyun1) Documentation/process/coding-style.rstを参照
613*4882a593Smuzhiyun
614*4882a593Smuzhiyun言うまでもなく、あなたのコードがこのコーディングスタイルからあまりに
615*4882a593Smuzhiyunも逸脱していると、レビューやコメントなしに受け取ってもらえないかもし
616*4882a593Smuzhiyunれません。
617*4882a593Smuzhiyun
618*4882a593Smuzhiyun特筆すべき例外は、コードをあるファイルから別のファイルに移動
619*4882a593Smuzhiyunするときです。この場合、コードを移動するパッチでは、移動されるコード
620*4882a593Smuzhiyunに関して移動以外の変更を一切加えるべきではありません。これにより、
621*4882a593Smuzhiyunコードの移動とあなたが行ったコードの修正を明確に区別できるようにな
622*4882a593Smuzhiyunります。これは実際に何が変更されたかをレビューする際の大きな助けに
623*4882a593Smuzhiyunなるとともに、ツールにコードの履歴を追跡させることも容易になります。
624*4882a593Smuzhiyun
625*4882a593Smuzhiyun投稿するより前にパッチのスタイルチェッカー( scripts/checkpatch.pl )で
626*4882a593Smuzhiyunあなたのパッチをチェックしてください。このスタイルチェッカーは最終結
627*4882a593Smuzhiyun論としてではなく、指標としてみるべきです。もし、あなたのコードが違反
628*4882a593Smuzhiyunはしているが修正するより良く見えるのであれば、おそらくそのままにする
629*4882a593Smuzhiyunのがベストです。
630*4882a593Smuzhiyun
631*4882a593Smuzhiyunスタイルチェッカーによる3段階のレポート:
632*4882a593Smuzhiyun - エラー: 間違っている可能性が高い
633*4882a593Smuzhiyun - 警告:注意してレビューする必要がある
634*4882a593Smuzhiyun - チェック:考慮する必要がある
635*4882a593Smuzhiyun
636*4882a593Smuzhiyunあなたはパッチに残っている全ての違反について、それがなぜ必要なのか正当な
637*4882a593Smuzhiyun理由を示せるようにしておく必要があります。
638*4882a593Smuzhiyun
639*4882a593Smuzhiyun2) #ifdefは見苦しい
640*4882a593Smuzhiyun
641*4882a593Smuzhiyunifdef が散乱したコードは、読むのもメンテナンスするのも面倒です。コードの中
642*4882a593Smuzhiyunで ifdef を使わないでください。代わりに、ヘッダファイルの中に ifdef を入れて、
643*4882a593Smuzhiyun条件付きで、コードの中で使われる関数を「 static inline 」関数かマクロで定義し
644*4882a593Smuzhiyunてください。後はコンパイラが、何もしない箇所を最適化して取り去ってくれるで
645*4882a593Smuzhiyunしょう。
646*4882a593Smuzhiyun
647*4882a593Smuzhiyunまずいコードの簡単な例
648*4882a593Smuzhiyun
649*4882a593Smuzhiyun	dev = alloc_etherdev (sizeof(struct funky_private));
650*4882a593Smuzhiyun	if (!dev)
651*4882a593Smuzhiyun		return -ENODEV;
652*4882a593Smuzhiyun	#ifdef CONFIG_NET_FUNKINESS
653*4882a593Smuzhiyun	init_funky_net(dev);
654*4882a593Smuzhiyun	#endif
655*4882a593Smuzhiyun
656*4882a593Smuzhiyunクリーンアップしたコードの例
657*4882a593Smuzhiyun
658*4882a593Smuzhiyun(in header)
659*4882a593Smuzhiyun	#ifndef CONFIG_NET_FUNKINESS
660*4882a593Smuzhiyun	static inline void init_funky_net (struct net_device *d) {}
661*4882a593Smuzhiyun	#endif
662*4882a593Smuzhiyun
663*4882a593Smuzhiyun(in the code itself)
664*4882a593Smuzhiyun	dev = alloc_etherdev (sizeof(struct funky_private));
665*4882a593Smuzhiyun	if (!dev)
666*4882a593Smuzhiyun		return -ENODEV;
667*4882a593Smuzhiyun	init_funky_net(dev);
668*4882a593Smuzhiyun
669*4882a593Smuzhiyun3) マクロより「 static inline 」を推奨
670*4882a593Smuzhiyun
671*4882a593Smuzhiyun「 static inline 」関数はマクロよりもずっと推奨されています。それらは、
672*4882a593Smuzhiyun型安全性があり、長さにも制限が無く、フォーマットの制限もありません。
673*4882a593Smuzhiyungcc においては、マクロと同じくらい軽いです。
674*4882a593Smuzhiyun
675*4882a593Smuzhiyunマクロは「 static inline 」が明らかに不適切であると分かる場所(高速化パスの
676*4882a593Smuzhiyunいくつかの特定のケース)や「 static inline 」関数を使うことができないような
677*4882a593Smuzhiyun場所(マクロの引数の文字列連結のような)にだけ使われるべきです。
678*4882a593Smuzhiyun
679*4882a593Smuzhiyun「 static inline 」は「 static __inline__ 」や「 extern inline 」や
680*4882a593Smuzhiyun「 extern __inline__ 」よりも適切です。
681*4882a593Smuzhiyun
682*4882a593Smuzhiyun4) 設計に凝りすぎるな
683*4882a593Smuzhiyun
684*4882a593Smuzhiyunそれが有用になるかどうか分からないような不明瞭な将来を見越した設計
685*4882a593Smuzhiyunをしないでください。「できる限り簡単に、そして、それ以上簡単になら
686*4882a593Smuzhiyunないような設計をしてください。」
687*4882a593Smuzhiyun
688*4882a593Smuzhiyun----------------------
689*4882a593Smuzhiyunセクション3 参考文献
690*4882a593Smuzhiyun----------------------
691*4882a593Smuzhiyun
692*4882a593SmuzhiyunAndrew Morton, "The perfect patch" (tpp).
693*4882a593Smuzhiyun  <http://www.ozlabs.org/~akpm/stuff/tpp.txt>
694*4882a593Smuzhiyun
695*4882a593SmuzhiyunJeff Garzik, "Linux kernel patch submission format".
696*4882a593Smuzhiyun  <https://web.archive.org/web/20180829112450/http://linux.yyz.us/patch-format.html>
697*4882a593Smuzhiyun
698*4882a593SmuzhiyunGreg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
699*4882a593Smuzhiyun  <http://www.kroah.com/log/2005/03/31/>
700*4882a593Smuzhiyun  <http://www.kroah.com/log/2005/07/08/>
701*4882a593Smuzhiyun  <http://www.kroah.com/log/2005/10/19/>
702*4882a593Smuzhiyun  <http://www.kroah.com/log/2006/01/11/>
703*4882a593Smuzhiyun
704*4882a593SmuzhiyunNO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
705*4882a593Smuzhiyun  <https://lkml.org/lkml/2005/7/11/336>
706*4882a593Smuzhiyun
707*4882a593SmuzhiyunKernel Documentation/process/coding-style.rst:
708*4882a593Smuzhiyun  <http://users.sosdg.org/~qiyong/lxr/source/Documentation/process/coding-style.rst>
709*4882a593Smuzhiyun
710*4882a593SmuzhiyunLinus Torvalds's mail on the canonical patch format:
711*4882a593Smuzhiyun  <http://lkml.org/lkml/2005/4/7/183>
712*4882a593Smuzhiyun
713*4882a593SmuzhiyunAndi Kleen, "On submitting kernel patches"
714*4882a593Smuzhiyun  Some strategies to get difficult or controversial changes in.
715*4882a593Smuzhiyun  http://halobates.de/on-submitting-patches.pdf
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun--
718*4882a593Smuzhiyun
719*4882a593Smuzhiyun
720