この記事は Qt Blog の "Qt Modules’ Maturity Level: The list" を翻訳したものです。
執筆: Thiago Macieira 2011年5月12日
先週、オープンガバナンスと将来の開発に向けて Qt での利用を提案しているレベルのフレームワークに関する 記事 を書きました。その中で Qt の各コードを調べてどのレベルにあるべきかを決めることを述べました。この記事ではその結果を皆さんと共有したいと思います。
まず最初に、このリストは将来リリースされる Qt に対するものだということを理解してください。特に重要なのは Qt 4.8 と 5.0 です。現在リリースしているシリーズ(4.7)には機能の追加も削除も一切行わないので、受け付け可能な種類のバグ修正を除いて、この仕組みは適用されません。例えば、デグレードを引き起こす可能性のあるケースに関するバグ修正がある場合、コミュニティはそのコミットを承認する前にコードの品質レベルとデグレードが起こる可能性を考慮し、リリーステストを行う必要があります。また、他社から、特に Digia から過去のリリースへの特別なサポートを得ることも可能です。しかし、それはオープンガバナンスの範疇外になります。
次に、下記のリストは Active(アクティブ) や Maintained(メンテナンス) では無いものだけを記載しています。今最も重要なことは、我々 Nokia が何に取り組んでいて、何は取り組んでいないかを正直に明らかにすることだと考えました。これは特にバグを報告する人々に重要です。なぜなら、我々としては Done(完了) かそれ以下のレベルにあるサブシステムへの、優先度の低い問題を修正するつもりがないからです。例えば QtDBus のように、下記のリストにないものは "Active" か "Maintained" 状態にあります。このリストは Qt だけにフォーカスしたものであることに注意してください。そのコードは古く、レガシーなものも含まれています。
この最初のリストは(ブログで公開する性質上)静的なものですが、オープンガバナンスと Qt 5 の開発がスタートした際にはリストがとても頻繁に更新されるでしょうから、Qt Developer Network で最新版に編集できるようにしておくつもりです。つまり、このリストは変更可能で、モジュールのレベルが変化するということを明らかにしておきます。起こるべきでは無いことは以下の通りです。a) 品質を犠牲にすること b) Qt を間違った(後退する)方向へ進ませること。後者の例として、Qt から削除された機能の復活があります。例えば、再び IRIX や Unicode でないバージョンの Windows、Microsoft Visual Studio 6.0 をサポートしたいとは思いません。
最後に、Done(完了) と Deprecated(非推奨) が違うことに注意してください! Done は「安定性とデグレードしないことが最も重要なので、機能の追加やパフォーマンスの改善は行いませんが、そのコードの利用自体に問題はありません」。
リスト
モジュール
- ActiveQt
モジュール全体の状態: Done(完了)
New Maintainer Required(新規メンテナが必要)
- Phonon
モジュール全体の状態: Qt 内において Done(完了), Qt 外では Maintained(メンテナンス)
理由: QtMultimediaKit の利用を推奨しています。Phonon の開発は Qt の外部、KDE コミュニティで続けられ、メンテナンスされています。
- qmake
モジュール全体の状態: Done(完了)
理由: 安定したコードのため、そのレベルを上げることを推奨しません。より現代的なビルドシステムを将来的に実現するリサーチプロジェクトが始まっています。
- XCode integration
状態: Deprecated(非推奨)
New Maintainer Required(新規メンテナが必要)
- Qt Designer
状態: Done(完了)
理由: 今後は、Qt Quick が UI 開発の推奨であるため。新たな Qt Quick Designer がこれまでの Qt Designer の機能を受け継ぐべきです。
- Qt3Support
モジュール全体の状態: Deprecated(非推奨)
理由: Qt3Support は Qt 3 からの移植のためのレイヤとして提供されたものであり、移植の終了が推奨されるため。Qt3Support は Qt 5 では Removed(削除済み) となるでしょう。
- QtCore
モジュール全体の状態: Active/Maintained(アクティブ/メンテナンス)
- QFileSystemWatcher
状態: Deprecated(非推奨)
理由: 設計ミス。作り直しが必要で、そのための議論を待っています。
- Abstract file engines
状態: Deprecated(非推奨)
理由: 設計ミス。仮想ファイルシステムを提供するには誤ったレベルであり、この設計の持ち越しを推奨しません。Qt 5 ではこの機能は Removed(削除済み) となるでしょう。
- QtDeclarative
モジュール全体の状態: Active/Maintained(アクティブ/メンテナンス)
- Graphics view support (いわゆる QML 1.x)
状態: Done(完了)
理由: Qt 5 では QML Scene Graph ベースの QML 2 が利用可能になり、そちらが推奨されます。
- QtGui
モジュール全体の状態: Active/Maintained(アクティブ/メンテナンス)
このモジュールの再構成に関する詳細は Qt 5 の記事 を参照してください。
- フォントシステムでの XLFD サポート
状態: Deprecated(非推奨)
理由: 現代的なシステムではクライアントサイドフォントを利用するため、X11 では廃れた機能です。その他のプラットフォームには影響しません。
- Graphics Effects
状態: Deprecated(非推奨)
理由: 設計ミス。このコードのメンテナンスは推奨しません。
- Graphics View
状態: Done(完了)
理由: 安定性の確保とデグレードリスクの減少がより重要で、安定しているコードであるため。機能の追加は計画していません。
- 暗黙のネイティブ子ウィジェット
状態: Done(完了)
理由: 設計ミス。このコードのメンテナンスは推奨しません。
注意: Direct3D による表示のように、明示したネイティブウィンドウハンドルのあるウィジェットはまだサポートされます。
- 印刷のサポート
状態: Done(完了)
New Maintainer Required(新規メンテナが必要)
- Postscript サポート – Deprecated(非推奨)
理由: PDF で十分なため、サポートを廃止
- QPainter
状態: Done(完了)
理由: 安定性の確保とデグレードリスクの減少がより重要で、安定しているコードであるため。メンテナンスレベルの向上は推奨していません。
- Raster および OpenGL (ES) 2 エンジン – Maintained(メンテナンス)。
- それ以外のエンジン – Done(完了) かつ New Maintainer required(新規メンテナが必要)。
- QPainterPath の “set” 操作
状態: Deprecated(非推奨)
理由: 設計ミス。このコードのメンテナンスは推奨しません。
- QPicture
状態: Deprecated(非推奨)
New Maintainer Required(新規メンテナが必要)
- QSound
状態: Deprecated(非推奨)
理由: QtMultimediaKit により良いソルーションが存在するため。
- スタイル
状態: Done(完了)
理由: 安定性が非常に重要で、安定しているコードであるため。成熟レベルを上げることは推奨しません。将来の UI には Qt Quick ベースの開発が期待されており、そのため、Qt Quick ベースのテーマおよびスタイルが可能になるでしょう。
- Motif および CDE スタイル – Deprecated(非推奨)
理由: 廃れたため
- スタイルシート
状態: Done(完了)
理由: 安定性が非常に重要で、安定しているコードであるため。成熟レベルを上げることは推奨しません。将来の UI には Qt Quick ベースの開発が期待されており、そのため、Qt Quick ベースのテーマおよびスタイルが可能になるでしょう。
- QPushButton, QLineEdit 等のウィジェットクラス
状態: Done(完了)
理由: 安定性の確保とデグレードリスクの減少が重要で、安定しているコードであるため。メンテナンスレベルの向上は推奨していません。将来の UI には Qt Quick Component を用いた Qt Quick ベースの開発が期待されています。
- XIM support
状態: Deprecated(非推奨)
理由: 設計ミス。このコードのメンテナンスは推奨しません。
- QtNetwork
モジュール全体の状態: Active/Maintained(アクティブ/メンテナンス)
- QHttp および QFtp
状態: Deprecated(非推奨)
理由: QNetworkAccessManager への置き換えのため。QNetworkAccessManager で現在提供されている FTP のファイルシステム機能のリサーチを歓迎します。Qt 5 ではこれらのクラスは Removed(削除済み) となるでしょう。
- QtScript
モジュール全体の状態: Active/Maintained(アクティブ/メンテナンス)
- QScriptEngineAgent および関連クラス
状態: Deprecated(非推奨)
理由: 設計ミス。より良い設計に置き換えます。
- QtSql
モジュール全体の状態: Done(完了)
New Maintainer Required(新規メンテナが必要)
- QtSvg
モジュール全体の状態: Deprecated(非推奨)
New Maintainer Required(新規メンテナが必要)
理由: (SVG Tiny ではない) SVG Full 機能の実装が QtWebKit にあり、そちらを使用すべきであるため。SVG 生成コードの置き換えのためのリサーチを歓迎します。
- QtWebKit
モジュール全体の状態: Active/Maintained(アクティブ/メンテナンス)
- QWebView および QGraphicsWebView
状態: Done(完了)
理由: Qt 5 では別々のライブラリに移動するため。Web 表示の際の主な方法は Qt Quick ベースの "webview" コンポーネントになるでしょう。
- QtXml
モジュール全体の状態: Done(完了)
理由: QtCore モジュールにある QXmlStreamReader および QXmlStreamWriter の使用が推奨されます。
- QtXmlPatterns
モジュール全体の状態: Done(完了)
New Maintainer Required(新規メンテナが必要)
機能単位
- Mac OS X の Carbon サポート
状態: Done(完了)
理由: Cocoa サポートが利用可能であり、Carbon では 64-bit アプリケーションを作成できないため。メンテナンスに負担がかかるため、(Unicode ではない Windows がそうだったように) Qt 5 のライフサイクル内で、最終的にはこの機能を Deprecate(非推奨) にし、やがては Remove(削除済み) にしたいと思っています。
- HP-UX, AIX および Solaris サポート
状態: Done(完了)
New Maintainer Required(新規メンテナが必要)
- 古い Qt Solution のアーカイブ
状態: Deprecated(非推奨)
理由: コードが古く、既にメンテナンスされていないため。
- Qt Mobility 内の Bearer Management
状態: 現在は Deprecated(非推奨)、Qt 5 ではおそらく Removed(削除済み) になります。
理由: QtNetwork にコピーされたコードがメンテナンスされており、そちらの使用が推奨されるため。
- Qt 内の Qt Multimedia
状態: 4.8 では Deprecated(非推奨)、Qt 5 では Qt のモジュール化に伴い、Qt MultimediaKit のコピーに置き換わります。
- Qt 内にコピーされている Phonon
状態: Done(完了)
理由: 独立したそれ自身のバージョン番号を持つPhonon のリリースがあり、そちらが利用できるため。今後 Qt 内のコピーは更新されません。
- Qt 内にコピーされている Qt WebKit
状態: Deprecated(非推奨)
理由: 独立したそれ自身のバージョン番号を持つ QtWebKit のリリースが利用可能なため。Qt 4.7 および 4.8 でアップデート版を使いたい場合にはそちらを利用するべきです。Qt 5 では Qt のモジュール化に伴い再度統合された独立モジュールになります。
- QWS (現在の Qt for Embedded Linux)
状態: Qt 4.8 ではDone(完了)
理由: 新しい Lighthouse ベースのアーキテクチャが新機能および新プラットフォームには推奨されるため。
- サンプルおよびデモプログラムの静的ビルド
状態: Removed(削除済み)
理由: Qt のバイナリは常に動的ビルドで行われるため、静的ビルドはメンテナンスも確認もしていないため。静的ビルドは Qt の学習やソースコードを読むのには必要なく、デバイスへも一切転送されないため。
- Mac, Windows および Embedded Linux での静的ビルド
状態: Done(完了)
- Windows CE への移植
状態: Done(完了)
New Maintainer Required(新規メンテナが必要)
- WINSCW への移植
状態: Done(完了)
理由: 古く、バグの多いコンパイラのため。Symbian のシミュレータのビルド用にのみ必要で、新たな技術が利用可能になればそちらで置き換えるべきです。
リストの変更
前述したとおり、このリストは状態の変更を更新するために Qt Developer Network の wiki に置かれるべきです。そこで、どうやって変更を行いますか。
各機能やモジュールのレベルはその品質の最終責任を持つコードのメンテナによって決定されます。そのため、新機能やその他の変更による影響を受け入れるか否かの決定は、メンテナが責任を持ちます。それゆえ、レベルを変更するには現在のメンテナを説得するか、自身がメンテナにならなくてはいけません。
そのため、現在の Qt への貢献者達といずれかのメンテナへ志願する気がないか話し合ってきました。Digia は既に AIX と Solaris への移植のメンテナンスに志願しました。そして、KDAB は Windows CE に志願しています。Qt のあるモジュールのメンテナになるのはそう難しくはないはずです。それには責任が伴うので、時間と専念することは必要です。(そういった理由から、まずはブランチの維持などを行い、メンテナになれることを実証して欲しいと思います。)
詳細に関する議論はオープンガバナンスと Qt contributors Summit で始まるでしょう。