hierarchyid CLRはオープンソースですか?


9

組み込みのhierarchyidは、パスを効率的なバイナリ形式で格納し、その他の便利な機能を提供するCLRです。

残念ながら、表現されたパスの深さには制限があり、バイナリツリーの場合は〜1427です。この制限に達することになっている複雑な既存のアプリケーションの制限を増やしたいと思います。タイプのインターフェースを変更したくありません。結果として変更する必要のあるすべてのコードに微妙なバグを導入せずに、型のインターフェイスを変更できるとは思えません。

(理論的には)hierarchyidと同じインターフェイスを実装する「binhierarchyid」CLR UDTを作成できますが、バイナリツリーのみをサポートします。これにより、900バイトの制限内にとどまったまま、深度が7000に達するはずです。それがどれほどの規模の事業になるかはわかりません。

このhierarchyid 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(すぐ上のリンク)にあるコードのうち、最初の2つのリンク(オープンソース)にもないコードオープンソースではなく、MICROSOFT REFERENCE SOURCE LICENSE(MS-RSL)によって管理されています、関連する部分が(そのフレーズの使用法の直後に「参照使用」の定義を置くために軽く編集されています):

ライセンサーは、ソフトウェアを参照用に複製するための譲渡不可かつ非独占的で全世界に著作権使用料のない著作権ライセンスを付与します:デバッグ専用の目的で、参照としての社内でのソフトウェアの使用お客様の製品、製品の保守、またはソフトウェアとの製品の相互運用性の強化。特に、ソフトウェアを会社外に配布する権利を除外します。

ただし、Microsoft.SqlServer.*これらの場所では名前空間を使用できないようです。つまり、「HierarchyIDはオープンソースですか?」という質問に対する簡単な答えです。です:いいえ

ソースコードを確認したい場合は、逆コンパイラを使用してDLL(Microsoft.SqlServer.Types.dll)を開く必要があります。しかし、対処すべき潜在的な法的および/または倫理的な問題があります。これ独自のコードであるため、考慮すべき主な点が2つあります。

  • SQL Serverエンドユーザーライセンス契約(EULA)に記載されているように(および@TomVの回答に引用されているように)、「リバースエンジニアリング、逆コンパイル、または逆アセンブルできるのは、適用される法律で明示的に許可されている範囲内に限られます。 。一部の人々にとっては、これを行うことは完全に合法ですが、他の人々にとってはそれほどではありません。したがって、地元の知的財産の弁護士に相談することをお勧めします。

  • あなたが逆コンパイルすることが合法である場合、合法的な言語の意図、およびいくつかのソースコードが提供されているという事実(上部にリンクされているように)が、この特定のコードは提供されていないということは、一般市民がこのコードを見ないか、持っていません。したがって、逆コンパイルが合法であることは、複製も合法であると見なすべきではなく、リファレンスとして使用できるようにするために(つまり、デバッグなど)、そうするべきではありません。


4
質問を書いているとき、私は法的な側面については考えていませんでした。たぶん、本当に合法な方法は、クリーンルームの実装だけです。
TarnayKálmán16年

3
こんにちはソロモンは、私はちょうど私たちが逆コンパイルすることが示唆場合は感じるだろうか思ったんだけど、あなたの(最高)ライブラリのいずれか、彼らはそれらのソースコードを作業したり、コピーする方法を見ている:)へ
topanswers.xyz試み-トムV

1
アセンブリーを交換することの不可能性についての編集への返信:アセンブリーを交換したくありません。自分のタイプに別の名前を付けても大丈夫です。私は(まだ?)別の名前のタイプに移行するのが難しいと思いません(限られたバイナリツリーの使用例では)同じ動作です。ストアドプロシージャの型へのすべての参照を変更する必要がありますが(それは管理可能です)、ALTER(多分CREATE // UPDATE / DROP)で一部の列を変更しなければなりませんが、それはそれだけです。
TarnayKálmán16年

1
@TomVそれは上げるのに良いポイントなので、そうしてくれてありがとう。私はこの問題について、その両側にいて、自然に好奇心旺盛な人として、行き来しています。コードが必要な理由はさまざまです(デバッグ、テクニックの習得、コピー/スチールなど)。いくつかは大丈夫です。人々はSQL#を逆コンパイルする方法を尋ね、それが合法である可能性があることを知っていて、秘密よりもイノベーションに依存していることを思い出しました。私は「ハウツー」の側面に焦点を合わせて急いで答えていたと思いますが、説明を状況のさまざまな側面に置き換えて私の答えを更新しました。
ソロモンRutzky 16

6

srutzkyが回答の中でMicrosoftのソースコードの一部が利用可能であり、リクエストした関数がリストされていない場所を指摘したので、オープンソースライセンスではソースコードを利用できないと結論付けることができます。あなたの質問はそれがオープンソースであることについてであり、ソースコード見ることができることについてではありませんでした。

ことを考えるとEULAは、次のことを述べています:

その際、特定の方法でのみ使用を許可するソフトウェアの技術的制限を遵守する必要があります。次のことはできません
。...
ソフトウェアのリバースエンジニアリング、逆コンパイル、逆アセンブル。ただし、この制限にもかかわらず、適用される法律で明示的に許可されている場合を除きます。

だからあなたは自分でロジックを実装することに残っていると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.