2015年6月7日、8日の2日間、ノルウェーのオスロで「Qt Contributors' Summit 2015」( 以下QtCS)が開催されました。
Qtのイベントといえば、Qt Developer Day(今年からは Qt Summitという形になり、先日開催されたQt Japan Summitや10月にドイツで開催されるQt World Summitが相当します)が最もなじみの深いものだと思います。こちらはQtを使用する人たち向けで、トレーニングやセミナーを中心としており、申し込みをすれば誰でも参加できるイベントです(Qt World Summitは有料のイベントです) 。
それに対してQtCSは、その名の通りQtへ貢献した人たちによるイベントで、そこでは今後のQtの方向性を決定するための会議が行われます。出席にはQtへ貢献したという実績が必要とされ、Qt Projectから招待されなければ出席することはできません。貢献の内容はコードによるものがほとんどですが、その他にもドキュメントやフォーラムでのQ&A、コミュニティ活動、イベントへのスポンサーなども対象となります。
会議はアンカンファレンス(Unconference)スタイルで行われるため、当日になって開催が決定されるセッションもあります。各セッションはセミナーのような一方通行ではなく、ホストと参加者とで議論が行われ、出席者にはセッションの主催や議論への積極的な参加が推奨されています。
これまでのQtCSはドイツのベルリンで開催されることが多かったのですが、今年はQtの20周年ということもあってか、Trolltech時代からのQt開発の最も大きな拠点であるノルウェーのオスロで開催されました。
会場となったThe Qt CompanyがあるオスロのBI center.
このQtCSに今年は日本から3名の参加がありました。筆者(朝木卓見)の他は、昨年、日本Qtユーザー会での献身的な活動などが評価され、The Qt Championとして表彰された株式会社PTPの鈴木佑さん、Qt Installer Frameworkの翻訳や書籍『Qt QuickではじめるクロスプラットフォームUIプログラミング』の執筆を手がけ、他にも2冊のQt本を自費出版されている折戸孝行さんの3人です。
なお、QtCS 2015全体の参加者は約100名で、そのうちThe Qt Companyからは30名ほどが参加したとのことでした。
オープニング
QtCSはThe Qt Companyのオフィスのあるビルの貸し会議室で開催されました。
まずは出席者は1Fの受付で自分の名札とTシャツを受け取ります。QtCSの面白いところは、これらの作業をスタッフだけでなく出席者たちも自ら行っているところでしょうか。イベントのアットホームなところと主催者側と出席者側の同列なところが垣間見える一幕です。
受付にあるQtCSのパネル
まずは全員出席によるオープニングセッションから始まります。イベントのコーディネーターであるTero Kojo氏から各スポンサーへの謝辞が述べられ、諸注意の連絡を行います。
次に、Froglogic社のCEOであるHarri Porten氏がスポンサー代表として紹介され、簡単な会社紹介が行われました。
その後は Qt Project のチーフメンテナであるLars Knoll氏の登場です。まずはQtの20周年を祝って、この20年のロゴの変遷がムービーで紹介されました。初期のロゴなどはおなじみのQtグリーンは使われていないモノクロのもので、初めて見る人も多かったのではないでしょうか。それらのロゴはQtの20周年記念ページ にも掲載されてます。
続いて、この1年ほどの状況が紹介されます。この1年の大きな出来事の1つがライセンスです。Qt 5.4からライセンスにLGPLv3が追加され、今後は新たなモジュールのライセンスには LGPLv2 が適用されないことになっています。このLGPLv2からLGPLv3へのシフトはいわゆるTivo化などの問題への対応として、オープンソースの意義をより尊重するためのものになります。LGPLv3を採用することで、オープンソースへのコードによる直接的な還元と、商用版による金銭を通じた間接的な還元を得ることができ、Qtのエコシステムをより拡大させるためのより良いライセンスの選択であるとのことでした。
引き続いて、KDE Free Qt Foundationの現状について説明されました。KDE Free Qt FoundationはQtがまだオープンソースライセンスに準拠していないころに発足した組織で、Qtをオープンソースソフトウェアとして存続させ続けるためのKDEとTrollTech(後にはNokiaやDigia)との契約を含みます。The Qt Companyの立ち上げや現状を考慮して、対象となるプラットフォームの追加(すでにAndroidが追加されていますが)や、LGPLv3などを考慮した契約の更新が検討中で、QtCSではその内容についても議論する予定になっています。
コミュニティの紹介として、Qtへのパッチのコミット数を元にKDABやIntel、Woboqなどの会社が紹介されました。コミット数としてはThe Qt Companyが過半数を占めていますが、QtのパートナーであるKDAB、Qt CoreのメンテナであるThiago氏の所属するIntelなども十分に貢献していることが見て取れます。
The Qt Companyの現状についても紹介されました。The Qt Companyの財務状況についてはDigia社の報告の中に記載されていますが、2014年は赤字だったものの、2015年のQ1では収入が拡大しており、収支は改善してきているそうです。この原因としてはQtの商用版とオープンソース版のWebサイトをqt.ioに統合したことや、LGPLv3の導入などが考えられるということでした。商用版ライセンスのプラットフォームの内訳ではデスクトップ向けが依然として大きな収入源であり、組込み向けも急速に拡大しているとのことです。
これらを受けて、The Qt Companyではアプリケーション開発と組込み向けデバイスの作成(Qt for Device Creation)の2つを大きな柱として進めていくということでした。
ひと通りの現状説明が終わった後は、今回のQtCSのトピックが軽く紹介されました。
テクニカルではない(コードに関連しない)トピックでは、QtでのGPLライセンスの扱いについて、Webサイトの統合に関連して、商用版のバグレポートをオープンソース版のバグレポートと統合する件、一部で残っているqt-project.orgの機能をqt.ioへ移動するかどうか、コミュニティやエコシステムの拡大に関してなどが挙げられました。
テクニカル系ではサポートするプラットフォームの追加や廃止について、C++11/C++14といった新しい標準の利用について、パフォーマンスについて、CIのテストシステムについて、などの項目が挙げられました。
一通りの説明が終わった後は個別のセッションへと移ります。
注目のセッションから
ここからは出席したセッションからいくつかをピックアップしてレポートします。
Qt on Embedded Linux
Qtの組込みLinux向けのプラグインであるEGLFSのメンテナであるLaszlo Agocs氏がホストとなるセッションです。近年、Qtが最も伸びているプラットフォームの1つである組込みLinuxに関する議論が行われました。
「Qt on Embedded Linux」セッションの模様
まずはQt 5.5の新機能として、EGLFSの変更、libinputへの対応、GStreamer 1.0への対応などが紹介されました。その後に議論に入りましたが、このセッションで最もホットだった話題はYocto Projectに関するものでした。Yocto Projectは最近採用されるケースも増えてきて勢いを感じるプロジェクトです。YoctoでQtを使用したい場合にはmeta-qt5リポジトリにレシピがありますが、Qtはホスト用とターゲット用のそれぞれのバイナリを作成する必要があるためレシピが複雑になること、Yoctoでは環境変数を用いてSDKの切替を行うためQt Creatorからの利用が簡単ではないことなどから、お世辞にもQtとの相性が良いとは言いにくい状況です。
商用版のQt for Device CreationではYoctoのパッケージとQtのパッケージを別々にビルドすることでこの問題に対応していますが、Yocto側のレシピも協調して見直していくことが話題となりました。
Qt for Device Creationに関連して、同じく商用版のみの機能であるQt Quick 2D Rendererに関する議論や、パフォーマンスに関連してベンチマークセットの作成やその結果をとりまとめる作業などが話題になりました。
Resolution independence and HighDPI support
Qtの各プラットフォーム用プラグインであるQPAのメンテナのPaul O. Tvete氏のホストするセッションです。
MacBook Pro Retina、iPhone、iPadなどのApple社のRetina製品をきっかけとして、高解像度デバイスがAndroidやWindowsなどでも増えてきています。Qtでも5.0から徐々にHigh DPIへの対応を強化してきていますが、これまでは各プラットフォームごとに対応コードを実装していました。
Qt 5.6ではそれらのコードが一本化され、クロスプラットフォームな仕組みへと置き換わります。倍率を環境変数で指定する場合も、これまでのように整数だけでなく、( サポートの対象外にはなりますが)実数値で指定することもできるようになるようです。
High DPI関連については一段落ということになると思われますが、課題はまだまだ残っており、マルチ画面でそれぞれで倍率が異なる場合の対応や、元々解像度の低いデバイス向けの技術であるフォントヒントの扱いなどが挙げられました。
議論ではこの変化を歓迎するものの、環境変数だけでは無く、より柔軟にAPIで制御したいとの要望が出ていました。
また、Higi DPIに対応した場合、今のQtのようなピクセル単位の座標系ではアプリケーション側の実装が煩雑になる問題があります。そのため、Android の dp のような仮想ピクセル座標系の導入についても議論しました。仮想ピクセル座標系はアプリケーションの解像度をデバイスの物理ピクセルと分離することができるため複数の解像度向けのアプリケーションが書きやすくなります。
この場では仮想ピクセル座標系を導入する場合、どのような値を導入するのか(物理サイズの扱いなど) 、パフォーマンスへの影響、単位を含む式の扱いなどが話題となりました。
QML Runtime
Qt DeclarativeモジュールのメンテナであるAlan Alpert氏がホストするセッションです。
Qt 5にはqmlファイルを実行するためのコマンドとしてQt Quick 1専用のqmlviewerとQt Quick 2専用のqmlsceneがあります。また、QMLのユニットテスト実行用のqmltestrunnerコマンドも別に存在します。このセッションではそれらの専用コマンドをQML Runtimeと言うコマンドで置き換えることの提案がありました。QML RuntimeはすでにQtのリポジトリに含まれていて、qmlsceneと同等の動作が行える形にはなっています。qmlファイルを用いてカスタマイズが可能なため、Qt 3D用のqmlファイルが渡された場合に適切なウィンドウを作成するようにカスタマイズすることなどができるということでした。
セッションの中ではコマンドラインオプションやqmlviewerにある録画機能、qmltestrunnerとの置き換えの可能性などが話題となりました。現状では設定ファイルが1つしか無く、機能もドキュメントも十分ではありませんが、コンセプト的には柔軟性があり面白いツールですので、いずれかのタイミングでqmlsceneの代わりに標準的なコマンドとして扱われるようになるかもしれません。
Qt and Modern C++/Deprecating thing - modules, compilers, platforms/Long-term support Qt
これらのセッションはそれぞれが密接に関わり合っているため、まとめてレポートします。
「Qt and Modern C++」は、QtでC++11やC++14の新機能を使うことについてのセッションです。「 Deprecating thing - modules, compilers, platforms」は、古いプラットフォームやコンパイラなどをサポートの対象から外すことについて、「 Long-term support Qt」は、Qtにロングタームサポートなバージョンを導入することについてのセッションになります。
なぜこれらのセッションに関わりがあるかというと、サポートするプラットフォーム・コンパイラによって利用できる機能などが異なるため、サポートするプラットフォームがはっきりしなければ適切な機能が不明だからです。
「Qt and Modern C++」はLouai Al-Khanji氏がホストするセッションで、Qtで使用するC++11/C++14の機能について議論していきます。便利な機能については積極的に使用していきたい気持ちはあるものの、拙速な採用で使えないプラットフォームなどが出てこないように注意します。API(Core)部とライブラリ内部とでそれぞれ候補を出しますが、実際に採用していく前にはより詳細な調査を行い、先行して C++11の利用を始めているQt Creator側からの知見を元に決定し、Qt 5.7以降で導入していくことを決めて、セッションを終えました。
「Deprecating thing - modules, compilers, platforms」はLars Knoll氏のホストするセッションです。サポート対象から外すプラットフォームやコンパイラなどについて議論します。サポート対象を減らす理由としては、
(古いコンパイラではサポートしていない)C++11、C++14などの新機能を使いたい
有限のリソースを新しいプラットフォームに割り当てたい(Windows 10、OS X 10.11)
などがあります。
QNXやRed Hatなどはその場にプラットフォーム側の担当者も来ていたため、そちらの意見も聞きつつ詳細を詰めていく形です。これらの結果、Qt 5.6でQNX 6.5、Windows Embeddec Compact 7、OS X 10.7のサポートを外すことなどが決められました(※ ) 。
また、モジュールに関してもQt Quick 1, Qt Script, Qt WebKitなどのモジュールは非推奨モジュールとして、今後バイナリ配布の停止などを行っていく方針についても議論されました。
「Long-term support Qt」はQt CoreモジュールのメンテナであるThiago Macieira氏のホストするセッションで、Qtにロングタームサポート(LTS)を導入することに関して議論されました。
Qtでは現在半年ごとにマイナーバージョンアップを行っていますが、バグの修正は基本的に最新のマイナーバージョンに対してのみ行われます。このため、古いマイナーバージョンに存在するバグが問題となった場合、自力でパッチをバックポートするか、マイナーバージョンを上げる必要がありました。そこで、LTSとなるバージョンを導入してバグ修正を長期的に行おうというのが趣旨です。
この議論、昨年もあったようなのですが、LTSを導入するとなると必然的に対応するリソース(マンパワーとCIなどのテスト環境)も必要となるため、昨年中に実現することはありませんでした。そこで、改めて対応するバージョンの決定などが行われました。バージョンとしては、サポートプラットフォームが変更される前のQt 5.5が理想的ではありますが、現在利用しているCIシステムは効率が悪く、Qt 5.6に依存することになりますが開発中の新しいCIシステムに早急に切り替えたいこともあり、Qt 5.6を最初のLTSにすることに決まりました。サポートの期間は18ヵ月になります。
また、UbuntuのLTSリリースとも協力していきたいということになりました。Linux 系のディストリビューションとしては RHEL(Red Hat Enterprise Linux) 、SLES(SUSE LINUX Enterprise Server)の名前も挙がりましたが、これらはサーバ向けであるためQtとの同期は重要視していないということでした。
ちなみに、このLTSの議論は当日になって決定したセッションであり、また、直前の「Deprecating thing - modules, compilers, platforms」も深く関係していることもあって、この二つが連続するように調整されました。こういった所がQtCSのアンカンファレンススタイルらしいところです。
「Long-term support Qt」が今年のQtCS最後のセッションでしたが、その後は簡単なクロージングセレモニーがありました。といっても、Lars氏による締めの挨拶程度で、QtCSへの参加の謝辞とKDEのイベントであるAkademyとまた共同開催することを検討していること、また来年もお会いしましょうと伝えてQtCSは終了しました。
レポートした以外にもさまざまなセッションが開催されました。それぞれの概要やレポートがQtCSプログラムのページ からたどれますので、興味がある方はご参照ください。
セッション以外の楽しみ
QtCSは今後のQtに向けての話し合いがその主題ですが、もう1つ重要なのが参加者同士の交流です。今回のQtCSでは開催前日にプレイベント、初日の夜にパーティが開催されました。
プレイベント
QtCSの開催前日となる6月5日の夕方にThe Qt Companyのオフィスでプレイベントが開催されました。特別なセレモニーなどはありませんでしたが、TrollTechからNokia、Digia、The Qt Companyと会社は変われど常にQt開発の中心となってきたオフィスの中でThe Qt Companyの社員やQtCSの参加者達とで歓談を楽しみます。
ちなみに、オフィスは1~2人ごとにガラス張りの個室が割り当てられている作りで、広いオフィス内の移動にはキックスケーターを使用している人もいます。テーブルフットボールの置いてある部屋があったり、廊下にはビリヤードのテーブルがあったりと一般的な(日本の?)会社のオフィスとは全く違う雰囲気があります。
この場では、折戸さんからThe Qt CompanyのCTOであるLars Knoll氏に著作の3冊が贈呈され、後日The Qt Companyのライブラリに置かれることになりました。ちなみに、これらの本はプレイベントの間、多くの参加者によって回覧され大きく話題になりました。特に自費出版の内の1冊はおそらく世界でただ1つのQt Installer Frameworkに関する書籍ということで、メイン開発者の一人であるKai Koehne氏などは非常に喜んでいました。
折戸さんと贈呈された書籍を持つLars氏
オフィスでしばらく歓談した後は近くの公園に移動してバーベキューが開催されました。すぐそばの川には鴨が泳いでいるような素晴らしい場所でオフィスから運んできたBBQセットを囲みながら話が弾みます。
パーティ
初日の夜にはオスロ市内のレストランを借り切ってパーティが開催されました。広いフロアとステージを持つショーも開催されるような会場でしたが、ほとんどの人たちは日の当たるバルコニーとその前の廊下で歓談していました。この前の週がほとんど雨で最高気温が10度以下になるような日も多かったそうなので、いい天気だと太陽にあたっていたいのかもしれません。北欧の初夏らしく、夜の10時を過ぎても太陽がまだ沈んでいないのは、時差ぼけ以上に時間間隔を狂わせますが。
パーティではQtの20周年とオスロ開催ということもあってか、QtCSの出席者だけではなく、以前にQtに関わっていた人たちも多数訪れていました。その中にはQtの初期の開発者でTrolltechの創設者であるEirik氏とHaarvard氏もいて、同窓会のような雰囲気にもなっていました。
パーティの模様
まとめ
初回となる2011年以来、久しぶりに参加したQtCSでしたが、公開前のプライベートなソースを元にしたセッションが開催されたりもして、非常に勉強になりました。
QtCSのメリットは、普段メーリングリストやIRCなどのテキストベースでしかやりとりしていない人たちと直接話ができることです。セッションの間に関係者を捕まえてちょっとした疑問点を尋ねてみるということも比較的気楽にせきます(私がした質問は結果としてはすべて開発者が認識済みの問題点だったりしましたが) 。
ただ、セッション自体は会議室が3部屋しか無かったため、数十人で行われるセッションも多く、割り込むタイミングや言語の壁的なところで、セッション中の発言は少しハードルが高いとも感じました。
QtCSは距離や言葉などの関係で日本からの参加は決して容易ではありませんが、Qtをより深く理解しよう、Qtをより良いものにしようと思う人にはぜひ参加して欲しいイベントです。旅費等を補助するスポンサー制度もあり、今回折戸さんはそちらを活用されていました。来年のQtCSへの参加に向けて、Qtに貢献してみませんか。