私は自分の時間の中で多くの開発をしています。私が取り組んでいるこれらのプロジェクトは、すべて(これまでのところ)楽しい学習のためだけのものです。私は通常、Java Mavenでの開発を行っていますが、.NETとPythonで手を出すことも知られています。私が取り組んでいるすべてのプロジェクトはオープンソースライセンスを使用していますが、それらのほとんどは公開コードリポジトリ。
Java/Maven開発では、一意のgroupId
(「com.mydomain」など)と一意のpackage
(ディレクトリ)構造を使用する必要があります。通常、.NETの間にgroupId
が含まれています開発では、一意のnamespaces
を推奨しています。ここでは、Java package
の概念と同様の規則を使用しています。一意性を確保するために、通常、ドメイン名の1つをパーツが逆になっている(例: "ca.jessewebb");これは非常に一般的な方法だと思います。
私は新しいオープンソースのJava/Mavenプロジェクト(「newproj」と呼ぶことにします)を作成する初期段階にあり、GitHubに配置したいと考えています。 GitHubのユーザー名は "jessewebb"なので、https://github.com/jessewebb/newproj
のようなURLになります。 「newproj.com」ドメイン名を登録したくないので、groupId
およびpackage
として「ca.jessewebb」と「ca.jessewebb.newproj」を使用することにしました。それぞれ。
コード内およびプロジェクトのホーム(GitHub URL内)の一部としての私の個人識別情報の存在は、潜在的な寄稿者が私のプロジェクトに関与することについて2度考えさせる可能性が高いことに気付きました。これは問題です。myプロジェクトにしたくありません。代わりに、私がプロジェクトを所有していないというメッセージを伝えることができればいいのですが。さて、正直に言って、私のプロジェクトがコミュニティの関与を獲得するのではないかと思うので、それほど大したことではありませんが、これもまたmore抑止の可能性を回避する理由の1つであると考えています。貢献者になろう。
別の例として、数年前にGoogle Codeプロジェクトを作成しました(「oldproj」と呼びましょう)。プロジェクトを作成したとき、Google Codeでホストするつもりだったので、groupId
とパッケージ名「com.googlecode.oldproj」を使用しました。これは、デフォルトのドメイン名Google Codeの逆ですすべての新しいプロジェクトを提供します。これはそれほど素晴らしいアイデアではないことがわかりました。 1年ほど後、コードを別のリポジトリに移動し、これらの識別子の名前を変更する必要がありました(そうではありませんhaveに変更しました)。 。)。当時、私はドメイン名を所有しておらず、ドメイン名「oldproj.com」を購入して使用していました。プロジェクトに独自のアイデンティティを与え、どこにでもコードに自分の名前を刻印しなかったので、私はこれが好きでした。 「jessewebb.ca」ドメイン名を簡単に登録し、「ca.jessewebb.oldproj」をパッケージ名として使用することもできましたが、当時も同じ問題があったため、使用しませんでした。
だから私の質問は...
パッケージ/名前空間の一意性を維持しながら、オープンソースプロジェクトを作成するときに自分の(ドメイン)名を使用しないようにするにはどうすればよいですか?
プロジェクトの勢いが増すにつれ、ドメイン名を登録することは理にかなっていますが、これを先に行うのは愚かでお金の無駄のようです。実際にコードで使用するためにドメイン名をownする必要はないことを理解していますが、それは間違っていると感じ、その間、不法占拠者があなたの下からそれをひったくる可能性があります。このジレンマについて他の人はどうしますか?独自の識別子の一部として元の開発者のIDを含む人気のある(広く使用されている、大規模なコミュニティなど)オープンソースプロジェクトの例はありますか?
私のプロジェクトでは、名前を付けていますが、必ずしもドメインではありません。したがって、コードがホストされている場所に関係なく、私のパッケージ名(および名前空間)は通常、単に "projectname.libraryname"です。
私はこれが非常に自由に操作される.NETに慣れています。
どこで見たのか思い出せませんが、次のような構造を使用するよう提案されているのを見ました。
YourIdentifier.YourProduct.YourComponent
YourIdentifierは、所有しているドメイン、(かなり一意の)インターネットエイリアスなどのようなものにすることができます。コンポーネント名は、製品の「コア」コードでは省略されています。たとえば、BarelyMVCという名前の小さなMVCフレームワークがあるため、次のような名前空間があります。
Earlz.BarelyMVC
Earlz.BarelyMVC.Authentication
Earlz.BarelyMVC.Caching
etc etc.ほとんどの場合、オンラインエイリアスは他の開発者間の競合を避けるために十分にユニークです
独自のオンラインエイリアスを使用するのが怖い場合は、自分用の「ラベル」を作成してください。会社または何か(またはドメイン)として正式に登録する必要はありません。たとえば、人気のあるJson.Net
ライブラリは名前空間を使用しますNewtonsoft.Json
。それは明らかに著者の姓「ニュートン」に基づいていますが、誰もそれを本当に気にかけているとは思いません。そして、正式な会社を登録している場合は、もちろんそれを使用できます。たとえば、私の会社が作成したほとんどのパブリックAPIには、会社名であるPreEmptiveSolutions
で始まる名前空間があります。
Java=パッケージ名または.NET名前空間がドメイン名であるというルールはありません。それらが一意であるという要件さえありませんが、それは確かに良いアイデアです。実際には、 com.googlecode.oldproj
を使用してください。新しいドメイン名を宣伝するつもりでない限り、私はcom.oldproj
に切り替えなかったでしょう。