Le CLR hierarchyid est-il open-source?


9

Le hierarchyid intégré est un CLR qui stocke les chemins sous une forme binaire efficace et fournit d'autres fonctionnalités utiles.

Malheureusement, la profondeur des chemins représentés peut être limitée et c'est ~ 1427 pour un arbre binaire. Je voudrais augmenter cette limite pour une application existante complexe qui est liée à atteindre cette limite. Je ne souhaite pas changer l'interface du type. Je ne suis pas convaincu que je pourrais réussir à changer l'interface du type sans introduire de bogues subtils dans tout le code qui devrait être changé en conséquence.

Je pourrais (en théorie) créer un UDT CLR "binhierarchyid" qui implémente la même interface que hierarchyid, mais ne prend en charge que les arbres binaires. Cela devrait me donner une profondeur de ~ 7000 tout en restant dans la limite de 900 octets. Je ne sais pas quelle serait la taille d'une entreprise.

La source de ce CLR hierarchyid est-elle disponible quelque part, afin que je puisse créer le mien basé sur celui-ci qui supporte des structures plus profondes?


J'étais intéressé de savoir ce que vous modélisez. Pouvez vous d'écrire?
wBob

Réponses:


6

Une grande partie du code source .NET est disponible, et une grande partie est Open Source, bien que sous diverses licences. Encore un autre code est disponible, mais uniquement à des fins de référence et ne peut pas être utilisé dans votre code.

Étant donné que l'objectif déclaré est:

Je voudrais augmenter cette limite pour une application existante complexe qui est liée à atteindre cette limite. Je ne souhaite pas changer l'interface du type. Je ne suis pas convaincu que je pourrais réussir à changer l'interface du type sans introduire de bogues subtils dans tout le code qui devrait être changé en conséquence.

si l'intention est de mettre à jour le type de hiérarchie actuel, le fait que le code soit Open Source ou non n'est pas pertinent, car même s'il l'est, vous ne pourrez jamais introduire de modifications dans le système global: même si vous pouviez remplacer l'assembly dans SQL Server, vous ne pourriez pas le signer avec le même certificat / clé privée et, par conséquent, il ne serait pas utilisé par le système.

Cependant, vous pouvez créer votre propre type défini par l'utilisateur SQLCLR (UDT) pour fournir la fonctionnalité souhaitée.

Pourtant , en ce qui concerne l'acquisition d'une meilleure compréhension du .NET Framework:

Vous pouvez voir le code source de la plupart des choses ici: https://github.com/Microsoft/referencesource

et encore plus de choses ici: https://github.com/dotnet/corefx

Les deux référentiels mentionnés ci-dessus sont Open Source et régis principalement sous la licence MIT, bien que vous deviez vérifier les informations de licence dans chaque emplacement, et parfois dans divers dossiers, pour en être certain.

Une grande partie du code restant peut être trouvée ici: http://referencesource.microsoft.com/

Le code trouvé sur ReferenceSource.Microsoft.com (le lien directement ci-dessus) qui ne se trouve pas également sur les deux premiers liens (qui sont Open Source) n'est pas Open Source et est plutôt régi par la LICENCE MICROSOFT REFERENCE SOURCE (MS-RSL) , la partie pertinente étant (légèrement modifiée pour mettre la définition d '"utilisation de référence" juste après l'utilisation de cette phrase):

le Concédant vous accorde une licence de droit d'auteur non transférable, non exclusive, mondiale et libre de droits pour reproduire le logiciel à des fins de référence: utilisation du logiciel au sein de votre entreprise comme référence, en lecture seule, aux seules fins de débogage vos produits, la maintenance de vos produits ou l'amélioration de l'interopérabilité de vos produits avec le logiciel, et exclut spécifiquement le droit de distribuer le logiciel en dehors de votre entreprise.

Cependant, il semble que l' Microsoft.SqlServer.*espace de noms n'est disponible dans aucun de ces emplacements. Ce qui signifie que la réponse simple à la question: "est HierarchyID Open Source?" est: Non .

Si vous souhaitez voir le code source, vous devez ouvrir la DLL - Microsoft.SqlServer.Types.dll - avec un décompilateur. MAIS, il y a des problèmes juridiques et / ou éthiques potentiels à traiter. Il s'agit d' un code propriétaire, il y a donc deux points principaux à considérer:

  • comme indiqué dans le contrat de licence utilisateur final (CLUF) SQL Server (et tel que cité dans la réponse de @ TomV ), vous ne pouvez " désosser , décompiler ou désassembler " le code non fourni " que dans la mesure où la loi applicable le permet expressément " . Cela signifie que pour certaines personnes, il est parfaitement légal de le faire, mais pour d'autres, pas tellement. Donc, vous voudrez peut-être consulter un avocat local en propriété intellectuelle.

  • s'il est légal pour vous de décompiler, l'intention du langage juridique, plus le fait qu'un certain code source est fourni (comme lié en haut) mais que ce code particulier ne l'est pas, implique certainement que le désir est pour le grand public de pas voir ou avoir ce code. Donc, être légal à décompiler ne doit pas être considéré comme étant également légal à dupliquer, mais plus afin qu'il puisse être utilisé comme référence (par exemple pour le débogage, etc.).


4
Je n'avais pas pensé à l'aspect juridique lors de la rédaction de la question. Je suppose que la seule solution vraiment légale est une mise en œuvre en salle blanche.
Tarnay Kálmán

3
Salut Salomon, je me demande simplement comment vous vous sentiriez si nous vous suggérions de décompiler vos (excellentes) bibliothèques pour voir comment elles fonctionnent ou en copier le code source :)
Tom V - essayez topanswers.xyz

1
Répondre à votre montage sur l'impossibilité de remplacer l'assemblage: je ne souhaite pas remplacer l'assemblage. Je suis d'accord avec mon type ayant un nom différent. Je ne vois pas (encore?) La difficulté de migrer vers un type de nom différent qui (pour mon cas d'utilisation d'arbre binaire limité) a le même comportement. Je devrais changer toutes les références au type dans les procédures stockées (mais c'est gérable), et ALTER (peut-être CREATE // UPDATE / DROP) certaines colonnes, mais c'est à peu près tout.
Tarnay Kálmán

1
@TomV C'est un bon point à soulever, alors merci de l'avoir fait. Je fais des allers-retours sur cette question, étant des deux côtés et étant une personne naturellement curieuse. Il y a différentes raisons de vouloir le code (débogage, apprendre une technique, copier / voler, etc.), certaines étant acceptables. Les gens ont demandé comment décompiler SQL # et même en sachant que cela peut être légal, et en comptant sur l'innovation plus que sur le secret, je me souviens de ne pas l'apprécier. Je suppose que je répondais à la hâte, en me concentrant sur l'aspect "comment faire", mais j'ai mis à jour ma réponse en remplaçant les instructions par les différents aspects de la situation.
Solomon Rutzky

6

Comme srutzky vous a indiqué certains endroits de sa réponse où une partie du code source de Microsoft est disponible et la fonction que vous avez demandée n'est pas répertoriée, je pense que nous pouvons conclure que le code source n'est disponible sous aucune licence open source, et il ressemble à votre question portait sur le fait qu'il soit open source, pas sur la possibilité de voir le code source .

Étant donné que le CLUF stipule ce qui suit:

Ce faisant, vous devez respecter toutes les limitations techniques du logiciel qui vous permettent uniquement de l'utiliser de certaines manières. Vous ne pouvez pas:
...
désosser, décompiler ou désassembler le logiciel, sauf et uniquement dans la mesure où la loi applicable le permet expressément, malgré cette limitation;

J'ai donc bien peur qu'il vous reste à mettre en œuvre la logique vous-même.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.