Comment éviter d'utiliser mon propre nom dans les identifiants, packages ou espaces de noms des projets open source que je crée?

15

Je fais beaucoup de développement dans mon temps. Ces projets sur lesquels je travaille sont tous juste pour le plaisir et l'apprentissage (jusqu'à présent). Je fais couramment du développement Java avec Maven mais je suis également connu pour expérimenter en .NET et Python. Tous les projets sur lesquels je travaille utilisent des licences open source, bien que la plupart d'entre eux ne figurent sur aucun référentiel de code public.

Le développement Java / Maven nécessite que j'utilise une structure unique groupId(par exemple "com.mydomain") et unique package(répertoire), contenant généralement le groupIddéveloppement while .NET encourage unique namespacesdans lequel j'utilise des conventions similaires au packageconcept Java . Pour garantir l'unicité, j'utilise généralement l'un de mes noms de domaine avec les parties inversées (par exemple "ca.jessewebb"); Je pense que c'est une pratique très courante.

Je suis dans les premières étapes de la création d'un nouveau projet Java / Maven open source (appelons-le "newproj") et je voudrais le mettre sur GitHub. Mon pseudo sur GitHub est « jessewebb » si cela lui donnera une URL comme: https://github.com/jessewebb/newproj. Je ne veux pas déranger l' enregistrement du nom de domaine « newproj.com » alors j'ai décidé d'utiliser « ca.jessewebb » et « ca.jessewebb.newproj » comme groupIdet package, respectivement.

Il m'est venu à l'esprit que la présence de mon identité personnelle dans le code et dans le domicile du projet (dans l'URL GitHub) incitera probablement un contributeur potentiel à réfléchir à deux fois avant de s'impliquer dans mon projet. C'est un problème, je ne veux pas que ce soit mon projet. Je préférerais que je transmette plutôt le message que je ne suis pas propriétaire du projet. Maintenant, en toute honnêteté, il est vraiment pas un gros problème parce que je doute mes projets recueilleront participation beaucoup communautaire mais je vois aussi cela comme encore plus d'une raison d'éviter toute possibilité de dissuader les cotisants-être.

Pour un autre exemple, j'ai créé un projet Google Code il y a quelques années (appelons-le "oldproj"). Lorsque j'ai créé le projet, je savais que j'allais l'héberger sur Google Code, j'ai donc utilisé le groupIdnom de package et "com.googlecode.oldproj", qui est l'inverse du nom de domaine par défaut que Google Code fournit à chaque nouveau projet. Cela s'est avéré être une idée pas si géniale; un an plus tard, je déplacé le code à un autre repo et je devais renommer ces identifiants (bien que je n'aimais ...). À l'époque, je ne possédais aucun nom de domaine et j'ai fini par acheter le nom de domaine "oldproj.com" et je l'ai utilisé. J'ai aimé cela car cela donnait au projet sa propre identité et je n'apposais pas mon nom sur le code partout. J'aurais pu tout aussi facilement enregistrer le nom de domaine "jessewebb.ca" et utiliser "ca.jessewebb.oldproj" comme nom de package, mais je ne l'ai pas fait car j'avais aussi les mêmes préoccupations à l'époque.

Donc ma question est ...

Comment puis-je éviter d'utiliser mes propres noms (de domaine) lors de la création de projets open source tout en conservant l'unicité des packages / espaces de noms?

Au fur et à mesure que les projets prennent de l'ampleur, il est logique d'enregistrer les noms de domaine, mais cela semble idiot et une perte d'argent de le faire plus tôt. Je me rends compte que je n'ai pas vraiment besoin de posséder le nom de domaine pour l'utiliser dans le code, mais cela ne va pas et peut conduire à un squatter qui vous l'arrache entre-temps. Que font les autres à propos de ce dilemme? Existe-t-il des exemples de projets open source populaires (largement utilisés, grande communauté, etc.) qui contiennent l'identité du développeur d'origine dans le cadre de ses propres identifiants?

Jesse Webb
la source
2
Whoa, assez long, mais toujours une bonne question!
Marcel
1
Utilisez un UUID dans vos packages / espaces de noms? ;-)
Jeroen

Réponses:

5

Dans mes projets, je leur donne un nom mais pas forcément un domaine. Ainsi, les noms de mes packages (et espaces de noms) ne sont généralement que "projectname.libraryname", quel que soit l'endroit où le code est hébergé.

Je suis habitué à .NET où cela est géré assez librement.

Marcel
la source
Je pense que c'est une bonne solution lorsque je n'ai pas ou que je veux (immédiatement) un domaine enregistré pour le projet. Je pourrais même le faire quand j'ai un domaine. Cela aiderait même à s'assurer que j'utilise des noms de projets uniques, ce qui n'est jamais une mauvaise chose. J'accepterai probablement cette réponse bientôt, à moins que de meilleures ne se présentent. Merci!
Jesse Webb
Oui, les programmeurs .NET font cela, mais ce n'est pas une bonne idée. Si le nom du projet est un mot inventé, il peut fonctionner correctement, mais j'aurais aimé avoir un dollar pour chaque projet "Downloader" ou "Browser" que j'ai vu.
Ross Patterson
1
J'ai commencé à utiliser cette stratégie pour tous mes projets. Je trouve un nom unique pour les projets, presque un nom de code (pardonnez le jeu de mots), et je l'utilise pour mes packages / espaces de noms. Cela m'évite d'avoir à me soucier des noms de domaine, au moins jusqu'à ce que le moment arrive où j'en veux un.
Jesse Webb
2

Je ne me souviens pas où je l'ai vu, mais je l'ai vu suggéré d'utiliser une structure comme celle-ci:

YourIdentifier.YourProduct.YourComponent

YourIdentifier peut être quelque chose comme un domaine que vous possédez, votre alias Internet (assez unique), etc. Le nom du composant est laissé pour le code "de base" de votre produit. Par exemple, j'ai un petit framework MVC nommé BarelyMVC, donc j'ai des espaces de noms comme ceux-ci:

Earlz.BarelyMVC
Earlz.BarelyMVC.Authentication
Earlz.BarelyMVC.Caching

etc etc. Votre alias en ligne dans la plupart des cas est unique pour éviter les conflits entre les autres développeurs

Si vous avez peur d'utiliser votre propre alias en ligne, créez vous-même une "étiquette". Il n'a pas besoin d'être officiellement enregistré en tant qu'entreprise ou quoi que ce soit (ou même en tant que domaine). Par exemple, la Json.Netbibliothèque populaire utilise l'espace de noms Newtonsoft.Json. C'est évidemment basé sur le nom de famille des auteurs "newton", mais je ne pense pas que quiconque s'en soucie vraiment. Et si vous avez enregistré une entreprise officielle, vous pouvez bien sûr l'utiliser. La plupart des API publiques produites par mon entreprise, par exemple, ont des espaces de noms commençant par PreEmptiveSolutions, le nom de l'entreprise

Earlz
la source
1
Très courant dans le monde .NET, où le nom de domaine en arrière n'a jamais vraiment fait son chemin. Et tant que "YourIdentifier" est vraiment unique, cela fonctionne. Mais même Newtonsoft n'est qu'accidentellement unique - James Newton-King ne dirige pas réellement une telle entreprise, et sa marque de commerce n'existerait en Nouvelle-Zélande que si c'était le cas.
Ross Patterson
1

Il n'y a aucune règle selon laquelle les noms de packages Java ou les espaces de noms .NET sont des noms de domaine. Il n'est même pas nécessaire qu'ils soient uniques, bien que ce soit certainement une bonne idée. En fait, je pense que vous avez eu raison d'utiliser com.googlecode.oldproj, et à votre place, je ne serais pas passé à com.oldprojmoins que j'essaie d'obtenir de la publicité pour le nouveau nom de domaine.

Ross Patterson
la source
Je me rends compte qu'il n'y a pas de règle selon laquelle vous devez utiliser des noms de domaine, mais je pense que c'est une pratique très courante, au moins dans le monde Java et .NET, simplement parce qu'elle contribue à garantir l'unicité. De plus, vous avez dit que vous pensiez que j'avais raison d'utiliser com.googlecode.oldproj, pourquoi pensez-vous que c'était une bonne idée? Rétrospectivement, j'ai pensé qu'il était un peu idiot de lier le code au fournisseur d'hébergement.
Jesse Webb
1
Le fait n'est pas qu'il vous lie à un fournisseur d'hébergement, le fait est que c'est un identifiant conventionnellement unique qui est particulier à ce projet. Ce qui est tout "com.jesseweb.oldproj" techniquement. Donc, comme vous ne vouliez pas que votre nom y soit attaché, c'était une bonne décision. Les packages Java et les espaces de noms .NET ne sont pas censés être des panneaux vous dirigeant vers un site de téléchargement, etc. , juste un identifiant unique par convention.
Ross Patterson