Czy hierarchyid CLR jest oprogramowaniem typu open source?


9

Wbudowany hierarchyid to CLR, który przechowuje ścieżki w efektywnej formie binarnej i zapewnia inne przydatne funkcje.

Niestety, głębokość reprezentowanych ścieżek może być ograniczona i wynosi ~ 1427 dla drzewa binarnego. Chciałbym zwiększyć ten limit dla złożonej istniejącej aplikacji, która musi przekroczyć ten limit. Nie chcę zmieniać interfejsu tego typu. Nie jestem pewien, czy mógłbym zmienić interfejs tego typu bez wprowadzania subtelnych błędów w całym kodzie, który musiałby zostać zmieniony.

Mógłbym (teoretycznie) stworzyć „binhierarchyid” CLR UDT, który implementuje ten sam interfejs co hierarchyid, ale obsługuje tylko drzewa binarne. To powinno dać mi głębokość ~ 7000, pozostając nadal w granicach 900 bajtów. Nie jestem pewien, jak duże byłoby to przedsięwzięcie.

Czy gdzieś jest dostępne źródło tego hierarchicznego identyfikatora CLR, abym mógł stworzyć swój własny, oparty na nim, który obsługuje głębsze struktury?


Chciałem wiedzieć, co modelujesz. Czy możesz opisać?
wBob

Odpowiedzi:


6

Dostępnych jest wiele kodów źródłowych .NET, a większość z nich to Open Source, choć na różnych licencjach. Jeszcze inny kod jest dostępny, ale tylko w celach informacyjnych i nie można go użyć w kodzie.

Biorąc pod uwagę, że podanym celem jest:

Chciałbym zwiększyć ten limit dla złożonej istniejącej aplikacji, która musi przekroczyć ten limit. Nie chcę zmieniać interfejsu tego typu. Nie jestem pewien, czy mógłbym zmienić interfejs tego typu bez wprowadzania subtelnych błędów w całym kodzie, który musiałby zostać zmieniony.

jeśli intencją jest aktualizacja bieżącego typu Hierarchia, to czy kod jest typu Open Source, nie ma znaczenia, ponieważ nawet jeśli tak jest, nigdy nie będziesz w stanie wprowadzić żadnych zmian w całym systemie: nawet gdybyś mógł wymienić Zespół w SQL Server, nie będziesz mógł podpisać go tym samym certyfikatem / kluczem prywatnym, a zatem nie będzie używany przez system.

Można jednak zbudować własny typ zdefiniowany przez użytkownika SQLCLR (UDT), aby zapewnić pożądaną funkcjonalność.

Mimo to , ponieważ odnosi się to do lepszego zrozumienia .NET Framework:

Możesz zobaczyć kod źródłowy większości rzeczy tutaj: https://github.com/Microsoft/referencesource

i jeszcze więcej rzeczy tutaj: https://github.com/dotnet/corefx

Oba wyżej wymienione repozytoria są typu Open Source i podlegają głównie licencji MIT, choć dla pewności należy przejrzeć informacje o licencji w każdej lokalizacji, a czasem w różnych folderach.

Wiele pozostałego kodu można znaleźć tutaj: http://referencesource.microsoft.com/

Kod znaleziony w ReferenceSource.Microsoft.com (link bezpośrednio powyżej), który nie znajduje się również w pierwszych dwóch linkach (które są Open Source), nie jest Open Source i jest zamiast tego zarządzany przez LICENCJĘ ŹRÓDŁA ODNIESIENIA MICROSOFT (MS-RSL) , odpowiednia część jest (lekko zredagowana, aby umieścić definicję „użycia referencyjnego” tuż po użyciu tego wyrażenia):

Licencjodawca udziela użytkownikowi niezbywalnej, niewyłącznej, ogólnoświatowej, nieodpłatnej licencji na prawa autorskie do powielania oprogramowania do użytku referencyjnego: wykorzystanie oprogramowania w firmie jako odniesienie, w formie tylko do odczytu, wyłącznie w celu debugowania Twoje produkty, utrzymanie produktów lub poprawa interoperacyjności Twoich produktów z oprogramowaniem, w szczególności wyklucza prawo do dystrybucji oprogramowania poza Twoją firmą.

Wygląda jednak na to, że Microsoft.SqlServer.*przestrzeń nazw nie jest dostępna w żadnej z tych lokalizacji. Co oznacza, że ​​prosta odpowiedź na pytanie: „czy HierarchyID Open Source?” jest: Nie .

Jeśli chcesz zobaczyć kod źródłowy, musisz otworzyć bibliotekę DLL - Microsoft.SqlServer.Types.dll - z dekompilatorem. ALE istnieją potencjalne problemy prawne i / lub etyczne. Jest to zastrzeżony kod, więc należy wziąć pod uwagę dwa główne punkty:

  • jak stwierdzono w EULA SQL Server (EULA) (i cytowany w @ TomV za odpowiedź ), można tylko „ inżynierii wstecznej, dekompilacji lub demontażu ” non-warunkiem oznaczeniem „ tylko do tego stopnia, że obowiązujące prawo wyraźnie zezwala ” . Oznacza to, że dla niektórych ludzi jest to całkowicie legalne, ale dla innych nie tyle. Możesz więc skonsultować się z lokalnym prawnikiem ds. Własności intelektualnej.

  • jeśli dekompilacja jest zgodna z prawem, intencja języka prawnego oraz fakt, że dostarczono jakiś kod źródłowy (jak podano na górze), ale ten konkretny kod nie jest, z pewnością oznacza, że ​​ogół społeczeństwa chce nie widzę ani nie mam tego kodu. Tak więc legalność przy dekompilacji nie powinna być brana pod uwagę, ponieważ kopiowanie jest również legalne, ale przede wszystkim dlatego, że można ją wykorzystać jako odniesienie (np. Do debugowania itp.).


4
Pisząc pytanie, nie myślałem o aspekcie prawnym. Chyba jedyną naprawdę legalną drogą jest wdrożenie w pokoju czystym.
Tarnay Kálmán

3
Cześć Solomon. Zastanawiam się, jak byś się czuł, gdybyśmy zasugerowali dekompilację twoich (doskonałych) bibliotek w celu sprawdzenia, jak działają lub skopiowania ich kodu źródłowego :)
Tom V - spróbuj topanswers.xyz

1
Odpowiadając na Twoją edycję dotyczącą niemożności wymiany zestawu: Nie chcę zastępować zestawu. Nie mam nic przeciwko temu, by mój typ miał inną nazwę. Nie widzę (jeszcze?) Trudności w migracji do typu o innej nazwie, który (w moim ograniczonym przypadku użycia drzewa binarnego) ma takie samo zachowanie. Musiałbym zmienić wszystkie odwołania do typu w procedurach przechowywanych (ale jest to możliwe do zarządzania) i ZMIEŃ (może UTWÓRZ // UPDATE / DROP) niektóre kolumny, ale o to chodzi.
Tarnay Kálmán

1
@TomV To dobry punkt do podniesienia, więc dziękuję za to. Wracam do przodu i do przodu w tej kwestii, będąc po obu stronach i będąc naturalnie ciekawą osobą. Istnieją różne powody, dla których chcemy kodu (debugowanie, nauka techniki, kopiowanie / kradzież itp.), Niektóre są w porządku. Ludzie pytają, jak zdekompilować SQL #, a nawet wiedząc, że może to być legalne, i opierając się na innowacji bardziej niż tajemnicy, nie doceniam tego. Wydaje mi się, że odpowiadałem pośpiesznie, koncentrując się na aspekcie „jak”, ale zaktualizowałem moją odpowiedź, zastępując instrukcje różnymi aspektami sytuacji.
Solomon Rutzky 23.04.16

6

Ponieważ srutzky wskazał w niektórych miejscach w swojej odpowiedzi, w których część kodu źródłowego Microsoftu jest dostępna, a żądanej funkcji nie ma na liście, myślę, że możemy stwierdzić, że kod źródłowy nie jest dostępny na żadnej licencji open source i wygląda na to, że twoje pytanie dotyczyło otwartego źródła, a nie możliwości zobaczenia kodu źródłowego .

Biorąc pod uwagę, że umowa EULA stanowi, co następuje:

Robiąc to, musisz przestrzegać wszelkich ograniczeń technicznych w oprogramowaniu, które pozwalają na korzystanie z niego tylko w określony sposób. Nie możesz:
...
odtwarzać kodu źródłowego, dekompilować ani dezasemblować oprogramowania, z wyjątkiem przypadków, w których właściwe prawo wyraźnie na to zezwala, pomimo tego ograniczenia;

Obawiam się, że sam musisz wdrożyć logikę.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.