/
90.txt
251 lines (189 loc) · 15.9 KB
/
90.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
[26] [DFN[[RUBYB[バージョン付け]@en[versioning]]]]とは、[[データ]]や[[メタデータ]]として仕様や実装の[[バージョン]]の情報を付与し、それによって処理モードを変えることをいいます。
* 版付けの失敗例
[36] [[バージョニング]]は色々な形で技術に歪みをもたらします。
[17] '''[[MIME]]''' は [CODE(MIME)@en[[[MIME-Version:]]]] [[頭欄]]を導入しましたが、
非 [[MIME]] [[メッセージ]]との区別には次第に用いられなくなり、
また新規バージョンも互換性が失われる懸念から導入されずにいます。
[20] '''[[SOAP]]''' は元々広く実装された [[SOAP 1.1]] とそれを数年かけて [[W3C]] で標準化した
[[SOAP 1.2]] があり、両者非互換でした。 [[SOAP 1.2]] によって [[SOAP 1.1]]
が置き換えられることはなく、どちらも使われました。 [[SOAP]] を下位層とする各種 [[WS-*]]
仕様群は、どちらの版にも対応しなければなりませんでした。
[21] [['''XML''' 1.1]] は [[XML 1.0]] の「[[整形式]]」の定義を変更することとなったため、
新しい版番号が与えられました。各種の [[XML応用]]は個別に [[XML 1.0]] と [[XML 1.1]]
の両方に対応することが迫られました。しかし結局 [[XML 1.1]] は普及しませんでした。
[[XML 1.0]] の第5版で [[XML 1.1]] の変更の一部が取り込まれ、「[[整形式]]」
の定義が変わったのに版番号は [CODE(XML)[[[1.0]]]] のままとなりましたw
[[xml宣言]]の [CODE(XMLa)@en[[[version]]]] [[擬似属性]]の値が何であっても
([CODE(XML)[[[1.1]]]] であっても) [[XML 1.0]] 第5版 (以降) とみなすことになりました。
(しかし [[XML 1.1]] も廃止されておらず、混沌だけが残りましたw)
[33] [['''XLink''' 1.0]] は [CODE(XMLa)@en[xlink:type]] [[属性]]を必須としていましたが、
現実には省略されることも多く、必須とする強い理由も無いとして、
省略可能に変更されました。この際、技術的な変更が加わっているため、
[[XLink 1.1]] に改番されました。
改訂と同時期には、 [[XLink 1.0]] を引用しながら、 [[XLink 1.1]]
が制定中で省略可能になる予定だとして必須にしていない[[仕様書]]も出版されたりしました。
[[XLink 1.1]] の制定後も、それまで [[XLink 1.0]] を引用していた[[仕様書]]のすべてが改版されたわけではなく、
そうした古い[[仕様書]]に基づく技術で [CODE(XMLa)@en[xlink:href]] [[属性]]が必須なのかどうかは不明確です。
また、 [[XLink 1.0]] と [[XLink 1.1]] のどちらが[[文書]]で使われているかは区別できませんから、
実装は両方の挙動に同時に対応することができません。
つまり現実の要求に近づけるための新版制定だったはずなのに、かえって[[相互運用性]]に不安を残す結果となっています。
[27] '''[[HTML]]''' と '''[[CSS]]''' は [[DOCTYPEスイッチ]]により90年代の実装の延長にある[[奇癖モード]]と2000年前後の標準仕様に基づく[[標準モード]] (現在の[[無奇癖モード]]) で処理を分岐させる手法を00年代初頭に取り入れましたが、
00年代後半には既に実装コスト、学習コスト、標準化コストがかかるだけの失敗だったと考えられるようになっています。
00年代末には [[IE8]] が同様の異なる仕組みである[[文書モード]]
([CODE(HTTP)@en[[[X-UA-Compatible:]]]]) を導入しましたが、10年代前半の [[IE11]]
はこれを非推奨としていて、 [[Edge]] では放棄されました。
加えて [[CSS]] では[[標準化]]の過程にある実験的な機能を [[vendor prefix]]
によって区別して実装開始する手法を取り入れましたが、結局は最終的な標準版とその過程の
[[vendor prefix]] 版を恒久的に (他の [[vendor]] も) 実装しなければならないことになり
([CITE[Compatibility Standard]])、バージョンを区別して最終版以外は切り捨てるとの目論見は破綻しました。
つまり標準化して実施しても単一ベンダーで独自に実施しても、
全体レベルでも機能レベルでも、[[バージョニング]]は失敗しています。
[28] [['''XHTML'''2]] は [[XHTML1]] と非互換なことから異なる[[名前空間]]を採用し、
事実上の[[バージョニング]]を行っていました。しかし [[XHTML1]]
への機能追加の要求が強まり、徐々に新機能を [[XHTML1]] へと[[バックポート]]していきました。
その流れは最終的に [[XHTML2]] プロジェクト全体を崩壊させるに至りました。
[29] '''[[XPath]]''' と '''[[XSLT]]''' は 2.0 で大きな非互換変更を行い、 [CODE(XML)@en[[[version]]]]
を指定することで動作モードを切り替えるようにしましたが、 [[Webブラウザー]]を含む多くの実装が
2.0 の実装を嫌がり、普及の障壁となりました。
;; これは[[セカンドシステム症候群]]の例とも言えそうです。
[37] '''[[XForms]]'''、'''[[XML Events]]'''、'''[[XFrames]]''' は、 [[HTML]]
の一部機能を改良することを目指したものでしたが、
互換性が一切無く異なる[[名前空間]]を採用していました。
[[XHTML2]] と共に [[HTML]] の新バージョンとして置き換えることを狙っていましたが、
誰も使いたがりませんでした。
;; これは[[セカンドシステム症候群]]の典型例でもあります。
[30] '''[[JavaScript]]''' は [CODE(HTMLa)@en[[[language]]]] [[属性]]や
[[MIME型]]でバージョンの区別ができることになっていましたが、
[[Webブラウザー]]の実装も[[著者]]側の利用も正しく行えず、
次第にその意味するところが曖昧になっていきました。
最終的にはバージョンの区別はすべて無視されるようになりました。
[35] '''[[DOM]]''' は[[特徴][DOM特徴]]という形で[[アプリケーション]]が[[実装]]の版を判定できる仕組みを用意していましたが、
有効に機能しませんでした。
[38] '''[[RSS]]''' と '''[[Atom]]''' は、色々なバージョンが乱立しました。
各バージョンは互換性が全くなかったり、一見互換性がありそうだったり色々でした。
(各項を参照。) 実世界では、バージョンが正確に使い分けられず、
他のバージョンの機能が混在させて用いられたりしました。
バージョン番号だけを新しいバージョンに書き換えてそれ以外は旧バージョンのままの[[フィード]]もあったりします。
結局すべてのバージョンが混在したどの[[仕様書]]でも説明されていないものが現実に用いられているものであり、
[[相互運用性]]に大きな課題を抱えています。
@@
[34] [['''TLS''' 1.3]] では、バージョン欄が...
(というかすぐに廃止予定だった [[SSL 2.0]] が十数年間削除できなかった時点で...)
* 版付けの失敗理由
[39] こうした実例から、失敗の理由は次のように整理できそうです。
[FIG(list)[
- [40] 複数のバージョンが混在する時、どう処理するべきかが[[仕様書]]に明記されないことが多い。
[[仕様書]]はいずれかのバージョンのみを規定することが多いので、
バージョン間の相互作用は規定から漏れがちである。
- [41] バージョン間の相互作用が規定されたとしても、
旧バージョン時代に新バージョンを予測するのは困難で、
曖昧な規定になりやすい。しかも旧バージョン時代の実装による新バージョンの扱い
([[仕様書]]通りに実装されるとも限らない。) が新バージョン制定時の制約になってしまう。
- [42] 新バージョンが制定されると旧バージョンの[[仕様書]]は放置されることがほとんどである。
ところが現実世界では旧バージョンも残ることが多い。
新バージョンの[[仕様書]]で解決されている問題が旧バージョンの[[仕様書]]で未解決の場合、
実装と[[仕様書]]が乖離するか、色々な実装が混在してしまう。
- [43] 新バージョンで多くの課題を解決しようとして旧バージョンとかけ離れたものを作ってしまうが、
実装者や[[著者]]は現状より少し良くなったものを求めているだけでしかない。
新バージョンが出るたびに全部作り直したくはない。
- [44] ほとんど同じ機能の複数のバージョンの実装をメンテナンスし続けるのはつらい。
旧バージョンの仕様であってもバグ修正などは続けなければならないから、
バージョンが変わるたびにメンテナンスコストがどんどん増えていく。
- [45] [[仕様書]]の開発スケジュールと[[実装]]のリリース時期が一致していない。
「[[仕様書]]バージョンαの[[実装]]」は実際にはあまり無く、
「[[仕様書]]バージョンαの[VAR[p]] % + [[仕様書]]バージョンβの新機能の [VAR[q]] % の[[実装]]」
のような形になるので、[[仕様書]]の機能単位のバージョニングと整合しない。
]FIG]
* 比較的うまく移行できた例
@@
[[WebSocket]]、
[[SPDY]]
* Web API におけるバージョニング
[48] [[Web APIの悪い設計]]を参照。
* プロファイルとスキーマとバージョニング
@@
[49] [[XML名前空間]]と[[カメレオン名前空間]]の失敗も参照。
* メモ
[1]
[CITE@en-US[David Baron's weblog: March 2007]] ([CODE[2007-03-26 09:31:27 +09:00]] 版) <http://dbaron.org/log/2007-03#e20070325a>
([[名無しさん]] [WEAK[2007-03-26 00:33:42 +00:00]])
[2]
[CITE@en[Re: Doctypes and the dialects of HTML 5]] ([[Henri Sivonen]] 著, [CODE[2007-03-25 18:16:51 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2007JanMar/0433>
([[名無しさん]] [WEAK[2007-03-26 10:16:32 +00:00]])
[3]
[CITE@en[Re: Doctypes and the dialects of HTML 5]] ([[Henri Sivonen]] 著, [CODE[2007-03-25 18:16:51 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2007JanMar/0433>
([[名無しさん]] [WEAK[2007-03-26 10:17:07 +00:00]])
[4]
[CITE@en[XForms document versioning]] ([[Mark Birbeck]] 著, [CODE[2007-04-05 01:02:12 +09:00]] 版) <http://lists.w3.org/Archives/Public/www-forms/2007Apr/0006.html>
Versioning ここに極まれり的な提案でつね。
([[名無しさん]])
[5]
[CITE[IRC logs: w3c / #html-wg / 20070404]] ([CODE[2007-04-06 23:18:21 +09:00]] 版) <http://krijnhoetmer.nl/irc-logs/html-wg/20070404#l-1997>
そりゃぁこういう冗談もいいたくなってくるわ。
;; [[言語札]]は本当に版付けが必要な気がするがw
([[名無しさん]])
[6]
[CITE@en-US[David Baron's weblog: April 2007]] ([CODE[2007-04-07 22:16:48 +09:00]] 版) <http://dbaron.org/log/2007-04#e20070405a>
([[名無しさん]] [WEAK[2007-04-07 13:19:03 +00:00]])
[7]
[CITE@en[Versioning and html'''['''5''']''']] ([[Chris Wilson]] 著, [CODE[2007-04-13 01:40:07 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2007Apr/0612.html>
([[名無しさん]] [WEAK[2007-04-14 05:57:29 +00:00]])
[8]
[CITE@en[Sam Ruby: Form Follows Function]] ([CODE[2007-04-16 20:51:51 +09:00]] 版) <http://www.intertwingly.net/blog/2007/04/16/Form-Follows-Function>
([[名無しさん]] [WEAK[2007-04-17 00:29:21 +00:00]])
[9]
[CITE@en[Version information (was Re: HTML5 vs HTML6)]] ([[L. David Baron]] 著, [CODE[2007-04-06 09:27:21 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2007Apr/0279.html>
([[名無しさん]])
[10]
[CITE@en[Technical Architecture Group -- 16 Apr 2007]] ([CODE[2007-04-17 02:29:18 +09:00]] 版) <http://www.w3.org/2001/tag/2007/04/16-minutes.html>
([[名無しさん]])
[11]
[CITE@en[crisp's blog » Blog Archive » HTML5: Microsoft and the opt-in catch]] ([CODE[2007-04-23 09:43:54 +09:00]] 版) <http://therealcrisp.xs4all.nl/blog/2007/04/22/html5-microsoft-and-the-opt-in-catch/>
([[名無しさん]] [WEAK[2007-04-23 00:50:52 +00:00]])
[12]
[CITE@en[HTML and version mechanisms - W3C QA Weblog]] ([CODE[2007-05-01 12:13:23 +09:00]] 版) <http://www.w3.org/QA/2007/05/html_and_version_mechanisms.html>
([[名無しさん]] [WEAK[2007-05-02 01:25:30 +00:00]])
[13]
[CITE@en[Version information (was Re: HTML5 vs HTML6)]] ([[L. David Baron]] 著, [CODE[2007-04-06 09:27:21 +09:00]] 版) <http://lists.w3.org/Archives/Public/public-html/2007Apr/0279>
([[名無しさん]])
[14]
[CITE[Todd Ditchendorf’s Blog. XML, Cocoa, JavaScript, Java. » Blog Archive » IE 8 and standards support confusion]] ([CODE[2007-07-01 22:38:08 +09:00]] 版) <http://www.ditchnet.org/wp/2007/05/05/ie-8-and-standards-support-confusion/>
([[名無しさん]] [WEAK[2007-07-01 13:40:16 +00:00]])
[15]
[CITE@en[Ajaxian » IE 8: Opt-in for standards compliance]] ([CODE[2007-07-01 22:37:58 +09:00]] 版) <http://ajaxian.com/archives/ie-8-opt-in-for-standards-compliance>
([[名無しさん]] [WEAK[2007-07-01 13:41:17 +00:00]])
[16]
[CITE@en[Re: '''['''validator''']''' the @profile at-rule]] ([[fantasai]] 著, [TIME[2008-10-02 09:17:51 +09:00]] 版) <http://lists.w3.org/Archives/Public/www-style/2008Oct/0007.html>
[18] [CITE['''['''whatwg''']''' HTML6 Doctype]]
([TIME[2010-12-07 10:18:00 +09:00]] 版)
<http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-December/029349.html>
[19]
[PRE(XML example code)[
<rewriteURI uriStartString="http://www.oasis-open.org/docbook/xml/4.5/"
rewritePrefix="file:///usr/share/sgml/docbook/xml-dtd-4.4-1.0-30.1/"/>
]PRE]
DTD が無いと言われた。4.4まではローカルにあったけど、4.5は無かった。カタログでローカル・ファイル・システムに写像されていて、ファイルが無いからエラーになっていたらしい。当該部分を削除したら、今度はネットワーク経由で実体を取りにいこうとしているとエラーになった。馬鹿か。何のために URL を使っているんだ。というわけで 4.5 のURLを 4.4 に書き換えたら動いた。なんのためのバージョンなんだ。実に馬鹿らしい。
[22] [CITE@ja[IE9ヤバイ。IE9の文字間隔・互換モード・DOCTYPE宣言について]]
([TIME[2011-05-09 16:55:35 +09:00]] 版)
<http://freesoft.tvbok.com/tips/net_tips/ie9_doctype.html>
[23] [CITE[IRC logs: freenode / #whatwg / 20140108]]
( ([TIME[2014-01-09 22:07:16 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140108>
[24] [CITE@ja[You don't need API version 2 - yohei's diary]]
( ([TIME[2014-03-12 01:07:05 +09:00]] 版))
<http://yohei.hatenablog.com/entry/2014/03/12/001707>
[25] [CITE@en-US[Internationalization Tag Set (ITS) Version 2.0]]
( ([TIME[2013-10-27 19:39:43 +09:00]] 版))
<http://www.w3.org/TR/its20/#usage-in-legacy-html>
[31] [CITE@en-US[How are REST APIs versioned? | Lexical Scope]]
([TIME[2015-03-14 16:56:48 +09:00]] 版)
<http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/>
[32] [CITE@ja[PowerShell の ps1 ファイルは 何故 1なのか - tech.guitarrapc.cóm]]
([TIME[2015-11-07 15:37:57 +09:00]] 版)
<http://tech.guitarrapc.com/entry/2013/09/06/220944>
[46] [CITE@en[Re: Update the Editor's Draft Specification Page]]
([[Ilya Grigorik]]著, [TIME[2017-02-11 17:19:04 +09:00]])
<https://lists.w3.org/Archives/Public/public-web-perf/2017Feb/0007.html>
[47] [CITE@en[Re: Add ability to specify the version of used CSP]]
([[Bil Corry]]著, [TIME[2017-03-09 23:43:42 +09:00]])
<https://lists.w3.org/Archives/Public/public-webappsec/2017Mar/0009.html>