xref: /OK3568_Linux_fs/kernel/Documentation/translations/ja_JP/stable_api_nonsense.txt (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunNOTE:
2*4882a593SmuzhiyunThis is a version of Documentation/process/stable-api-nonsense.rst into Japanese.
3*4882a593SmuzhiyunThis document is maintained by IKEDA, Munehiro <m-ikeda@ds.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: 2007/07/18
15*4882a593Smuzhiyun==================================
16*4882a593Smuzhiyunこれは、
17*4882a593Smuzhiyunlinux-2.6.22-rc4/Documentation/process/stable-api-nonsense.rst の和訳
18*4882a593Smuzhiyunです。
19*4882a593Smuzhiyun翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
20*4882a593Smuzhiyun翻訳日 : 2007/06/11
21*4882a593Smuzhiyun原著作者: Greg Kroah-Hartman < greg at kroah dot com >
22*4882a593Smuzhiyun翻訳者 : 池田 宗広 < m-ikeda at ds dot jp dot nec dot com >
23*4882a593Smuzhiyun校正者 : Masanori Kobayashi さん < zap03216 at nifty dot ne dot jp >
24*4882a593Smuzhiyun          Seiji Kaneko さん < skaneko at a2 dot mbn dot or dot jp >
25*4882a593Smuzhiyun==================================
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun
29*4882a593SmuzhiyunLinux カーネルのドライバインターフェース
30*4882a593Smuzhiyun(あなたの質問すべてに対する回答とその他諸々)
31*4882a593Smuzhiyun
32*4882a593SmuzhiyunGreg Kroah-Hartman <greg at kroah dot com>
33*4882a593Smuzhiyun
34*4882a593Smuzhiyun
35*4882a593Smuzhiyunこの文書は、なぜ Linux ではバイナリカーネルインターフェースが定義
36*4882a593Smuzhiyunされていないのか、またはなぜ不変のカーネルインターフェースを持たな
37*4882a593Smuzhiyunいのか、ということを説明するために書かれた。ここでの話題は「カーネ
38*4882a593Smuzhiyunル内部の」インターフェースについてであり、ユーザー空間とのインター
39*4882a593Smuzhiyunフェースではないことを理解してほしい。カーネルとユーザー空間とのイ
40*4882a593Smuzhiyunンターフェースとはアプリケーションプログラムが使用するものであり、
41*4882a593Smuzhiyunつまりシステムコールのインターフェースがこれに当たる。これは今まで
42*4882a593Smuzhiyun長きに渡り、かつ今後も「まさしく」不変である。私は確か 0.9 か何か
43*4882a593Smuzhiyunより前のカーネルを使ってビルドした古いプログラムを持っているが、そ
44*4882a593Smuzhiyunれは最新の 2.6 カーネルでもきちんと動作する。ユーザー空間とのイン
45*4882a593Smuzhiyunターフェースは、ユーザーとアプリケーションプログラマが不変性を信頼
46*4882a593Smuzhiyunしてよいものの一つである。
47*4882a593Smuzhiyun
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun要旨
50*4882a593Smuzhiyun----
51*4882a593Smuzhiyun
52*4882a593Smuzhiyunあなたは不変のカーネルインターフェースが必要だと考えているかもしれ
53*4882a593Smuzhiyunないが、実際のところはそうではない。あなたは必要としているものが分
54*4882a593Smuzhiyunかっていない。あなたが必要としているものは安定して動作するドライバ
55*4882a593Smuzhiyunであり、それはドライバがメインのカーネルツリーに含まれる場合のみ得
56*4882a593Smuzhiyunることができる。ドライバがメインのカーネルツリーに含まれていると、
57*4882a593Smuzhiyun他にも多くの良いことがある。それは、Linux をより強固で、安定な、成
58*4882a593Smuzhiyun熟したオペレーティングシステムにすることができるということだ。これ
59*4882a593Smuzhiyunこそ、そもそもあなたが Linux を使う理由のはずだ。
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun
62*4882a593Smuzhiyunはじめに
63*4882a593Smuzhiyun--------
64*4882a593Smuzhiyun
65*4882a593Smuzhiyunカーネル内部のインターフェース変更を心配しなければならないドライバ
66*4882a593Smuzhiyunを書きたいなどというのは、変わり者だけだ。この世界のほとんどの人は、
67*4882a593Smuzhiyunそのようなドライバがどんなインターフェースを使っているかなど知らな
68*4882a593Smuzhiyunいし、そんなドライバのことなど全く気にもかけていない。
69*4882a593Smuzhiyun
70*4882a593Smuzhiyun
71*4882a593Smuzhiyunまず初めに、クローズソースとか、ソースコードの隠蔽とか、バイナリの
72*4882a593Smuzhiyunみが配布される使い物にならない代物[訳注(1)]とか、実体はバイナリ
73*4882a593Smuzhiyunコードでそれを読み込むためのラッパー部分のみソースコードが公開され
74*4882a593Smuzhiyunているとか、その他用語は何であれ GPL の下にソースコードがリリース
75*4882a593Smuzhiyunされていないカーネルドライバに関する法的な問題について、私は「いか
76*4882a593Smuzhiyunなる議論も」行うつもりがない。法的な疑問があるのならば、プログラマ
77*4882a593Smuzhiyunである私ではなく、弁護士に相談して欲しい。ここでは単に、技術的な問
78*4882a593Smuzhiyun題について述べることにする。(法的な問題を軽視しているわけではない。
79*4882a593Smuzhiyunそれらは実際に存在するし、あなたはそれをいつも気にかけておく必要が
80*4882a593Smuzhiyunある)
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun訳注(1)
83*4882a593Smuzhiyun「使い物にならない代物」の原文は "blob"
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun
86*4882a593Smuzhiyunさてここでは、バイナリカーネルインターフェースについてと、ソースレ
87*4882a593Smuzhiyunベルでのインターフェースの不変性について、という二つの話題を取り上
88*4882a593Smuzhiyunげる。この二つは互いに依存する関係にあるが、まずはバイナリインター
89*4882a593Smuzhiyunフェースについて議論を行いやっつけてしまおう。
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun
92*4882a593Smuzhiyunバイナリカーネルインターフェース
93*4882a593Smuzhiyun--------------------------------
94*4882a593Smuzhiyun
95*4882a593Smuzhiyunもしソースレベルでのインターフェースが不変ならば、バイナリインター
96*4882a593Smuzhiyunフェースも当然のように不変である、というのは正しいだろうか?正しく
97*4882a593Smuzhiyunない。Linux カーネルに関する以下の事実を考えてみてほしい。
98*4882a593Smuzhiyun  - あなたが使用するCコンパイラのバージョンによって、カーネル内部
99*4882a593Smuzhiyun    の構造体の配置構造は異なったものになる。また、関数は異なった方
100*4882a593Smuzhiyun    法でカーネルに含まれることになるかもしれない(例えばインライン
101*4882a593Smuzhiyun    関数として扱われたり、扱われなかったりする)。個々の関数がどの
102*4882a593Smuzhiyun    ようにコンパイルされるかはそれほど重要ではないが、構造体のパデ
103*4882a593Smuzhiyun    ィングが異なるというのは非常に重要である。
104*4882a593Smuzhiyun  - あなたがカーネルのビルドオプションをどのように設定するかによっ
105*4882a593Smuzhiyun    て、カーネルには広い範囲で異なった事態が起こり得る。
106*4882a593Smuzhiyun      - データ構造は異なるデータフィールドを持つかもしれない
107*4882a593Smuzhiyun      - いくつかの関数は全く実装されていない状態になり得る
108*4882a593Smuzhiyun        (例:SMP向けではないビルドでは、いくつかのロックは中身が
109*4882a593Smuzhiyun          カラにコンパイルされる)
110*4882a593Smuzhiyun      - カーネル内のメモリは、異なった方法で配置され得る。これはビ
111*4882a593Smuzhiyun        ルドオプションに依存している。
112*4882a593Smuzhiyun  - Linux は様々な異なるプロセッサアーキテクチャ上で動作する。
113*4882a593Smuzhiyun    あるアーキテクチャ用のバイナリドライバを、他のアーキテクチャで
114*4882a593Smuzhiyun    正常に動作させる方法はない。
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun
117*4882a593Smuzhiyunある特定のカーネル設定を使用し、カーネルをビルドしたのと正確に同じ
118*4882a593SmuzhiyunCコンパイラを使用して単にカーネルモジュールをコンパイルするだけで
119*4882a593Smuzhiyunも、あなたはこれらいくつもの問題に直面することになる。ある特定の
120*4882a593SmuzhiyunLinux ディストリビューションの、ある特定のリリースバージョン用にモ
121*4882a593Smuzhiyunジュールを提供しようと思っただけでも、これらの問題を引き起こすには
122*4882a593Smuzhiyun十分である。にも関わらず Linux ディストリビューションの数と、サ
123*4882a593Smuzhiyunポートするディストリビューションのリリース数を掛け算し、それら一つ
124*4882a593Smuzhiyun一つについてビルドを行ったとしたら、今度はリリースごとのビルドオプ
125*4882a593Smuzhiyunションの違いという悪夢にすぐさま悩まされることになる。また、ディス
126*4882a593Smuzhiyunトリビューションの各リリースバージョンには、異なるハードウェア(プ
127*4882a593Smuzhiyunロセッサタイプや種々のオプション)に対応するため、何種類かのカーネ
128*4882a593Smuzhiyunルが含まれているということも理解して欲しい。従って、ある一つのリ
129*4882a593Smuzhiyunリースバージョンだけのためにモジュールを作成する場合でも、あなたは
130*4882a593Smuzhiyun何バージョンものモジュールを用意しなければならない。
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun
133*4882a593Smuzhiyun信じて欲しい。このような方法でサポートを続けようとするなら、あなた
134*4882a593Smuzhiyunはいずれ正気を失うだろう。遠い昔、私はそれがいかに困難なことか、身
135*4882a593Smuzhiyunをもって学んだのだ・・・
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun不変のカーネルソースレベルインターフェース
139*4882a593Smuzhiyun------------------------------------------
140*4882a593Smuzhiyun
141*4882a593Smuzhiyunメインカーネルツリーに含まれていない Linux カーネルドライバを継続
142*4882a593Smuzhiyunしてサポートしていこうとしている人たちとの議論においては、これは極
143*4882a593Smuzhiyunめて「引火性の高い」話題である。[訳注(2)]
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun訳注(2)
146*4882a593Smuzhiyun「引火性の高い」の原文は "volatile"。
147*4882a593Smuzhiyunvolatile には「揮発性の」「爆発しやすい」という意味の他、「変わり
148*4882a593Smuzhiyunやすい」「移り気な」という意味がある。
149*4882a593Smuzhiyun「(この話題は)爆発的に激しい論争を巻き起こしかねない」ということ
150*4882a593Smuzhiyunを、「(カーネルのソースレベルインターフェースは)移ろい行くもので
151*4882a593Smuzhiyunある」ということを連想させる "volatile" という単語で表現している。
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun
154*4882a593SmuzhiyunLinux カーネルの開発は継続的に速いペースで行われ、決して歩みを緩め
155*4882a593Smuzhiyunることがない。その中でカーネル開発者達は、現状のインターフェースに
156*4882a593Smuzhiyunあるバグを見つけ、より良い方法を考え出す。彼らはやがて、現状のイン
157*4882a593Smuzhiyunターフェースがより正しく動作するように修正を行う。その過程で関数の
158*4882a593Smuzhiyun名前は変更されるかもしれず、構造体は大きく、または小さくなるかもし
159*4882a593Smuzhiyunれず、関数の引数は検討しなおされるかもしれない。そのような場合、引
160*4882a593Smuzhiyunき続き全てが正常に動作するよう、カーネル内でこれらのインターフェー
161*4882a593Smuzhiyunスを使用している個所も全て同時に修正される。
162*4882a593Smuzhiyun
163*4882a593Smuzhiyun
164*4882a593Smuzhiyun具体的な例として、カーネル内の USB インターフェースを挙げる。USB
165*4882a593Smuzhiyunサブシステムはこれまでに少なくとも3回の書き直しが行われ、その結果
166*4882a593Smuzhiyunインターフェースが変更された。これらの書き直しはいくつかの異なった
167*4882a593Smuzhiyun問題を修正するために行われた。
168*4882a593Smuzhiyun  - 同期的データストリームが非同期に変更された。これにより多数のド
169*4882a593Smuzhiyun    ライバを単純化でき、全てのドライバのスループットが向上した。今
170*4882a593Smuzhiyun    やほとんど全ての USB デバイスは、考えられる最高の速度で動作し
171*4882a593Smuzhiyun    ている。
172*4882a593Smuzhiyun  - USB ドライバが USB サブシステムのコアから行う、データパケット
173*4882a593Smuzhiyun    用のメモリ確保方法が変更された。これに伴い、いくつもの文書化さ
174*4882a593Smuzhiyun    れたデッドロック条件を回避するため、全ての USB ドライバはより
175*4882a593Smuzhiyun    多くの情報を USB コアに提供しなければならないようになっている。
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun
178*4882a593Smuzhiyunこのできごとは、数多く存在するクローズソースのオペレーティングシス
179*4882a593Smuzhiyunテムとは全く対照的だ。それらは長期に渡り古い USB インターフェース
180*4882a593Smuzhiyunをメンテナンスしなければならない。古いインターフェースが残ることで、
181*4882a593Smuzhiyun新たな開発者が偶然古いインターフェースを使い、正しくない方法で開発
182*4882a593Smuzhiyunを行ってしまう可能性が生じる。これによりシステムの安定性は危険にさ
183*4882a593Smuzhiyunらされることになる。
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun上に挙げたどちらの例においても、開発者達はその変更が重要かつ必要で
187*4882a593Smuzhiyunあることに合意し、比較的楽にそれを実行した。もし Linux がソースレ
188*4882a593Smuzhiyunベルでインターフェースの不変性を保証しなければならないとしたら、新
189*4882a593Smuzhiyunしいインターフェースを作ると同時に、古い、問題のある方を今後ともメ
190*4882a593Smuzhiyunンテナンスするという余計な仕事を USB の開発者にさせなければならな
191*4882a593Smuzhiyunい。Linux の USB 開発者は、自分の時間を使って仕事をしている。よっ
192*4882a593Smuzhiyunて、価値のない余計な仕事を報酬もなしに実行しろと言うことはできない。
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun
195*4882a593Smuzhiyunセキュリティ問題も、Linux にとっては非常に重要である。ひとたびセキ
196*4882a593Smuzhiyunュリティに関する問題が発見されれば、それは極めて短期間のうちに修正
197*4882a593Smuzhiyunされる。セキュリティ問題の発生を防ぐための修正は、カーネルの内部イ
198*4882a593Smuzhiyunンターフェースの変更を何度も引き起こしてきた。その際同時に、変更さ
199*4882a593Smuzhiyunれたインターフェースを使用する全てのドライバもまた変更された。これ
200*4882a593Smuzhiyunにより問題が解消し、将来偶然に問題が再発してしまわないことが保証さ
201*4882a593Smuzhiyunれる。もし内部インターフェースの変更が許されないとしたら、このよう
202*4882a593Smuzhiyunにセキュリティ問題を修正し、将来再発しないことを保証することなど不
203*4882a593Smuzhiyun可能なのだ。
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun
206*4882a593Smuzhiyunカーネルのインターフェースは時が経つにつれクリーンナップを受ける。
207*4882a593Smuzhiyun誰も使っていないインターフェースは削除される。これにより、可能な限
208*4882a593Smuzhiyunりカーネルが小さく保たれ、現役の全てのインターフェースが可能な限り
209*4882a593Smuzhiyunテストされることを保証しているのだ。(使われていないインターフェー
210*4882a593Smuzhiyunスの妥当性をテストすることは不可能と言っていいだろう)
211*4882a593Smuzhiyun
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun
214*4882a593Smuzhiyunこれから何をすべきか
215*4882a593Smuzhiyun-----------------------
216*4882a593Smuzhiyun
217*4882a593Smuzhiyunでは、もしメインのカーネルツリーに含まれない Linux カーネルドライ
218*4882a593Smuzhiyunバがあったとして、あなたは、つまり開発者は何をするべきだろうか?全
219*4882a593Smuzhiyunてのディストリビューションの全てのカーネルバージョン向けにバイナリ
220*4882a593Smuzhiyunのドライバを供給することは悪夢であり、カーネルインターフェースの変
221*4882a593Smuzhiyun更を追いかけ続けることもまた過酷な仕事だ。
222*4882a593Smuzhiyun
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun答えは簡単。そのドライバをメインのカーネルツリーに入れてしまえばよ
225*4882a593Smuzhiyunい。(ここで言及しているのは、GPL に従って公開されるドライバのこと
226*4882a593Smuzhiyunだということに注意してほしい。あなたのコードがそれに該当しないなら
227*4882a593Smuzhiyunば、さよなら。幸運を祈ります。ご自分で何とかしてください。Andrew
228*4882a593Smuzhiyunと Linus からのコメント<Andrew と Linus のコメントへのリンクをこ
229*4882a593Smuzhiyunこに置く>をどうぞ)ドライバがメインツリーに入れば、カーネルのイン
230*4882a593Smuzhiyunターフェースが変更された場合、変更を行った開発者によってドライバも
231*4882a593Smuzhiyun修正されることになるだろう。あなたはほとんど労力を払うことなしに、
232*4882a593Smuzhiyun常にビルド可能できちんと動作するドライバを手に入れることができる。
233*4882a593Smuzhiyun
234*4882a593Smuzhiyun
235*4882a593Smuzhiyunドライバをメインのカーネルツリーに入れると、非常に好ましい以下の効
236*4882a593Smuzhiyun果がある。
237*4882a593Smuzhiyun  - ドライバの品質が向上する一方で、(元の開発者にとっての)メンテ
238*4882a593Smuzhiyun    ナンスコストは下がる。
239*4882a593Smuzhiyun  - あなたのドライバに他の開発者が機能を追加してくれる。
240*4882a593Smuzhiyun  - 誰かがあなたのドライバにあるバグを見つけ、修正してくれる。
241*4882a593Smuzhiyun  - 誰かがあなたのドライバにある改善点を見つけてくれる。
242*4882a593Smuzhiyun  - 外部インターフェースが変更されドライバの更新が必要になった場合、
243*4882a593Smuzhiyun    誰かがあなたの代わりに更新してくれる。
244*4882a593Smuzhiyun  - ドライバを入れてくれとディストロに頼まなくても、そのドライバは
245*4882a593Smuzhiyun    全ての Linux ディストリビューションに自動的に含まれてリリース
246*4882a593Smuzhiyun    される。
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun
249*4882a593SmuzhiyunLinux では、他のどのオペレーティングシステムよりも数多くのデバイス
250*4882a593Smuzhiyunが「そのまま」使用できるようになった。また Linux は、どのオペレー
251*4882a593Smuzhiyunティングシステムよりも数多くのプロセッサアーキテクチャ上でそれらの
252*4882a593Smuzhiyunデバイスを使用することができるようにもなった。このように、Linux の
253*4882a593Smuzhiyun開発モデルは実証されており、今後も間違いなく正しい方向へと進んでい
254*4882a593Smuzhiyunくだろう。:)
255*4882a593Smuzhiyun
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun
258*4882a593Smuzhiyun------
259*4882a593Smuzhiyun
260*4882a593Smuzhiyunこの文書の初期の草稿に対し、Randy Dunlap, Andrew Morton, David
261*4882a593SmuzhiyunBrownell, Hanna Linder, Robert Love, Nishanth Aravamudan から査読
262*4882a593Smuzhiyunと助言を頂きました。感謝申し上げます。
263*4882a593Smuzhiyun
264