開発者への HOWTO
これからお伝えすることは、gtk-gnutella に関して何か作業を始めてみたいというどんな方にも当てはまります:
- ソースコードを御覧下さい: 理解してみたい機能を一つ選んで、その実行過程を追っていって下さい。コードを巡回するには、あなたのお好きなエディタの "tags" モードを使って下さい。相互参照させるには "cscope" のようなツールを使います。
- コードに何らかの変更を加える前に、doc/devguide/STYLE を暗記して下さい。重要なことですが、私達はソースコードを読み易くするため統一されたコード記述様式を利用しています。私達 (ほとんど私ですが) が採用したコード記述様式は決して独断的なものではありません: この世界で最もよく使われているものです。
- Glib の基本を学んで下さい: リストとハッシュテーブルがそうです。これらはあらゆる場所で使用されています。I/O 関係も知っておいた方がよいですが、最初に習得する程の重要性はありません。
- 最後に大事なことを言いますが、Gnutella の中核部に関する作業をご希望なら Gnutella プロトコル自体についての学習と理解、加えて HTTP/1.1 の仕様も習得する必要があります。
- 小さな機能の追加/バグ修復から始めて下さい。コード自体は複雑ではありませんが、データ構造はそうではありません、しかもそれらの関係は実にトリッキーです。
私達の前には実に大きなプロジェクトが横たわっています:
- タイガーツリー・ハッシュの統合。
- 共有されているファイル (オーディオを例にすると、その種類、長さおよびビット速度、ビデオなら、そのコーデックの種類、長さ、画面での解像度。画像なら、種類 (jpg, gif) およびサイズ等...) のメタデータの収集。
- XML クエリーのサポート、これで集められたメタデータで多岐に渡る検索が可能になります。
- magnet: URI サポート: gtk-gnutella で magnet: を扱えるようにします。
- 中核部のプロセスと GUI プロセスの分割。
- ログ作成レイヤーの再設計、これで様々なサブシステムの異なるログを別々に分けます。利用者が理解でき、それに関して何をすればよいのか分かる警告のみを届けるようにします。
- SourceForge に記載されている機能のリクエストの箇所をざっと読んで、私達が何か忘れていないか確認して下さい。;-)
- 文書。とにかく文書が足りません。
Gnutella の中核部分の開発に参加したいなら、GDF (Gnutella 開発フォーラム) にも登録する必要があります。
同様に GDF の "Files" の項目にある すべての 文書、および gtk-gnutella のソースの doc/ 以下にある文書に精通するようにして下さい。もっとも週末にそれをする必要はありません ;-) しかし最低一度は目を通して下さい。
まず初めに、あなたがした変更はメールで送るようにして下さい。これらの差分を作成するには "svn diff" が好まれます。何回か出来の良いパッチを送って、コードに馴れてきたのなら、書き込みモードで直接 CVS にアクセスすることが認められるでしょう。
もうお気付きでしょうが、私達が求める水準はかなり高いです。通常、動作しないものは CVS にコミットしません。ここで言う "動作" の意味とは、何も悪いことがないかを確認するために、何日かの妥当なテストがなされていることを指します。
これだけ書かれた後でなお何かやってみたいと思うのでしたら、あなたは素晴らしい事をやってのけるのに必要なもの全てを備えているはずです。実に素晴らしい。また、言うまでもなく "開発者チーム" に大歓迎されるでしょう。
以下の開発者と共に作業を楽しんでいることを付け加えたいと思います:
言うまでもないのですが Richard は実に驚くべき貢献者です。いつもその実装のレベルの高さで驚かせます。 彼は最近プロジェクトの "副管理者" に格上げされています (*私* はこれらの階級的な区別を気にしないんですが、彼らは常にレジュメに関して細かいんです)。
Vidar, 彼は多元ダウンロード (Swarming) のコードを寄こしてくれました。読みこなして進化させられるようになるまで、正味一ヶ月かかりました。 これがその複雑さと、彼の貢献度合いの多くを物語っています。本当にすごい仕事です。
Christian Biere, 彼は最近参加しました、はとても便利なパッチを作成しています。ここで私が述べている事に関してもっと詳しいコメントを付けられるかもしれません。また彼のもっと多くの経験について、どのように何とかしてソースコードから学んだかを、何でもあなたに伝えられるかもしれません。
すべての開発者は IRC (freenode.net) の #gtk-gnutella に参加しています、また、実を言うと私達はみんな同じ時間帯にいるヨーロッパ人です!
私達のエンドユーザーの利益のために、よりたくさんの事を少しの時間で出来るよう、開発チームの人数が増えるのを楽しみにしています!
Raphael