最近リリースされた「Duet Display」は、ラグゼロでiPadをセカンドディスプレイ化できるアプリとして人気を集めています(現在日本のiPad有料アプリランキングで1位)。
公式サイトで「元Appleの従業員が開発」と説明されていることから、Appleが内部的な情報を提供して高速化が実現されているようにも思えますが、はたしてこれは正しいのでしょうか。
実はDuet Displayの機能は、現在公開されているオープンソースソフトを組み合わせれば実現可能なのかもしれません。Duet Displayを実現する上で使われているであろうオープンソースライブラリを解説した技術ドキュメント「DuetDisplay and Unattributed Open-Source」が公開され話題となっています(Hacker News)。
概要: VNC over TCP over UDPのようなもの?
技術ドキュメントの筆者Deanm氏は、Duet Displayのドライバーの仕組みを、「セカンドディスプレイをフレームバッファとして生成し、フレームバッファのピクセルコンテンツをキャプチャして圧縮した後(CocoaSplitを使用)、iOSデバイスにiTunes TCP over USB (PeerTalkを使用)で送信している」と推測しています。
いわばVNC over TCP over UDPのようなもので、DisplayLinkのような実装ではないため、ゼロラグで60FPSはちょっと正直ではないかも、とも。
オープンソースライブラリ
次にCocoaSplitやPeerTalkを含め、Duet Displayで使用されていると思われるオープンソースライブラリをリストアップし、実際に使われている証拠となる情報が提示されています。
PeerTalk
MacとiOSがUSB接続で通信するためのCocoaライブラリ(GitHub)。iTunesのusbmuxを使用しているため、同ライブラリを使ったアプリはApple Storeで審査が通らないと目されていました。Duet Displayが審査を通過したことで、PeerTalkを利用アプリが、今後他にもにもリリースされる可能性がでてきました。
Deanm氏は、DuetUSBChannelをディスアセンブルし、PeerTalkのバージョンとほぼ中身が同じであることを指摘しています。
CocoaSplit
ディスプレイをキャプチャしストリーミングするためのライブラリ(GitHub)。
Duet.appに含まれるshaderがCocoaSplitのshaderととても似ていることを指摘しています。
GPUImage
オープンソースのGPUベースのイメージ/動画フレームワーク(GitHub)。
GPUImageFramebufferがDuet.appで確認できるとしています。
ドライバー
さらにドライバーに関して、深くは調査していないもののEWProxyFramebufferが使われているのではないか(これに関しては証拠がないらしい)とも述べています。
まとめ
Duet Displayに内部関係者しか知り得ない黒魔術的な何かが使われているわけではなく、すでに公開されているオープンソース技術を組合せて実現されている可能性があることが分かりました。Duet Displayにクレジット表示がないことが議論を呼んでいますが、開発者からすると新たな可能性が広がる情報として有効活用できるかもしれません。