はじめに
以前、OSS の開発活動を可視化する WEB サービス を作っていた時、 OSS プロジェクト相互の開発者の乗り入れ状況が気になりました。例えば 仮想マシンを管理するライブラリ libvirt と仮想マシンエミュレータ qemu では相当の共通開発者がいることが予想されます。また qemu と Linux Kernel も関係が深いはずです。
これらの関係を可視化することで、OSS プロジェクト同士の関連性を読み取ってみましょう。関連性を探ることで、OSS 開発者のプロジェクト間の移動や、潮流まで理解できるかもしれません。
デモ
と、いうわけで、Chord Diagram を用いて OSS プロジェクト間の関連性を可視化してみました。対象としたOSSプロジェクトは、自分の趣味で選んだ以下のものです。
"couchdb libvirt mongo node ocaml perl postgresql redis swift virt-manager
cpython linux neutron nova otp php-src qemu riak systemtap"
下がその画像になります。
画像だけではいまいちわかりにくいので、インタラクティブなデモを用意しました。
こちらです : OSS Relationship Visualization
コードは GitHub で公開しています : Etsukata/ossrel
カーソルを各プロジェクトの弧に乗せると、そのプロジェクトと他プロジェクトの関連性のみが表示されます。
観察してみると、以下のことが読み取れました。
・仮想化(qemu, libvirt, virt-manager, OpenStack) は互いに関連性が強い
・Linux Kernel と qemu は関連性が強い
・OpenStack(nova, swift, neutron) 同士は関連性が強い
・Erlang/OTP と riak, couchdb は関連性が強い
・データベース(mongo, redis, riak, ...) と 仮想化(qemu, libvirt, ...) は関連性が薄い
・Ocaml とその他のOSS は関連性が薄い
などなど。
あらかた予想通りであることがわかりましたが、予想していなかったことがありました。
・ほとんどのプロジェクト同士は、関連性がある
複数のプロジェクトに貢献するのは、幅広い興味と知識が要求されるため、難しいことです。しかし、世の中にはそれが出来る人が多数いるんだなぁ、と感心させられました。
実装
実装について、簡単に記載します。
処理の流れは以下のようになっています。
1. 対象となるOSSの git commit logから author name を抜き出す
2. OSS プロジェクト同士(A, B)の関連性を以下の式で計算する
関連性 = sqrt(sum_{共通開発者} min(プロジェクトAへのコミット数, プロジェクトBへのコミット数))
平方根をとっているのは、Chord Diagram の見た目を整えるためです。
3. 関連性から隣接行列を生成する
4. 隣接行列を D3js に渡し、Chord Diagram で表示する。
ここでは、自分が選択したプロジェクト間のみ対象に可視化しましたが、可視化対象は自由に選択できます。ossrel を clone し、repos ディレクトリに対象となる git レポジトリを置き、run.sh を走らせるだけで、可視化できます。やり方は README.md に記載しました。
関連性が気になる OSS があったら、ぜひ可視化してみてください。
0 件のコメント:
コメントを投稿