Como evitar o uso de meu próprio nome nos identificadores, pacotes ou espaços para nome dos projetos de código aberto que eu crio?

15

Eu desenvolvo muito em meu próprio tempo. Esses projetos em que trabalho são todos apenas para diversão e aprendizado (até agora). Geralmente desenvolvo Java com o Maven, mas também sou conhecido por mexer no .NET e Python. Todos os projetos nos quais 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 Java / Maven exige que eu use uma estrutura única groupId(por exemplo, "com.mydomain") e uma estrutura exclusiva package(diretório), geralmente contendo o groupIdtempo namespacesem que o desenvolvimento .NET incentiva a única na qual eu uso convenções semelhantes ao packageconceito Java . Para garantir a exclusividade, geralmente 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" para que isso irá dar-lhe uma URL como: https://github.com/jessewebb/newproj. Não quero me preocupar em registrar o nome de domínio "newproj.com", por isso decidi usar "ca.jessewebb" e "ca.jessewebb.newproj" como groupIde package, respectivamente.

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

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

Então minha pergunta é ...

Como evitar o uso de meus próprios nomes (domínio) ao criar projetos de código aberto, mantendo a exclusividade dos pacotes / espaços para nome?

À medida que os projetos ganham mais impulso, faz sentido registrar os nomes de domínio, mas parece bobagem e um desperdício de dinheiro fazer isso mais cedo. Percebo que, na verdade, não tenho que possuir o nome de domínio para usá-lo no código, mas isso parece errado e pode levar a que um invasor o pegue debaixo de você enquanto isso. O que outras pessoas fazem sobre esse dilema? Existem exemplos de projetos de código aberto populares (amplamente utilizados, comunidade grande, etc.) que contêm a identidade do desenvolvedor original como parte de seus próprios identificadores?

Jesse Webb
fonte
2
Whoa, bastante longo, mas ainda é uma boa pergunta!
Marcel
1
Use um UUID em seus pacotes / namespaces? ;-)
Jeroen

Respostas:

5

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

Estou acostumado ao .NET, onde isso é tratado livremente.

Marcel
fonte
Acho que é uma boa solução quando não tenho ou (imediatamente) quero um domínio registrado para o projeto. Eu poderia até fazer isso quando tenho um domínio. Isso ajudaria a garantir que eu usasse nomes exclusivos de projetos, o que nunca é uma coisa ruim. Provavelmente vou aceitar esta resposta em breve, a menos que surjam outras melhores. Obrigado!
Jesse Webb
Sim, programadores .NET fazem isso, mas não é uma boa ideia. Se o nome do projeto for uma palavra inventada, pode funcionar bem, mas eu gostaria de ter um dólar por cada projeto "Downloader" ou "Browser" que eu já vi.
Ross Patterson
1
Comecei a usar essa estratégia para todos os meus projetos. Eu venho com um nome exclusivo para os projetos, quase um nome de código (perdoe o trocadilho), e o uso para meus pacotes / espaços de nome. Economiza a necessidade de me preocupar com nomes de domínios, pelo menos até a hora em que eu quero um.
Jesse Webb
2

Não me lembro onde o vi, mas vi sugerido o uso de uma estrutura como esta:

YourIdentifier.YourProduct.YourComponent

YourIdentifier pode ser algo como um domínio que você possui, seu alias de internet (bastante exclusivo), etc. O nome do componente é deixado de fora para o código "principal" do seu produto. Por exemplo, eu tenho uma pequena estrutura MVC chamada BarelyMVC, então 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 online, crie um "rótulo" para si mesmo. Não precisa ser formalmente registrado como uma empresa ou qualquer coisa (ou mesmo um domínio). Por exemplo, a Json.Netbiblioteca popular usa o espaço para nome Newtonsoft.Json. Obviamente, é baseado no sobrenome dos autores "newton", mas não acho que alguém realmente se importe com isso. E se você possui uma empresa formal registrada, é claro que pode usá-la. A maioria das APIs públicas produzidas por minha empresa, por exemplo, tem namespaces começando com PreEmptiveSolutions, o nome da empresa

Earlz
fonte
1
Muito comum no mundo .NET, onde a coisa de nome de domínio com versões anteriores nunca realmente pegou. E desde que "YourIdentifier" seja realmente único, ele funciona. Mas mesmo Newtonsoft é acidentalmente único - James Newton-King não administra uma empresa assim, e sua marca só existiria na Nova Zelândia se ele o fizesse.
Ross Patterson
1

Não há regra de que nomes de pacotes Java ou espaços de nomes .NET sejam nomes de domínio. Não existe nem um requisito de que sejam únicos, embora essa seja certamente uma boa ideia. Na verdade, acho que você estava certo em usar com.googlecode.oldproj, e no seu lugar, eu não teria mudado a com.oldprojmenos que estivesse tentando obter publicidade para o novo nome de domínio.

Ross Patterson
fonte
Sei que não existe uma regra que você precise usar nomes de domínio, mas acho que é uma prática muito comum, pelo menos no mundo Java e .NET, apenas porque ajuda a garantir a exclusividade. Além disso, você disse que achava que eu estava certo em usar com.googlecode.oldproj, por que você acha que foi uma boa ideia? Em retrospecto, pensei que era meio bobo vincular o código ao provedor de hospedagem.
Jesse Webb
1
O ponto não é que ele o vincula a algum provedor de hospedagem, o ponto é que ele é um identificador convencionalmente único que é peculiar a este projeto. O que é tudo "com.jesseweb.oldproj" é, tecnicamente. Então, como você não queria que seu nome fosse anexado, foi uma boa decisão. Pacotes Java e namespaces .NET não devem ser sinalizados direcionando você para um site de download etc. , apenas um identificador exclusivo por convenção.
Ross Patterson