hierarchyid CLR은 오픈 소스입니까?


9

내장 계층 구조 ID는 경로를 효율적인 이진 형식으로 저장하고 다른 유용한 기능을 제공하는 CLR입니다.

불행히도 표현 된 경로의 깊이는 제한되어 있으며 이진 트리의 경우 ~ 1427입니다. 이 제한에 도달해야하는 복잡한 기존 응용 프로그램에 대한 제한을 늘리고 싶습니다. 유형의 인터페이스를 변경하고 싶지 않습니다. 결과적으로 변경해야 할 모든 코드에 미묘한 버그를 도입하지 않고 유형의 인터페이스를 변경하지 않아도 될 것입니다.

이론적으로는 hierarchyid와 동일한 인터페이스를 구현하지만 이진 트리 만 지원하는 "binhierarchyid"CLR UDT를 만들 수 있습니다. 그것은 여전히 ​​900 바이트 제한 안에 남아있는 동안 ~ 7000의 깊이를 가져야합니다. 얼마나 큰 사업이 될지 잘 모르겠습니다.

이 계층 구조 CLR의 소스를 어딘가에 사용할 수 있으므로 더 깊은 구조를 지원하는 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 (위의 링크)에서 처음 두 링크 (오픈 소스)에도 없는 코드 는 오픈 소스가 아니며 대신 MICROSOFT REFERENCE SOURCE LICENSE (MS-RSL) 에 의해 관리됩니다 , 관련 부분 (해당 문구의 사용법에 따라 "참조 사용"의 정의를 표시하도록 약간 편집 됨) :

라이센스 허가자는 참조 용도로 소프트웨어를 재생할 수있는 양도 불가능하고 비 독점적 인 전 세계 로열티가없는 저작권 라이센스를 부여합니다. 디버깅 목적으로 만 회사 내에서 소프트웨어를 읽기 전용 형태로 참조로 사용 귀하의 제품, 제품 유지 관리 또는 소프트웨어와 제품의 상호 운용성을 향상 시키며, 특히 회사 외부에 소프트웨어를 배포 할 수있는 권리는 제외됩니다.

그러나 Microsoft.SqlServer.*해당 위치에서 네임 스페이스를 사용할 수없는 것 같습니다 . "HierarchyID 오픈 소스인가?" 입니다 : 아니요 .

소스 코드를보고자하는 경우 디 컴파일러로 DLL ( Microsoft.SqlServer.Types.dll) 을 열어야합니다 . 그러나 다루어야 할 잠재적 인 법적 및 / 또는 윤리적 문제가 있습니다. 이것은 이다 고려해야 할 두 가지 사항이있다, 그래서 독점 코드 :

  • 은 SQL Server 최종 사용자 사용권 계약 (EULA)에 명시된 바와 같이 (그리고 TomV의 @에 인용 대답 ) 할 수 있습니다 만 " 리버스 엔지니어링, 디 컴파일 또는 분해 ", "비 제공된 코드 관련 법률에서 명시 적으로 허용하는 범위 내에서만 " . 어떤 사람들에게는 이것을하는 것이 완벽하게 합법적이지만 다른 사람들에게는 그렇게하지 않는다는 것을 의미합니다. 따라서 현지 지적 재산권 변호사와 상담하고 싶을 수도 있습니다.

  • 만약 당신이 디 컴파일하는 것이 합법적이라면, 합법적 언어의 의도와 일부 소스 코드가 제공된다는 사실 (상단에 링크 된 것처럼) 그러나이 특정 코드는 그렇지 않다는 사실은 일반 대중이 욕구가 있다는 것을 암시합니다 이 코드를 보거나 가지고 있지 않습니다. 따라서 디 컴파일하는 것이 합법적 인 것은 복제하는 것이 합법적 인 것으로 간주되어서는 안되며 참조로 (예를 들어 디버깅 등) 사용할 수 있습니다.


4
나는 질문을 쓸 때 법적 측면에 대해 생각하지 않았습니다. 실제로 합법적 인 유일한 방법은 클린 룸 구현입니다.
Tarnay Kálmán

3
안녕 솔로몬, 나는 우리가 당신의 (우수한) 라이브러리 를 디 컴파일 하여 그들이 어떻게 작동하는지 또는 소스 코드를 복사하도록 제안한다면 당신이 어떻게 느끼는지 궁금 합니다. :)
Tom V-topanswers.xyz

1
어셈블리를 교체 할 수 없다는 편집 내용에 대한 회신 : 어셈블리를 교체하고 싶지 않습니다. 다른 이름을 가진 유형에 문제가 없습니다. (아직?) 이진 트리 사용 사례의 경우 동일한 동작을 가진 다른 이름의 유형으로 마이그레이션하는 데 어려움이 없습니다. 저장 프로 시저에서 유형에 대한 모든 참조를 변경해야하지만 (관리 가능하지만) 일부 열은 ALTER (CREATE // UPDATE / DROP 일 수 있음)이지만 그 정도입니다.
Tarnay Kálmán

1
@TomV 그게 좋은 지적 이니까 그렇게 해주셔서 감사합니다. 나는이 문제에 대해 앞뒤로 움직이며 양쪽에 있고 자연스럽게 호기심 많은 사람입니다. 코드를 원하는 이유 (디버깅, 기술 학습, 복사 / 훔치기 등)에는 여러 가지 이유가 있습니다. 사람들은 SQL #을 디 컴파일하는 방법을 물어 보았고 그것이 합법적 일 수 있다는 사실을 알고 심지어 비밀 이상의 혁신에 의존하고 있다는 사실을 알고 있습니다. 나는 "어떻게 하는가"측면에 초점을 맞추고 급히 대답했지만, 지침을 상황의 다양한 측면으로 대체하여 내 대답을 업데이트했습니다.
Solomon Rutzky

6

srutzky 가 Microsoft의 소스 코드 중 일부를 사용할 수 있고 요청한 기능이 나열되지 않은 답변의 일부 위치를 지적 했으므로 오픈 소스 라이센스로 소스 코드를 사용할 수 없다고 결론 내릴 수 있다고 생각합니다. 귀하의 질문은 소스 코드 수 없다는 것이 아니라 오픈 소스에 관한 것 입니다.

점을 감안 최종 사용자 사용권 계약은 다음을 말한다 :

그렇게 할 때 특정 방식으로 만 사용할 수있는 소프트웨어의 기술적 제한 사항을 준수해야합니다. 귀하는 다음을 수행 할 수 없습니다.
...
이 제한에도 불구하고 해당 법률이 명시 적으로 허용하는 경우를 제외하고 소프트웨어를 리버스 엔지니어링, 디 컴파일 또는 분해 할 수 없습니다 .

따라서 로직을 직접 구현해야 할 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.