Является ли иерархия CLR открытым исходным кодом?

9

Встроенная иерархия представляет собой CLR, который хранит пути в эффективной двоичной форме и предоставляет другие полезные функции.

К сожалению, есть предел того, насколько глубоко могут быть представленные пути, и это ~ 1427 для двоичного дерева. Я хотел бы увеличить этот лимит для сложного существующего приложения, которое обязательно достигнет этого предела. Я не хочу менять интерфейс типа. Я не уверен, что смог бы изменить интерфейс типа, не внося тонких ошибок во весь код, который должен был быть изменен в результате.

Я мог (теоретически) создать UDT CLR «binhierarchyid», который реализует тот же интерфейс, что иierarchyid, но поддерживает только двоичные деревья. Это должно дать мне глубину ~ 7000, оставаясь при этом в пределах 900 байт. Не уверен, насколько масштабным будет это начинание.

Доступен ли источник этой CLR-иерархии где-нибудь, чтобы я мог создать свой собственный на его основе, который поддерживает более глубокие структуры?

Тарнай Кальман
источник
Мне было интересно узнать, что вы моделируете. Можешь описать?
wBob

Ответы:

6

Большая часть исходного кода .NET доступна, и большая часть его является открытым исходным кодом, хотя и под различными лицензиями. Тем не менее, другой код доступен, но только для справочных целей и не может быть использован в вашем коде.

Учитывая, что заявленной целью является:

Я хотел бы увеличить этот лимит для сложного существующего приложения, которое обязательно достигнет этого предела. Я не хочу менять интерфейс типа. Я не уверен, что смог бы изменить интерфейс типа, не внося тонких ошибок во весь код, который должен был быть изменен в результате.

если намерение состоит в том, чтобы обновить текущий тип иерархии, то не имеет значения, является ли код открытым исходным кодом, потому что, даже если это так, вы никогда не сможете внести какие-либо изменения в общую систему: даже если вы сможете заменить сборку в SQL Server, вы не сможете подписать его тем же сертификатом / закрытым ключом и, следовательно, он не будет использоваться системой.

Однако вы можете создать свой собственный пользовательский тип SQLCLR (UDT) для обеспечения желаемой функциональности.

Тем не менее , поскольку это связано с получением лучшего понимания .NET Framework:

Вы можете просмотреть исходный код большинства материалов здесь: https://github.com/Microsoft/referencesource

и еще больше вещей здесь: https://github.com/dotnet/corefx

Оба вышеупомянутых репозитория имеют открытый исходный код и управляются в основном по лицензии MIT, хотя вам необходимо проверить информацию о лицензировании в каждом месте, а иногда и в разных папках, чтобы быть уверенным.

Многое из оставшегося кода можно найти здесь: http://referencesource.microsoft.com/

Код, найденный на ReferenceSource.Microsoft.com (ссылка выше), который также не найден в первых двух ссылках (которые являются открытым исходным кодом), не является открытым исходным кодом и вместо этого регулируется лицензией MICROSOFT REFERENCE SOURCE LICENSE (MS-RSL) соответствующая часть (слегка отредактированная, чтобы дать определение «ссылочного использования» сразу после использования этой фразы):

Лицензиар предоставляет вам непередаваемую, неисключительную, всемирную, бесплатную лицензию на авторское право на воспроизведение программного обеспечения для справочного использования: использование программного обеспечения в вашей компании в качестве справочного, только для чтения, в исключительных целях отладки ваши продукты, поддержание ваших продуктов или повышение совместимости ваших продуктов с программным обеспечением, и, в частности, исключает право на распространение программного обеспечения за пределами вашей компании.

Однако, похоже, что Microsoft.SqlServer.*пространство имен недоступно ни в одном из этих мест. Что означает, что простой ответ на вопрос: «Является ли HierarchyID открытым исходным кодом?» это: нет .

Если вы хотите увидеть исходный код, вам нужно открыть DLL - Microsoft.SqlServer.Types.dll - с помощью декомпилятора. НО, есть потенциальные юридические и / или этические проблемы, которые нужно решить. Это является собственный код таким образом , есть два основных момента , которые следует учитывать:

  • как указано в лицензионном соглашении с конечным пользователем SQL Server (EULA) (и как указано в @ ВТоМ в ответ ), вы можете только « перепроектировать, декомпилировать или демонтирует » не предоставляется код « только в той степени , в которой применяется закон прямо разрешает » , Это означает, что для некоторых людей это совершенно законно, но для других не так уж и много. Так что вы можете обратиться к местному юристу по интеллектуальной собственности.

  • если для вас законно декомпилировать намерение юридического языка, а также тот факт, что предоставляется некоторый исходный код (как указано в верхней части), но этот конкретный код не является, безусловно, подразумевает, что желание для широкой публики не вижу или не имею этот код. Таким образом, законность декомпиляции не должна восприниматься как дублирование, а также законность ее использования в качестве ссылки (например, для отладки и т. Д.).

Соломон Руцкий
источник
4
Я не думал о юридическом аспекте, когда писал вопрос. Я предполагаю, что единственный действительно законный путь - это внедрение чистой комнаты.
Tarnay Kálmán
3
Привет, Соломон, мне просто интересно, как бы ты себя чувствовал, если бы мы предложили декомпилировать твои (превосходные) библиотеки, чтобы либо посмотреть, как они работают, либо скопировать их исходный код :)
Том V - попробуй topanswers.xyz
1
Отвечая на ваши правки о невозможности замены сборки: я не хочу заменять сборку. Я в порядке с моим типом, имеющим другое имя. Я (пока?) Не вижу трудностей при переходе на тип с другим именем, который (для моего варианта использования ограниченного двоичного дерева) имеет такое же поведение. Я должен был бы изменить все ссылки на тип в хранимых процедурах (но это управляемо), и ALTER (может быть, CREATE // UPDATE / DROP) некоторые столбцы, но это об этом.
Tarnay Kálmán
1
@ TomV Это хороший момент для поднятия, так что спасибо вам за это. Я иду туда и обратно по этому вопросу, будучи по обе стороны от него и будучи естественно любопытным человеком. Есть разные причины для желания кода (отладка, изучение техники, копирование / кража и т. Д.), Некоторые из них в порядке. Люди спрашивали, как декомпилировать SQL #, и даже зная, что он может быть законным, и полагаясь на инновации больше, чем на секретность, я вспоминаю, что не ценил его. Я предполагаю, что отвечал поспешно, сосредоточив внимание на аспекте «как делать», но обновил свой ответ, заменив инструкции различными аспектами ситуации.
Соломон Руцкий
6

Поскольку srutzky указал вам на некоторые места в своем ответе, где часть исходного кода Microsoft доступна, а запрошенная вами функция отсутствует в списке, я думаю, мы можем заключить, что исходный код не доступен ни по какой лицензии с открытым исходным кодом, и выглядит так Ваш вопрос был о том, что он с открытым исходным кодом, а не о том, чтобы увидеть исходный код .

Учитывая, что EULA заявляет следующее:

При этом вы должны соблюдать все технические ограничения в программном обеспечении, которые позволяют использовать его только определенным образом. Вы не можете:
... осуществлять
инженерный анализ, декомпилировать или дизассемблировать программное обеспечение, за исключением случаев, когда это прямо разрешено применимым законодательством, несмотря на данное ограничение;

Поэтому я боюсь, что вам осталось реализовать логику самостоятельно.

Том V - попробуйте topanswers.xyz
источник