层次结构CLR是开源的吗?


9

内置的architectureid是CLR,它以有效的二进制形式存储路径,并提供其他有用的功能。

不幸的是,表示路径的深度是有限的,对于一棵二叉树来说大约是1427。我想为必然要达到此限制的复杂的现有应用程序增加该限制。我不想更改类型的界面。我不相信我可以开始更改类型的接口,而不会在所有必须更改的代码中引入细微的错误。

从理论上讲,我可以创建一个“ binhierarchyid” CLR UDT,它实现与hierarchicalid相同的接口,但仅支持二进制树。那应该使我的深度达到〜7000,同时仍保持在900字节的限制之内。不确定这项工作有多大。

是否可以在任何地方找到该architearchid CLR的来源,以便我可以基于它创建更深层次的结构呢?


我很想知道您在建模什么。你能描述吗?
wBob

Answers:


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参考源许可证(MS-RSL)控制,相关部分将被删除(在该词组的用法之后,对其进行了轻微的编辑,以将“引用用法”的定义放在首位):

许可方授予您不可转让,非排他的,全球范围内的免版税版权许可,以复制该软件供参考使用:您公司内部的软件以只读形式作为参考,仅供调试之用您的产品,维护您的产品或增强产品与该软件的互操作性,并且明确排除了将软件分发到公司外部的权利。

但是,似乎Microsoft.SqlServer.*在这些位置中的任何位置都不提供名称空间。这意味着对以下问题的简单答案:“ HierarchyID是开源的吗?” 是:

如果希望看到源代码,则需要使用反编译器打开DLL- Microsoft.SqlServer.Types.dll。但是,存在潜在的法律和/或道德问题要处理。这专有代码,因此有两点要考虑:

  • 如SQL Server最终用户许可协议(EULA)所述(并在@TomV的答案中引用),仅在适用法律明确允许的范围内,您才能“ 反向工程,反编译或反汇编 ”未提供的代码” 。这意味着对于某些人来说,这样做是完全合法的,但是对其他人而言,则不是那么多。因此,您可能需要咨询当地的知识产权律师。

  • 如果您要进行反编译是合法的,则应遵循法律语言的意图,再加上提供了某些源代码(位于顶部的链接),但没有提供此特定代码的事实,这肯定意味着,这是普通大众的愿望没有看到或没有此代码。因此,不应认为反编译是合法的,因为它也可以复制,但更多的以便可以用作参考(即用于调试等)。


4
在撰写问题时,我没有考虑过法律方面的问题。我想,唯一真正合法的方法是实施洁净室。
TarnayKálmán'16

3
所罗门,您好,我只是想知道您是否建议我们对您的(优秀)库进行反编译,以了解它们的工作原理或复制它们的源代码:)
Tom V-尝试topanswers.xyz

1
回复您关于无法更换部件的编辑:我不希望更换部件。我同意我的类型使用其他名称。我(尚未?)看不到迁移到具有相同行为(对于我有限的二叉树用例)的其他命名类型的困难。我将不得不在存储过程中更改对类型的所有引用(但这是可管理的),并在某些列中更改ALTER(也许是CREATE // UPDATE / DROP),仅此而已。
TarnayKálmán'16

1
@TomV这是一个很好的提出,所以谢谢你这样做。在这个问题上,我来回走了,站在双方,而且是一个自然好奇的人。想要代码有多种原因(调试,学习技术,复制/窃取等),有些原因还可以。人们曾经问过如何反编译SQL#,甚至知道它是合法的,并且不仅仅依赖于秘密,而更依赖于创新,我想起来对此并不赞赏。我想我正在匆忙回答,重点是“如何做”方面,但是已经更新了我的回答,将指示替换为情况的各个方面。
所罗门·鲁茨基

6

就像srutzky指出您在他的答案中的某些位置,其中某些Microsoft源代码可用,而您所请求的功能未列出,我认为我们可以得出结论,在任何开放源代码许可下该源代码都不可用,并且看起来您的问题是关于它是开源的,而不是关于能够看到源代码的问题

鉴于EULA声明如下:

这样做时,您必须遵守该软件中的任何技术限制,这些限制仅允许您以某些方式使用它。您不得:
...
对软件进行逆向工程,反编译或反汇编,但有此限制的情况除外,并且仅在适用法律明确允许的范围内;

因此,恐怕您将自己实现逻辑。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.