Il gerarchyid CLR è open-source?


9

Il hierarchyid incorporato è un CLR che memorizza i percorsi in un efficiente formato binario e fornisce altre utili funzionalità.

Sfortunatamente, c'è un limite alla profondità dei percorsi rappresentati, ed è ~ 1427 per un albero binario. Vorrei aumentare tale limite per un'applicazione esistente complessa destinata a raggiungere questo limite. Non desidero cambiare l'interfaccia del tipo. Non sono sicuro di poter cambiare l'interfaccia del tipo senza introdurre bug sottili in tutto il codice che dovrebbe essere modificato di conseguenza.

Potrei (in teoria) creare un UDT CLR "binhierarchyid" che implementa la stessa interfaccia di hierarchyid, ma supporta solo alberi binari. Ciò dovrebbe portarmi a una profondità di ~ 7000 pur rimanendo all'interno del limite di 900 byte. Non sono sicuro di quanto sarebbe grande un'impresa.

La fonte di questo CLR gerarchico è disponibile da qualche parte, in modo che io possa crearne uno mio basato su strutture più profonde?


Ero interessato a sapere cosa stai modellando. Puoi descrivere?
wBob,

Risposte:


6

Gran parte del codice sorgente .NET è disponibile e gran parte è Open Source, anche se con varie licenze. È ancora disponibile altro codice, ma solo a scopo di riferimento e non può essere utilizzato nel codice.

Dato che l'obiettivo dichiarato è:

Vorrei aumentare tale limite per un'applicazione esistente complessa destinata a raggiungere questo limite. Non desidero cambiare l'interfaccia del tipo. Non sono sicuro di poter cambiare l'interfaccia del tipo senza introdurre bug sottili in tutto il codice che dovrebbe essere modificato di conseguenza.

se l'intenzione è di aggiornare l'attuale tipo di Gerarchia, allora se il codice è Open Source è irrilevante perché anche se lo fosse, non si sarebbe mai in grado di introdurre cambiamenti nel sistema complessivo: anche se si potesse sostituire l'Assemblea in SQL Server, non saresti in grado di firmarlo con lo stesso certificato / chiave privata e quindi non verrebbe utilizzato dal sistema.

Tuttavia, è possibile creare il proprio SQLCLR User-Defined Type (UDT) per fornire la funzionalità desiderata.

Tuttavia , per quanto riguarda l'acquisizione di una migliore comprensione di .NET Framework:

Puoi visualizzare il codice sorgente della maggior parte delle cose qui: https://github.com/Microsoft/referencesource

e ancora più cose qui: https://github.com/dotnet/corefx

Entrambi i repository sopra indicati sono Open Source e regolati principalmente con la licenza MIT, anche se per essere sicuri è necessario rivedere le informazioni sulla licenza in ogni posizione, e talvolta in varie cartelle.

Molto del codice rimanente è disponibile qui: http://referencesource.microsoft.com/

Il codice trovato su ReferenceSource.Microsoft.com (il collegamento direttamente sopra) che non si trova anche nei primi due collegamenti (che sono Open Source) non è Open Source ed è invece regolato dalla LICENZA SORGENTE DI RIFERIMENTO MICROSOFT (MS-RSL) , essendo la parte pertinente (leggermente modificata per mettere la definizione di "uso di riferimento" proprio dopo l'uso di quella frase):

il Licenziante ti concede una licenza di copyright non trasferibile, non esclusiva, in tutto il mondo, esente da royalty per riprodurre il software per uso di riferimento: uso del software all'interno della tua azienda come riferimento, in forma di sola lettura, ai soli fini del debug i tuoi prodotti, la manutenzione dei tuoi prodotti o il miglioramento dell'interoperabilità dei tuoi prodotti con il software ed esclude specificamente il diritto di distribuire il software al di fuori della tua azienda.

Tuttavia, sembra che lo Microsoft.SqlServer.*spazio dei nomi non sia disponibile in nessuna di queste posizioni. Ciò significa che la semplice risposta alla domanda di: "is HierarchyID Open Source?" è: No .

Se si desidera visualizzare il codice sorgente, è necessario aprire la DLL - Microsoft.SqlServer.Types.dll - con un decompilatore. MA, ci sono potenziali problemi legali e / o etici da affrontare. Questo è un codice proprietario quindi ci sono due punti principali da considerare:

  • come indicato nel Contratto di licenza con l'utente finale (EULA) di SQL Server (e come indicato nella risposta di @ TomV ), è possibile " decodificare, decompilare o disassemblare " codice non fornito " solo nella misura consentita espressamente dalla legge applicabile " . Ciò significa che per alcune persone, è perfettamente legale farlo, ma per altre persone, non così tanto. Quindi potresti voler consultare un avvocato locale della proprietà intellettuale.

  • se è legale decompilare, l'intenzione del linguaggio legale, oltre al fatto che viene fornito un codice sorgente (come collegato in alto), ma questo particolare codice non lo è, implica certamente che il desiderio è per il grande pubblico non vedere o avere questo codice. Quindi essere legali per decompilare non dovrebbe essere preso in quanto è anche legale duplicare, ma più che può essere usato come riferimento (ad esempio per il debug, ecc.).


4
Non avevo pensato all'aspetto legale quando ho scritto la domanda. Immagino che l'unico modo veramente legale per procedere sia l'implementazione di una camera bianca.
Tarnay Kálmán,

3
Ciao Solomon, mi chiedo come ti sentiresti se ti suggerissimo di decompilare le tue (eccellenti) librerie per vedere come funzionano o per copiarne il codice sorgente :)
Tom V - prova topanswers.xyz il

1
In risposta alla tua modifica sull'impossibilità di sostituire l'assemblaggio: non desidero sostituire l'assemblaggio. Sono d'accordo con il mio tipo che ha un nome diverso. Non (ancora?) Non vedo la difficoltà di migrare a un tipo con un nome diverso che (per il mio caso d'uso limitato dell'albero binario) ha lo stesso comportamento. Dovrei cambiare tutti i riferimenti al tipo nelle procedure memorizzate (ma è gestibile) e ALTER (forse CREATE // UPDATE / DROP) alcune colonne, ma questo è tutto.
Tarnay Kálmán,

1
@TomV Questo è un buon punto da sollevare, quindi grazie per averlo fatto. Vado avanti e indietro su questo tema, essendo su entrambi i lati ed essendo una persona naturalmente curiosa. Ci sono diversi motivi per volere il codice (debug, imparare una tecnica, copiare / rubare, ecc.), Alcuni vanno bene. Le persone hanno chiesto come decompilare SQL # e anche sapendo che può essere legale e facendo affidamento sull'innovazione più che sulla segretezza, ricordo di non averlo apprezzato. Immagino di rispondere in fretta, concentrandomi sull'aspetto "come fare", ma ho aggiornato la mia risposta sostituendo le istruzioni con i vari aspetti della situazione.
Solomon Rutzky,

6

Mentre srutzky ti ha indicato alcune posizioni nella sua risposta in cui è disponibile parte del codice sorgente di Microsoft e la funzione richiesta non è elencata, penso che possiamo concludere che il codice sorgente non è disponibile con alcuna licenza open source e sembra la tua domanda era che si trattava di essere open source, non di poter vedere il codice sorgente .

Dato che l'EULA afferma quanto segue:

Nel fare ciò, è necessario rispettare tutte le limitazioni tecniche nel software che consentono di utilizzarlo solo in determinati modi. Non è possibile:
...
decodificare, decompilare o disassemblare il software, tranne e solo nella misura consentita espressamente dalla legge applicabile, nonostante questa limitazione;

Quindi temo che rimarrai tu stesso per implementare la logica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.