[1] [DFN[非互換変更]]とは、[[プロトコル]]、[[言語]]、その他の[[仕様]]における、
以前の[[版]]との[[後方互換性]]・[[相互運用性]]が失われるような変更をいいます。

[2] 一般に[[非互換変更]]は好ましくないものと認識されていますが、
にも関わらず、体系的整合性や[[政治的正当性]]などを根拠に、
あるいは影響を過小評価した結果としてしばしば行われ、
混乱を招いています。

* 非互換変更の例

- [3] [[JIS X 0208]] [[符号化文字集合]]における1983年の[[符号位置]]の入れ替えを含む大規模改訂
(いわゆる[[新JIS]])
- [26] [[JIS X 0213:2000]] における[[互換包摂]]の廃止分離
- [54] [[JIS X 0213]] による [[JIS X 0208]] の拡張は[[デファクト標準]]の [[Windows-31J]]
との互換性が中途半端なため誰も使いませんでした。
- [27] [[JIS X 0213:2004]] における文字の追加
- [36] 
[[ユーロ通貨記号]]が導入されたとき、
いくつかの[[文字コード]]規格と実装は[[ユーロ通貨記号]]を追加するための[[非互換変更]]を行いました。
- [92] [[MacCyrillic]]
- [51] [[KPS 9566]] のいくつかの文字が改訂で変更されたそうです。
- [53] [[Mozilla]] / [[Firefox]] の [[Big5]] は版により互換性がありません。
- [55] [[GB 2312とその拡張]]における「g」
- [82] [[GB 2312とその拡張]]と [[GBK]]
- [77] [[GB 18030-2022]] における [[Unicode符号位置]]の変更
- [25] [[Unicode 1.0]] → [[Unicode 1.1]]
- [4] [[ISO/IEC 10646]] [[符号化文字集合]]における[[ハングル]]の[[符号位置]]の変更と[[漢字]]の再割り当て
(いわゆる [[Korean mess]])
- [20] [[ISO/IEC 10646]] の [CODE[U-00110000]] [[以上]]の[[符号位置]]の廃止
- [21] [[Unicode]] の [[phi mess]]
- [39] [[Unicode]] の[[CJK統合漢字]]の一部の包摂分離
- [83] [[Unicode]] の [[CJK統合漢字]]の一部の字形変更
- [93] [[Unicodeビルマ文字]]
- [63] [CODE(charname)@en[BELL]] の[[文字の名前]]の問題 [SEE[ [[文字の名前]] ]]
- [37] ライセンス問題による[[TRONコード]]からの[[今昔文字鏡]]の削除
- [47] [[TRONコード]]における[[iモード絵文字]]の「修正」
- [38] [[Microsoft]] による[[漢陽PUA]]サポートの廃止
- [9] [[IDNA2008]] における[[大文字・小文字]]の扱いをはじめとした[[正規化]]に係る[[処理モデル]]の変更
- [40] [[Perl]] [[正規表現]]の [CODE[\p]] の仕様変更
- [5] [[IETF]] 時代の [[URL]]・[[URI]] 仕様の改訂の度に繰り返されていた「[[URL]]」・「[[URI]]」
をはじめとした様々な用語の定義と解釈の変更
- [44] [[同文書参照]]の解釈の度重なる変更 (市場がついていけず混乱)
- [45] [[URL]] の[[デファクト標準]]と矛盾した [[IRI]] や
[[LEIRI]] その他拡張仕様の乱立 (誰もついていけず混乱の挙げ句にプロジェクト崩壊)
- [7] [[BCP 47]] [[言語タグ]]における [[RFC 3066]] から [[RFC 4646]] への改訂時の意味と構文の変更
- [31] [[Unicodeロケール識別子]]の旧構文から新構文
- [49] 
[[Webブラウザー]]における 
[[HZ]],
[[ISO-2022-CN]],
[[ISO-2022-KR]],
[[UTF-7]]
対応の廃止
- [35] [[Webブラウザー]]のメニューからの[[文字コード]]上書き指定の廃止により、
[[自動判定]]に失敗する古い[[Webサイト]]が表示できなくなりました。
[SEE[ [[文字コード変更メニュー]] ]]
- [10] [[iモード]]の [[Webブラウザー]]における[[十進数文字参照]]の削除
[SEE[ [[シフトJIS文字参照]] ]]
- [6] [[XHTML]] における [[HTML]] からの構文と意味の告知なき変更、
例えば [CODE[usemap]]
- [12] [[XHTML1]] に対する [[XHTML2]] の大規模仕様変更 (受け入れられずプロジェクト崩壊)
- [41] [[HTMLフォーム]]から [[XForms]] への移行 (受け入れられず)
- [8] [[XML 1.0 5e]] における以前の[[版]]からの[[整形式]]の定義の変更
- [28] [[HTML]] における [CODE[isindex]],
[CODE[keygen]],
[CODE[blink]] の廃止
- [78] [[HTML]] における [[outline algorithm]] の廃止
- [94] [[HTML]] における [CODE[h1]] の[[利用者エージェントスタイルシート]]の文字サイズの変更
- [79] [CODE[target=_blank]] の [CODE[noreferrer]] 化
- [24] [CODE[img]] の [CODE[image-orientation]] 既定値の変更
- [48] [[Webブラウザー]]における [[XBM]] 対応の廃止
- [56] [[SVGフォント]]の廃止
- [29] [CODE[showModalDialog]] の廃止
- [43] [CODE[beforeunload]] の仕様変更
- [58] [[Web SQL]] の廃止
- [57] [[AppCache]] の廃止
- [34] [[TLS]] 旧版の廃止
- [22] [[セキュリティー]]を理由とした [[Mixed Content]] 規制の強化
- [30] [[Geolocation API]] の [[secure context]] 強制化
- [50] [[Webブラウザー]]における [[Gopher]], [[FTP]] 対応の廃止
- [32] [[NPAPI]] [[プラグイン]]の廃止
- [23] [[Flash]] の廃止
- [33] [[IE]] 独自機能の廃止
- [59] [[XBL]] の廃止
- [60] [[SVG]] 以外の [[XML]] における [[XLink]] 対応の廃止
- [87] [[WebDriver]] における [CODE[capabilities]] への変更
- [11] [[Mozilla Suite]] や [[Firefox]] における[[拡張機能]]の仕様の度重なる変更
- [64] [[セキュリティー]]を理由とした [[WebDAV]] クライアントの[[基本認証]]対応の廃止
- [65] [[セキュリティー]]を理由とした [[SMB]] 旧版対応の廃止
- [42] [[Chrome拡張]]の仕様変更
- [67] [[SOAP 1.2]] は [[SOAP 1.1]] と互換性がなく、長く併存しました。
- [66] [[OAuth2]] は [[OAuth1]] と名前以外別物で、長く併存しました。
- [18] [[GFM]] はある日突然 [[CommonMark]] ベースに変更され、
多くの[[ソフトウェア]]の[[ドキュメント]]の解釈がおかしくなりました。
- [84] [[MFM]] は突然[[LaTeX]]構文が廃止されました。
[[MFMアート]]や[[ルビ]]の用法が影響を受けました。
- [85] [CITE[はてなブログ]]は[[はてな記法]]の[[tex記法]]を突然[[非互換変更]]しました。
- [14] [[Perl5]] に対する [[Perl6]] (結局受け入れられず改訂版ではなく別言語という扱いに)
- [61] [[Perl]] [CODE[use encoding]] の廃止
- [80] [CODE[DBD::mysql]] の [[MariaDB]] 非対応化
- [81] [CODE[DBD::mysql]] の [[TLS]] 対応コンパイルオプション廃止 
- [13] [[Ruby]] 本体や [[Ruby]] モジュール、 [[Ruby]] で書かれた[[アプリケーション]]がバージョンアップの度に動かなくなる現象
- [19] [[Python]] 2 → 3 への非互換変更 
- [46] [[日本]]版 [[Microsoft Excel]] における入力[[年]]の解釈の変更
- [17] [[Facebook]] や [[Google]] や [[Twitter]] は、
一般の[[開発者]]に公開している [[Web API]] の仕様を何度も変更していて、
[[シェア]]を背景に開発者に追随を強いています。
- [52] [[CircleCI]] は 2.0 への移行で旧ファイル形式と互換性のない新しいファイル形式を採用しました。
- [88] [[ChromeDriver]] の既定のポート番号の変更


[62] [CITE@ja[嶋田大貴さんはTwitterを使っています: 「PHP 5時代のプログラムを PHP 7でなんとか動かしている人へ。 PHP 8でかなりの非推奨機能が削除されて動かなくなるので覚悟しといたほうがいいですよ。」 / Twitter]], [TIME[午後3:28 · 2022年11月15日][2022-11-15T06:28:53.000Z]], [TIME[2022-11-15T07:15:51.000Z]] <https://twitter.com/shimariso/status/1592404249371365377>


[89] [CITE@ja['''['''059196''']'''Windows 11 バージョン 24H2環境における「UD デジタル 教科書体」の利用について (J-License商品)]], [TIME[2025-03-07T03:28:08.000Z]] <https://support.justsystems.com/faq/1032/app/servlet/qadoc?QID=059196>

>これは、Windows 11 バージョン 24H2 に搭載されている「UD デジタル 教科書体」のフォント名が変更されたことに起因します。

[90] [[Microsoft]] は互換性を重視してるんじゃなかったのw なんでこんな致命的な[[非互換変更]]をさらっとやって他社のサポートに迷惑かけてるのw

[91] 
そういえば[CITE[Windows TV ゴシック]]というフォントも昔の [[Windows]]
には標準搭載されてたのにいつの間にかなくなったらしい。

* The future is longer than the past.

[75] 
[DFN[The future is longer than the past.]] は[[非互換変更]]を正当化する[[合言葉][プロパガンダ]]です。

[76] 
目論見通り past を抹消するのは難しいです。
広く行き渡っているものなら抹消しきれなくて future に恒久的に禍根を残すことになりがち。
そうでもないものなら混乱で見切りをつけられて future が消滅しちゃったり。


[71] [CITE@en[高輪ゲートウェイ駅開業にあわせて未来への決断をおこなったJR東日本 | muo-ya]], [TIME[2023-06-08T11:53:25.000Z]] <https://b.muo.jp/2020/03/14/takanaga-gw.html>

>田町駅のコードをずらして高輪ゲートウェイ駅を配置したことで、駅改札機での履歴出力はもとよりSuica Readerを始めとするICカード履歴読み取りツールや各種経費精算ツールでも日付をもとにした分岐処理が必要となります。
>JR東日本はこれを承知のうえで、過去データとそれを読み書きするソフトウェアの一時的な混乱よりも、未来に向けて整った駅順コードを優先するという判断をおこなったことになります。
>
正直なところ、駅順コードに関しては過去データの扱いを優先して徐々にぐちゃぐちゃになって歴史的経緯として刻まれていくもの、と考えていたので、今回のJR東日本の対応には驚きがありました(羽田空港国際線開業時の京急やほか一部モノレールなどで事例はあるものの)。


[72] [CITE@ja[Kei NakazawaさんはTwitterを使っています: 「JR東の決断に驚きつつ感動したので書いた 高輪ゲートウェイ駅開業にあわせて未来への決断をおこなったJR東日本 | muo-ya https://t.co/tDSrQ8cTwW」 / Twitter]], [TIME[午後1:23 · 2020年3月14日][2020-03-14T04:23:37.000Z]], [TIME[2023-06-08T11:34:09.000Z]] <https://twitter.com/muo_jp/status/1238682168911466497>


[73] 
こうやって[[非互換変更]]を美化できるのは傍観してるだけの部外者だからかなあ



[74] [CITE@ja[六ミツさんはTwitterを使っています: 「家を整理してたら古いSuicaが出てきて、2005年のデータを読み取ることに成功したが、はて? 当時存在しない高輪ゲートウェイが出てきたぞ? https://t.co/jwuuCf9M3C」 / Twitter]], [TIME[午前10:58 · 2023年6月7日][2023-06-07T01:58:14.000Z]], [TIME[2023-06-08T11:34:09.000Z]] <https://twitter.com/rokumitsu/status/1666263265985593345>


[86] 
他に[[技術的負債]]という言葉も[[非互換変更]]を正当化するために使われることがあります。


* 関連

[15] [[互換性]]、[[相互運用性]]、[[Web互換性]]、[[バージョン付け]]も参照。

[SEE[ [[読めなくなったファイル]] ]]

* メモ

[16] なぜみんな非互換変更を好むのか。

[68] 
セキュリティーなどやむを得ないこともあるのですが、
開発者が良かれと思って積極的に非互換変更するとか、
過去の失敗に学ばず同じものを再変更したりとか、
闇が深い事例が少なくないのがまたなんとも。


[69] 
何もしなくても解釈の違いで製品によって非互換になってしまうことがよくあるのに、
意図的に非互換に変更するのは悪質だよなあ

[70] 
[[プロトコルの脱共有化]]勢力の暗躍かもしれない([[陰謀論]])
