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