W swoim czasie robię dużo rozwoju. Te projekty, nad którymi pracuję, służą wyłącznie do zabawy i nauki (do tej pory). Często robię programowanie w Javie z Maven, ale jestem również znany z tego, że dabble w .NET i Python. Wszystkie projekty, nad którymi pracuję, wykorzystują licencje typu open source, chociaż większość z nich nie znajduje się w publicznych repozytoriach kodów.
groupId
Programowanie w Javie / Maven wymaga ode mnie używania unikalnej (np. „Com.mydomain”) i unikalnej package
(katalogowej) struktury, zwykle zawierającej groupId
podczas gdy programowanie .NET zachęca do unikatowości, namespaces
w której używam podobnych konwencji do package
koncepcji Java . Aby zapewnić unikalność, zwykle używam tylko jednej z moich nazw domen z odwróconymi częściami (np. „Ca.jessewebb”); Uważam, że jest to bardzo powszechna praktyka.
Jestem na początkowym etapie tworzenia nowego projektu Java / Maven typu open source (nazwijmy go „newproj”) i chciałbym umieścić go na GitHub. Moja nazwa użytkownika na GitHub jest „jessewebb”, więc to daje mu adres URL, takich jak: https://github.com/jessewebb/newproj
. Nie chcę zawracać sobie głowy rejestracją nazwy domeny „newproj.com”, dlatego postanowiłem użyć „ca.jessewebb” i „ca.jessewebb.newproj” odpowiednio jako groupId
i package
.
Przyszło mi do głowy, że obecność mojej osobistej tożsamości w kodzie i jako części domu projektu (w adresie URL GitHub) prawdopodobnie spowoduje, że potencjalny współpracownik pomyśli dwa razy o zaangażowaniu się w mój projekt. To jest problem, nie chcę, żeby to był mój projekt. Wolałbym, gdybym mógł zamiast tego przekazać wiadomość, że nie jestem właścicielem projektu. Teraz, szczerze mówiąc, tak naprawdę nie jest to wielka sprawa, ponieważ wątpię, aby moje projekty wzbudziły duże zaangażowanie społeczności, ale widzę to również jako kolejny powód, aby unikać jakiejkolwiek możliwości odstraszania potencjalnych współpracowników.
Na inny przykład stworzyłem projekt Google Code kilka lat temu (nazwijmy go „oldproj”). Kiedy tworzyłem projekt, wiedziałem, że będę go hostować w Google Code, więc użyłem nazwy groupId
i pakietu „com.googlecode.oldproj”, która jest odwrotnością domyślnej nazwy domeny, którą Google Code udostępnia przy każdym nowym projekcie. To okazało się niezbyt dobrym pomysłem; rok później przeniosłem kod na inne repozytorium i musiałem zmienić nazwy tych identyfikatorów (no cóż, nie miałemale ...). W tym czasie nie posiadałem żadnych nazw domen i ostatecznie kupiłem nazwę domeny „oldproj.com” i używałem jej. Podobało mi się to, ponieważ nadawało projektowi własną tożsamość i nie wstawiałem wszędzie swojego nazwiska na kodzie. Mógłbym równie łatwo zarejestrować nazwę domeny „jessewebb.ca” i użyć nazwy „ca.jessewebb.oldproj” jako nazwy pakietu, ale nie zrobiłem tego, ponieważ miałem wtedy te same obawy.
Więc moje pytanie brzmi ...
Jak mogę uniknąć używania własnych nazw (domen) podczas tworzenia projektów typu open source, jednocześnie zachowując unikalność pakietów / przestrzeni nazw?
Ponieważ projekty nabierają tempa, warto zarejestrować nazwy domen, ale wydaje się to głupie i marnowanie pieniędzy na robienie tego wcześniej. Zdaję sobie sprawę, że tak naprawdę nie muszę posiadać nazwy domeny, aby użyć jej w kodzie, ale wydaje mi się, że jest to złe i może w międzyczasie doprowadzić do tego, że spodoba ci się. Co inni ludzie robią z tym dylematem? Czy istnieją przykłady popularnych (szeroko używanych, dużych społeczności itp.) Projektów open source, które zawierają tożsamość oryginalnego dewelopera jako część własnego identyfikatora (identyfikatorów)?
źródło
Odpowiedzi:
W moich projektach nadaję im nazwę, ale niekoniecznie domenę. Więc moje nazwy pakietów (i przestrzenie nazw) to zwykle po prostu „nazwa_projektu.libraryname”, niezależnie od tego, gdzie znajduje się kod.
Jestem przyzwyczajony do .NET, gdzie handel jest dość swobodny.
źródło
Nie pamiętam, gdzie go widziałem, ale widziałem, że sugeruje użycie takiej struktury:
YourIdentifier może być czymś w rodzaju domeny, którą posiadasz, (dość unikalnym) aliasem internetowym itp. Nazwa komponentu jest pomijana dla „podstawowego” kodu produktu. Na przykład mam małą platformę MVC o nazwie BarelyMVC, więc mam w niej takie przestrzenie nazw:
itp. itp. Twój alias online jest w większości przypadków unikalny, aby uniknąć konfliktów między innymi programistami
Jeśli boisz się użyć własnego aliasu online, utwórz dla siebie „etykietę”. Nie musi być formalnie zarejestrowany jako firma ani nic (ani nawet domena). Na przykład popularna
Json.Net
biblioteka używa przestrzeni nazwNewtonsoft.Json
. Oczywiście opiera się na nazwisku autora „newton”, ale nie sądzę, żeby ktokolwiek naprawdę się tym przejmował. A jeśli masz zarejestrowaną firmę, możesz oczywiście z niej skorzystać. Na przykład większość publicznych interfejsów API produkowanych przez moją firmę ma przestrzenie nazw zaczynające sięPreEmptiveSolutions
od nazwy firmyźródło
Nie ma reguły, że nazwy pakietów Java lub przestrzenie nazw .NET są nazwami domen. Nie ma nawet wymogu, aby były wyjątkowe, chociaż z pewnością jest to dobry pomysł. Właściwie uważam, że miałeś rację
com.googlecode.oldproj
, a w twoich butach nie zmieniłbym się, gdyby niecom.oldproj
próbowałem uzyskać reklamy nowej nazwy domeny.źródło
com.googlecode.oldproj
, dlaczego uważasz, że to był dobry pomysł? Patrząc z perspektywy czasu, pomyślałem, że to trochę głupie wiązać kod z dostawcą hostingu.