Wine 11.15、2006年報告のバグ修正。Wayland色あせ解消

バグ番号4811。2006年3月に報告され、20年間開いたままだったMSXML3の不具合が、ようやく閉じられた。

Wine 11.15、2006年報告のバグ修正。Wayland色あせ解消

バグ番号4811。2006年3月に報告され、20年間開いたままだったMSXML3の不具合が、ようやく閉じられた。


20年越しのクローズ

Wine 11.15が現地時間8月8日にリリースされた。通常は隔週金曜だが、今回は土曜の公開となった。

41件のバグ修正の中に、Bug #4811がある。

MSXML3のXMLDOMDocumentオブジェクトがIStreamインターフェースで問い合わせできない、という不具合。報告は2006年3月13日。WindowsのXMLパーサーが備えている標準的なインターフェースをWineのMSXML3が実装していなかったために、XMLDOMDocumentをストリームとして扱おうとするアプリケーションが正しく動作しなかった。

Wineのバグトラッカーで4811番台は、プロジェクトが世に出てからまだ13年目の頃に開かれた領域だ。2008年にはパッチも提出されたが、当時は受理に至らなかった。今回、ニコライ・シヴォフ(Nikolay Sivov)氏による一連のMSXML3改修の中で、IStreamサポートの実装、save()のUTF-16 BOM書き出し、load()のドキュメント間読み込み対応といった作業が行われ、20年来の課題がまとめて解消された。

Waylandの2つの修正

41件の修正にはWaylandに関連する2件が含まれる。

1件目はEGLコードのsRGB二重変換の修正だ。OpenGLのデフォルトフレームバッファでGL_FRAMEBUFFER_SRGBが有効になっている環境では、コンポジタ側でもsRGBへの変換が行われるため、結果として色が二重に補正されて白っぽく褪せた表示になっていた。WaylandでOpenGLアプリケーションを動かしたときに画面全体の彩度が落ちる現象の原因がこれだった。

2件目は、4:3の固定解像度でフルスクリーン表示した場合にコンテンツがずれ、未定義の余白が表示される不具合の修正。トップレベルウィンドウの矩形計算に可視領域を使うよう変更された。

新機能と基盤強化

新機能は4つ。

BCrypt(暗号化API)にKDFアルゴリズムが追加された。TLS 1.1/1.2用のKDFとHKDFの実装が含まれる。ハンス・ライデッカー(Hans Leidekker)氏の作業で、ハッシュブロック長の取得やTLS1 KDFラベルの省略可能化も同時に入っている。

ARM64ECビルドのMinGWモード対応。ARM64X(ARM64とARM64ECの混合イメージ)のビルド時にClangのターゲットオプションが常に付与されるようになり、.NETアプリケーションのネイティブ対応判定ロジックも追加された。

WindowsCodecsには新たなフォーマット変換パスが追加された。32bppBGRAや64bppPRGBAから128bppRGBAFloatへの変換など、高精度な画像処理パイプラインでの利用を想定した変換が含まれる。

ローカルNTLM認証にも対応した。msv1_0がインプロセスでNTLM認証を処理できるようになり、問題が発生した場合はntlm_authツールにフォールバックする。NTLMはMicrosoftが開発したチャレンジ・レスポンス型のレガシー認証プロトコルだ。これを内部で完結できるようになったことで、外部ツールへの依存が減る。

ゲームとアプリケーションの修正

ゲーム関連の不具合も多い。

MapleStory(バージョン216150)はCharPrevA/CharPrevExAにNULLポインタが渡されるとクラッシュしていた。Steamではマウスの動作がおかしくなる問題、Final Fantasy XI Onlineでは右Shiftキーの挙動が期待と異なる問題がそれぞれ修正された。

複数のアプリケーションで発生していたフリーズも解消された。Mugen、東方Project 8作目(東方永夜抄)、Final Burn Neoが対象だ。

WinSCPやIrfanViewではDPI 144の環境でダイアログが実際のサイズの4分の1に描画される問題が修正され、KakaoTalkの断続的なハングも解消されている。

Wine 11.15で修正された主要バグ(報告年順)
2006年3月
MSXML3のIStream未対応
バグ番号4811。パッチは2008年に出たが受理されず
2007年
Notepad++がフリーズ
仮想デスクトップ外でファイル変更を検出するとフリーズ
2025年
OpenGLの色あせ
sRGB二重変換でWayland上の表示が白っぽく褪色
2026年
4:3フルスクリーンの表示ずれ
Waylandで固定解像度アプリのコンテンツがオフセット
2026年
Steamのマウス不具合
マウスの動作がおかしくなる問題
2026年
複数アプリのフリーズ
Mugen、東方永夜抄、Final Burn Neo
2026年
DPI 144でダイアログ縮小
IrfanView、WinSCPでダイアログが4分の1サイズに描画
2026年
WinWingの誤認識
Xboxコントローラとして誤認識されていた
※報告年はWineHQ Bugzillaの各バグの報告日に基づく。41件の修正から主要なものを抜粋

WordPerfect 7のインストール失敗やQuickBooks 2009のインストーラクラッシュといった、古いビジネスアプリケーションの修正も含まれる。

WinWingのOrionフライトコントローラがhidrawでデフォルト認識されるようになり、Xboxコントローラとして誤認識される問題が解消された。

conhostにはビープ音の出力機能が追加された。Notepad++が仮想デスクトップ外でファイル変更を検出するとフリーズする問題(Bug #11595、2007年報告)も修正されている。

サーバー内部の大規模リファクタリング

今回のリリースでは、プロジェクトリーダーのアレクサンドル・ジュリアード(Alexandre Julliard)氏が28件のコミットを入れている。その大半がWineサーバー内部のオブジェクト初期化処理のリファクタリングだ。

イベント、ミューテックス、セマフォ、タイマー、デバッグオブジェクト、ALPCポート、完了オブジェクト、ディレクトリ、シンボリックリンク、メールスロット、名前付きパイプ、デバイス、セクション、レジストリキー、ジョブオブジェクトなど、サーバーが管理するほぼすべてのオブジェクト型にinit()オペレーションが実装された。

オブジェクト生成時のパラメータ受け渡しが構造体経由に統一され、名前付きオブジェクトの生成とオープンの共通処理が整理されている。

ユーザーから見える変化ではない。だがWineサーバーのコードベースが将来の拡張に耐えるための基盤工事だ。今回のリリースの中で最も記述量の大きい変更でもある。

Bug #4811が報告されたとき、Wineのバージョンは0.9系だった。プロジェクトは1.0を経てメジャーバージョンが二桁に乗り、WaylandやARM64ECに対応するまでに育った。バグ1件が閉じられるのに要した20年は、Wineが歩いた20年そのものだ。

関連記事

この記事を共有する