¿El código jerárquico CLR es de código abierto?


9

La jerarquía jerárquica incorporada es un CLR que almacena rutas en una forma binaria eficiente y proporciona otra funcionalidad útil.

Desafortunadamente, hay un límite en la profundidad de las rutas representadas, y es ~ 1427 para un árbol binario. Me gustaría aumentar ese límite para una aplicación existente compleja que seguramente alcanzará este límite. No deseo cambiar la interfaz del tipo. No estoy seguro de poder cambiar la interfaz del tipo sin introducir errores sutiles en todo el código que tendría que ser modificado como resultado.

Podría (en teoría) crear un UDT CLR "binhierarchyid" que implemente la misma interfaz que Jerarchyid, pero solo admite árboles binarios. Eso debería obtener una profundidad de ~ 7000 sin dejar de estar dentro del límite de 900 bytes. No estoy seguro de cuán grande sería una empresa.

¿La fuente de este CLR jerárquico está disponible en alguna parte, para que yo pueda crear el mío basado en él que soporte estructuras más profundas?


Me interesaba saber qué estás modelando. ¿Puedes describir?
wBob

Respuestas:


6

Gran parte del código fuente .NET está disponible, y gran parte es de código abierto, aunque bajo varias licencias. Todavía hay otro código disponible, pero solo con fines de referencia y no se puede utilizar en su código.

Dado que el objetivo declarado es:

Me gustaría aumentar ese límite para una aplicación existente compleja que seguramente alcanzará este límite. No deseo cambiar la interfaz del tipo. No estoy seguro de poder cambiar la interfaz del tipo sin introducir errores sutiles en todo el código que tendría que ser modificado como resultado.

si la intención es actualizar el tipo de Jerarquía actual, entonces si el código es Open Source o no es irrelevante porque, incluso si lo fuera, nunca sería capaz de introducir ningún cambio en el sistema general: incluso si pudiera reemplazar la Asamblea en SQL Server, no podría firmarlo con el mismo Certificado / Clave privada y, por lo tanto, el sistema no lo usaría.

Sin embargo, puede crear su propio tipo SQLCLR definido por el usuario (UDT) para proporcionar la funcionalidad deseada.

Aún así , en lo que se refiere a obtener una mejor comprensión de .NET Framework:

Puede ver el código fuente de la mayoría de las cosas aquí: https://github.com/Microsoft/referencesource

e incluso más cosas aquí: https://github.com/dotnet/corefx

Ambos repositorios mencionados anteriormente son de código abierto y se rigen principalmente bajo la licencia MIT, aunque es necesario revisar la información de la licencia en cada ubicación, y a veces en varias carpetas, para estar seguro.

Gran parte del código restante se puede encontrar aquí: http://referencesource.microsoft.com/

El código que se encuentra en ReferenceSource.Microsoft.com (el enlace directamente arriba) que no se encuentra también en los dos primeros enlaces (que son de código abierto) no es de código abierto y en su lugar se rige por la LICENCIA DE FUENTE DE REFERENCIA DE MICROSOFT (MS-RSL) , siendo la parte relevante (ligeramente editada para poner la definición de "uso de referencia" justo después del uso de esa frase):

el Licenciante le otorga una licencia de copyright no transferible, no exclusiva, mundial y libre de regalías para reproducir el software para uso de referencia: uso del software dentro de su empresa como referencia, en forma de solo lectura, con el único propósito de depurar sus productos, mantener sus productos o mejorar la interoperabilidad de sus productos con el software, y excluye específicamente el derecho de distribuir el software fuera de su empresa.

Sin embargo, parece que el Microsoft.SqlServer.*espacio de nombres no está disponible en ninguna de esas ubicaciones. Lo que significa que la respuesta simple a la pregunta de "¿es HierarchyID Open Source?" es: n .

Si desea ver el código fuente, deberá abrir la DLL ( Microsoft.SqlServer.Types.dll ) con un descompilador. PERO, hay posibles problemas legales y / o éticos que tratar. Este es un código propietario, por lo que hay dos puntos principales a considerar:

  • como se indica en el Acuerdo de licencia de usuario final (CLUF) de SQL Server (y como se cita en la respuesta de @ TomV ), solo puede " aplicar ingeniería inversa, descompilar o desensamblar " código no proporcionado " solo en la medida en que la ley aplicable lo permita expresamente " . Lo que significa que para algunas personas, es perfectamente legal hacer esto, pero para otras personas, no tanto. Por lo tanto, es posible que desee consultar a un abogado local de propiedad intelectual.

  • si es legal para usted descompilar, la intención del lenguaje legal, más el hecho de que se proporciona algún código fuente (como se vincula en la parte superior) pero este código en particular no lo es, ciertamente implica que el público en general desea No veo ni tengo este código. Por lo tanto, no debe considerarse legal descompilar, ya que también es legal duplicar, sino más bien para que pueda usarse como referencia (es decir, para depuración, etc.).


44
No había pensado en el aspecto legal al escribir la pregunta. Supongo que la única forma realmente legal de hacerlo es implementar una sala limpia.
Tarnay Kálmán

3
Hola Solomon, me pregunto cómo te sentirías si te sugiriéramos descompilar tus (excelentes) bibliotecas para ver cómo funcionan o copiar el código fuente de ellas :)
Tom V - prueba topanswers.xyz

1
En respuesta a su edición sobre la imposibilidad de reemplazar el ensamblaje: no deseo reemplazar el ensamblaje. Estoy de acuerdo con que mi tipo tenga un nombre diferente. No veo (¿todavía?) La dificultad de migrar a un tipo con un nombre diferente que (para mi caso de uso de árbol binario limitado) tiene el mismo comportamiento. Tendría que cambiar todas las referencias al tipo en los procedimientos almacenados (pero eso es manejable), y ALTERAR (tal vez CREAR // ACTUALIZAR / BAJAR) algunas columnas, pero eso es todo.
Tarnay Kálmán

1
@TomV Ese es un buen punto para plantear, así que gracias por hacerlo. Voy y vengo sobre este tema, estando a ambos lados y siendo una persona curiosa por naturaleza. Hay diferentes razones para querer el código (depuración, aprender una técnica, copiar / robar, etc.), algunas de las cuales están bien. La gente ha preguntado cómo descompilar SQL # e incluso sabiendo que puede ser legal, y confiando en la innovación más que en el secreto, recuerdo no apreciarlo. Supongo que estaba respondiendo apresuradamente, enfocándome en el aspecto de "cómo hacerlo", pero he actualizado mi respuesta reemplazando las instrucciones con los diversos aspectos de la situación.
Solomon Rutzky

6

Como srutzky le señaló algunas ubicaciones en su respuesta donde parte del código fuente de Microsoft está disponible y la función que solicitó no está en la lista, creo que podemos concluir que el código fuente no está disponible bajo ninguna licencia de código abierto, y parece que su pregunta era sobre ser de código abierto, no sobre poder ver el código fuente .

Dado que el EULA establece lo siguiente:

Al hacerlo, debe cumplir con cualquier limitación técnica en el software que solo le permita usarlo de ciertas maneras. Usted no puede:
... realizar
ingeniería inversa, descompilar o desarmar el software, excepto y solo en la medida en que la ley aplicable lo permita expresamente, a pesar de esta limitación;

Así que me temo que te queda implementar la lógica tú mismo.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.