Como posso evitar usar meu próprio nome nos identificadores, pacotes ou namespaces de projetos de código aberto que eu crio?

15

Eu faço muito desenvolvimento no meu próprio tempo. Esses projetos em que trabalho são todos apenas para diversão e aprendizado (até agora). Eu costumo fazer desenvolvimento Java com o Maven, mas também sou conhecido por se interessar por .NET e Python. Todos os projetos em que trabalho usam licenças de código aberto, embora a maioria deles não esteja em nenhum repositório de código público.

O desenvolvimento de Java / Maven requer que eu use uma estrutura exclusiva groupId (por exemplo, "com.mydomain") e exclusiva package (diretório), geralmente contendo groupId enquanto o desenvolvimento .NET incentiva namespaces exclusivo em que uso convenções semelhantes ao conceito Java package . Para garantir exclusividade, normalmente uso apenas um dos meus nomes de domínio com as partes invertidas (por exemplo, "ca.jessewebb"); Eu acredito que esta é uma prática muito comum.

Estou nos estágios iniciais da criação de um novo projeto Java / Maven de código aberto (vamos chamá-lo de "newproj") e gostaria de colocá-lo no GitHub. Meu nome de usuário no GitHub é "jessewebb", então isso dará a ele um URL como: https://github.com/jessewebb/newproj . Eu não quero me preocupar em registrar o nome de domínio "newproj.com" então decidi usar "ca.jessewebb" e "ca.jessewebb.newproj" como groupId e package , respectivamente.

Ocorreu-me que a presença da minha identidade pessoal no código e como parte da casa do projeto (na URL do GitHub) provavelmente faria com que um possível colaborador pensasse duas vezes antes de se envolver com o meu projeto. Este é um problema, eu não quero que seja o meu meu projeto. Eu preferiria, se pudesse, transmitir a mensagem de que não possuo o projeto. Agora, com toda a honestidade, isso realmente não é grande coisa, porque duvido que meus projetos consigam muito envolvimento da comunidade, mas também vejo isso como mais de uma razão para evitar qualquer possibilidade de dissuadir. potenciais colaboradores.

Por outro exemplo, criei um projeto do Google Code há alguns anos (vamos chamá-lo de "oldproj"). Quando criei o projeto, sabia que ia hospedá-lo no Google Code, então usei o groupId e o nome do pacote "com.googlecode.oldproj", que é o oposto do nome de domínio padrão que o Google Code fornece a cada novo projeto. Isto acabou por ser uma ideia não muito boa; mais ou menos um ano depois, mudei o código para um repositório diferente e tive que renomear esses identificadores (bem, eu não tinha para, mas ...). Na época, eu não possuía nenhum nome de domínio e acabei comprando o nome de domínio "oldproj.com" e o usei. Eu gostei disso porque deu ao projeto sua própria identidade e eu não estava carimbando meu nome no código em todos os lugares. Eu poderia facilmente ter registrado o nome de domínio "jessewebb.ca" e usado "ca.jessewebb.oldproj" como o nome do pacote, mas não o fiz porque eu também tinha as mesmas preocupações na época.

Então minha pergunta é ...

Como posso evitar usar meus próprios nomes (domínio) ao criar projetos de código aberto, mantendo a exclusividade de pacotes / namespaces?

À medida que os projetos ganham mais ímpeto, faz sentido registrar os nomes de domínio, mas parece tolo e um desperdício de dinheiro fazer isso mais cedo. Eu percebo que eu realmente não tenho que possuir o nome de domínio para usá-lo no código, mas isso parece errado e pode levar um invasor a roubá-lo de você nesse meio tempo. O que as outras pessoas fazem sobre esse dilema? Existem exemplos de projetos de código aberto populares (amplamente utilizados, grandes comunidades, etc.) que contenham a identidade do desenvolvedor original como parte de seu (s) próprio (s) identificador (es)?

    
por Jesse Webb 01.02.2013 / 22:17
fonte

3 respostas

5

Nos meus projetos, dou a eles um nome, mas não necessariamente um domínio. Portanto, os nomes dos meus pacotes (e namespaces) geralmente são apenas "projectname.libraryname", independentemente de onde o código está hospedado.

Estou acostumado com o .NET, onde isso é feito livremente.

    
por 01.02.2013 / 23:26
fonte
2

Não me lembro onde o vi, mas já sugeri usar uma estrutura como essa:

YourIdentifier.YourProduct.YourComponent

O YourIdentifier pode ser algo como um domínio que você possui, seu alias de internet (bastante exclusivo), etc. etc. O nome do componente é deixado para o código "principal" do seu produto. Por exemplo, eu tenho um pequeno framework MVC chamado BarelyMVC, então eu tenho namespaces como estes:

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

etc etc. Seu alias on-line na maioria dos casos é bastante exclusivo para evitar conflitos entre outros desenvolvedores

Se você tem medo de usar seu próprio alias on-line, crie um "rótulo" para você mesmo. Não precisa ser formalmente registrado como uma empresa ou qualquer coisa (ou até mesmo um domínio). Por exemplo, a popular biblioteca Json.Net usa o namespace Newtonsoft.Json . É obviamente baseado no sobrenome do autor "newton", mas eu não acho que alguém realmente se importe com isso. E se você tem uma empresa formal registrada, então é claro que você pode usar isso. A maioria das APIs públicas produzidas pela minha empresa, por exemplo, tem namespaces começando com PreEmptiveSolutions , o nome da empresa

    
por 02.02.2013 / 05:17
fonte
1

Não há nenhuma regra que os nomes de pacotes Java ou namespaces .NET sejam nomes de domínio. Não há sequer a exigência de que sejam únicos, embora isso seja certamente uma boa idéia. Eu realmente acho que você estava certo em usar com.googlecode.oldproj e, no seu lugar, eu não teria mudado para com.oldproj a menos que eu estivesse tentando obter publicidade para o novo nome de domínio.

    
por 02.02.2013 / 04:14
fonte