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 groupId
tempo namespaces
em que o desenvolvimento .NET incentiva a única na qual eu uso convenções semelhantes ao package
conceito 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 groupId
e 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 groupId
nome 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?
fonte
Respostas:
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.
fonte
Não me lembro onde o vi, mas vi sugerido o uso de uma estrutura como esta:
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:
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.Net
biblioteca popular usa o espaço para nomeNewtonsoft.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 comPreEmptiveSolutions
, o nome da empresafonte
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 acom.oldproj
menos que estivesse tentando obter publicidade para o novo nome de domínio.fonte
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.