[26] 版付け (バージョン付け, バージョニング) とは、データやメタデータとして仕様や実装のバージョンの情報を付与し、それによって処理モードを変えることをいいます。
[36] バージョニングは色々な形で技術に歪みをもたらします。
[17] MIME は 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 の変更の一部が取り込まれ、
「整形式」の定義が変わったのに版番号は 1.0
のままとなりましたw
(しかし XML 1.1 も廃止されておらず、 XML 1.0 第4版以前、XML 1.1、XML 1.0 第5版 (以降) の3種類の混ざった混沌だけが残りましたw)
version
疑似属性の取り扱いは幾度も非互換変更が行われ、
将来のバージョンの変更を予測して現在のバージョンのうちにバージョン切り替えメカニズムを設計することの難しさを示しました。
最終的には version
擬似属性の値が 1.1
や
1.2
であっても XML 1.0 第5版 (以降) とみなすことになりました。
[33] XLink 1.0 は xlink:type
属性を必須としていましたが、
現実には省略されることも多く、必須とする強い理由も無いとして、
省略可能に変更されました。この際、技術的な変更が加わっているため、
XLink 1.1 に改番されました。
改訂と同時期には、 XLink 1.0 を引用しながら、 XLink 1.1
が制定中で省略可能になる予定だとして必須にしていない仕様書も出版されたりしました。
XLink 1.1 の制定後も、それまで XLink 1.0 を引用していた仕様書のすべてが改版されたわけではなく、
そうした古い仕様書に基づく技術で xlink:href
属性が必須なのかどうかは不明確です。
また、 XLink 1.0 と XLink 1.1 のどちらが文書で使われているかは区別できませんから、
実装は両方の挙動に同時に対応することができません。
つまり現実の要求に近づけるための新版制定だったはずなのに、かえって相互運用性に不安を残す結果となっています。
[27] HTML と CSS は DOCTYPEスイッチにより90年代の実装の延長にある奇癖モードと2000年前後の標準仕様に基づく標準モード (現在の無奇癖モード) で処理を分岐させる手法を00年代初頭に取り入れましたが、 00年代後半には既に実装コスト、学習コスト、標準化コストがかかるだけの失敗だったと考えられるようになっています。
00年代末には IE8 が同様の異なる仕組みである文書モード
(X-UA-Compatible:
) を導入しましたが、10年代前半の IE11
はこれを非推奨としていて、 Edge では放棄されました。
加えて CSS では標準化の過程にある実験的な機能を vendor prefix によって区別して実装開始する手法を取り入れましたが、結局は最終的な標準版とその過程の vendor prefix 版を恒久的に (他の vendor も) 実装しなければならないことになり (Compatibility Standard)、バージョンを区別して最終版以外は切り捨てるとの目論見は破綻しました。
つまり標準化して実施しても単一ベンダーで独自に実施しても、 全体レベルでも機能レベルでも、バージョニングは失敗しています。
[60] CSS2/CSS 2.1/CSS 2.2/CSS3 のカオスな状況のように、 CSS は仕様書のバージョニングの面でも失敗しています。
[28] XHTML2 は XHTML1 と非互換なことから異なる名前空間を採用し、 事実上のバージョニングを行っていました。しかし XHTML1 への機能追加の要求が強まり、徐々に新機能を XHTML1 へとバックポートしていきました。 その流れは最終的に XHTML2 プロジェクト全体を崩壊させるに至りました。
[29] XPath と XSLT は 2.0 で大きな非互換変更を行い、 version
を指定することで動作モードを切り替えるようにしましたが、 Webブラウザーを含む多くの実装が
2.0 の実装を嫌がり、普及の障壁となりました。
[37] XForms、XML Events、XFrames は、 HTML の一部機能を改良することを目指したものでしたが、 互換性が一切無く異なる名前空間を採用していました。 XHTML2 と共に HTML の新バージョンとして置き換えることを狙っていましたが、 誰も使いたがりませんでした。
[30] JavaScript は language
属性や
MIME型でバージョンの区別ができることになっていましたが、
Webブラウザーの実装も著者側の利用も正しく行えず、
次第にその意味するところが曖昧になっていきました。
最終的にはバージョンの区別はすべて無視されるようになりました。
[35] DOM は特徴という形でアプリケーションが実装の版を判定できる仕組みを用意していましたが、 有効に機能しませんでした。
[38] RSS と Atom は、色々なバージョンが乱立しました。 各バージョンは互換性が全くなかったり、一見互換性がありそうだったり色々でした。 (各項を参照。) 実世界では、バージョンが正確に使い分けられず、 他のバージョンの機能が混在させて用いられたりしました。 バージョン番号だけを新しいバージョンに書き換えてそれ以外は旧バージョンのままのフィードもあったりします。 結局すべてのバージョンが混在したどの仕様書でも説明されていないものが現実に用いられているものであり、 相互運用性に大きな課題を抱えています。
[54] HTTP はプロトコルの版で将来の版と HTTP/1.x を区別することを企図していましたが、 実際の HTTP/2 はそれを実質的に利用せず、 ALPN で切り替えています。 将来のバージョンがどのような設計を選択するかの予測は的中するとは限らず、 現在のバージョンに組み込んだバージョン切り替え機構が実際に採用されるかどうかは、 その時までわからないのです。
[39] こうした実例から、失敗の理由は次のように整理できそうです。
[65] ソフトウェアの版の使い方を誤った失敗事例:
[66] 版番号の比較の失敗事案: version sniffing, 年問題
[48] Web APIの悪い設計を参照。
[1]
David Baron's weblog: March 2007 (2007-03-26 09:31:27 +09:00
版) http://dbaron.org/log/2007-03#e20070325a
(名無しさん 2007-03-26 00:33:42 +00:00)
[2]
Re: Doctypes and the dialects of HTML 5 (Henri Sivonen 著, 2007-03-25 18:16:51 +09:00
版) http://lists.w3.org/Archives/Public/public-html/2007JanMar/0433
(名無しさん 2007-03-26 10:16:32 +00:00)
[3]
Re: Doctypes and the dialects of HTML 5 (Henri Sivonen 著, 2007-03-25 18:16:51 +09:00
版) http://lists.w3.org/Archives/Public/public-html/2007JanMar/0433
(名無しさん 2007-03-26 10:17:07 +00:00)
[4]
XForms document versioning (Mark Birbeck 著, 2007-04-05 01:02:12 +09:00
版) http://lists.w3.org/Archives/Public/www-forms/2007Apr/0006.html
Versioning ここに極まれり的な提案でつね。 (名無しさん)
[5]
IRC logs: w3c / #html-wg / 20070404 (2007-04-06 23:18:21 +09:00
版) http://krijnhoetmer.nl/irc-logs/html-wg/20070404#l-1997
そりゃぁこういう冗談もいいたくなってくるわ。
(名無しさん)
[6]
David Baron's weblog: April 2007 (2007-04-07 22:16:48 +09:00
版) http://dbaron.org/log/2007-04#e20070405a
(名無しさん 2007-04-07 13:19:03 +00:00)
[7]
Versioning and html[5] (Chris Wilson 著, 2007-04-13 01:40:07 +09:00
版) http://lists.w3.org/Archives/Public/public-html/2007Apr/0612.html
(名無しさん 2007-04-14 05:57:29 +00:00)
[8]
Sam Ruby: Form Follows Function (2007-04-16 20:51:51 +09:00
版) http://www.intertwingly.net/blog/2007/04/16/Form-Follows-Function
(名無しさん 2007-04-17 00:29:21 +00:00)
[9]
Version information (was Re: HTML5 vs HTML6) (L. David Baron 著, 2007-04-06 09:27:21 +09:00
版) http://lists.w3.org/Archives/Public/public-html/2007Apr/0279.html
(名無しさん)
[10]
Technical Architecture Group -- 16 Apr 2007 (2007-04-17 02:29:18 +09:00
版) http://www.w3.org/2001/tag/2007/04/16-minutes.html
[11]
crisp's blog » Blog Archive » HTML5: Microsoft and the opt-in catch (2007-04-23 09:43:54 +09:00
版) http://therealcrisp.xs4all.nl/blog/2007/04/22/html5-microsoft-and-the-opt-in-catch/
(名無しさん 2007-04-23 00:50:52 +00:00)
[12]
HTML and version mechanisms - W3C QA Weblog (2007-05-01 12:13:23 +09:00
版) http://www.w3.org/QA/2007/05/html_and_version_mechanisms.html
(名無しさん 2007-05-02 01:25:30 +00:00)
[13]
Version information (was Re: HTML5 vs HTML6) (L. David Baron 著, 2007-04-06 09:27:21 +09:00
版) http://lists.w3.org/Archives/Public/public-html/2007Apr/0279
(名無しさん)
[14]
Todd Ditchendorf’s Blog. XML, Cocoa, JavaScript, Java. » Blog Archive » IE 8 and standards support confusion (2007-07-01 22:38:08 +09:00
版) http://www.ditchnet.org/wp/2007/05/05/ie-8-and-standards-support-confusion/
(名無しさん 2007-07-01 13:40:16 +00:00)
[15]
Ajaxian » IE 8: Opt-in for standards compliance (2007-07-01 22:37:58 +09:00
版) http://ajaxian.com/archives/ie-8-opt-in-for-standards-compliance
(名無しさん 2007-07-01 13:41:17 +00:00)
[16] Re: [validator] the @profile at-rule (fantasai 著, 版) http://lists.w3.org/Archives/Public/www-style/2008Oct/0007.html
[67] Versioning and HTML, , https://www.w3.org/2001/tag/doc/versioning-html.html
[18] [whatwg] HTML6 Doctype ( 版) http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-December/029349.html
<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/"/>
DTD が無いと言われた。4.4まではローカルにあったけど、4.5は無かった。カタログでローカル・ファイル・システムに写像されていて、ファイルが無いからエラーになっていたらしい。当該部分を削除したら、今度はネットワーク経由で実体を取りにいこうとしているとエラーになった。馬鹿か。何のために URL を使っているんだ。というわけで 4.5 のURLを 4.4 に書き換えたら動いた。なんのためのバージョンなんだ。実に馬鹿らしい。
[22] IE9ヤバイ。IE9の文字間隔・互換モード・DOCTYPE宣言について ( 版) http://freesoft.tvbok.com/tips/net_tips/ie9_doctype.html
[23] IRC logs: freenode / #whatwg / 20140108 ( ( 版)) http://krijnhoetmer.nl/irc-logs/whatwg/20140108
[24] You don't need API version 2 - yohei's diary ( ( 版)) http://yohei.hatenablog.com/entry/2014/03/12/001707
[25] Internationalization Tag Set (ITS) Version 2.0 ( ( 版)) http://www.w3.org/TR/its20/#usage-in-legacy-html
[31] How are REST APIs versioned? | Lexical Scope ( 版) http://www.lexicalscope.com/blog/2012/03/12/how-are-rest-apis-versioned/
[32] PowerShell の ps1 ファイルは 何故 1なのか - tech.guitarrapc.cóm ( 版) http://tech.guitarrapc.com/entry/2013/09/06/220944
[46] Re: Update the Editor's Draft Specification Page (Ilya Grigorik著, ) https://lists.w3.org/Archives/Public/public-web-perf/2017Feb/0007.html
[47] Re: Add ability to specify the version of used CSP (Bil Corry著, ) https://lists.w3.org/Archives/Public/public-webappsec/2017Mar/0009.html
[50] Re: Add ability to specify the version of used CSP (Mike West著, ) https://lists.w3.org/Archives/Public/public-webappsec/2017Mar/0025.html
[52] つまり世の中には「XPath 3.0」、「XPath 3.0 と追加機能」、「XPath 3.1」 の3種類の XPath3 があって、後2者が XSLT 3.0 で使えるということだ。 2つが使えるというか、どちらでもいい (= どちらかは実際使ってみないとわからない)。破綻してるだろこれ。
[53] RFC 8170 - Planning for Protocol Adoption and Subsequent Transitions () https://tools.ietf.org/html/rfc8170
[55] CSP, not CSP2. (mikewest著, ) https://github.com/w3c/webappsec-clear-site-data/commit/32b5d4dd706bcb000000a5d4e07c6097340246bb
[56] Do not version the ECMAScript spec used (TimothyGu著, ) https://github.com/heycam/webidl/commit/a7d3949ad05272a9a9053f8f224e11502f179436
[57] Re: !important: css versioning, and a semantic shift (Florian Rivoal著, ) https://lists.w3.org/Archives/Public/www-style/2018Jan/0061.html
[58] versioning を主張する人は後を絶たないのなんでだろうなあ。リセット信仰のバリエーションなのかなあ。
[59] RFC 6709 - Design Considerations for Protocol Extensions () https://tools.ietf.org/html/rfc6709#section-4.1
[61] Chromeが6週間毎にTLSバージョン番号を変更していくかもしれない - ASnoKaze blog () https://asnokaze.hatenablog.com/entry/2018/06/14/023800
[62] Versioning · Issue #17 · tc39/proposal-built-in-modules · GitHub, https://github.com/tc39/proposal-built-in-modules/issues/17
[63] rfc3920, https://datatracker.ietf.org/doc/html/rfc3920#section-4.4.1