Apakah hierarkiid CLR open-source?

9

Built-in hierarchyid adalah CLR yang menyimpan jalan dalam bentuk biner yang efisien, dan menyediakan fungsionalitas berguna lainnya.

Sayangnya, ada batas seberapa dalam jalur yang diwakili dapat, dan itu ~ 1427 untuk pohon biner. Saya ingin menambah batas itu untuk aplikasi kompleks yang ada yang terikat untuk mencapai batas ini. Saya tidak ingin mengubah antarmuka jenis ini. Saya tidak yakin bahwa saya bisa melakukan perubahan antarmuka tipe tanpa memperkenalkan bug halus ke semua kode yang harus diubah sebagai hasilnya.

Saya bisa (secara teori) membuat "binhierarchyid" CLR UDT yang mengimplementasikan antarmuka yang sama dengan hierarki, tetapi hanya mendukung pohon biner. Itu seharusnya membuat saya kedalaman ~ 7000 sementara masih tersisa di dalam batas 900 byte. Tidak yakin seberapa besar usaha yang akan dilakukan.

Apakah sumber hierarki CLR ini tersedia di suatu tempat, sehingga saya bisa membuat sendiri berdasarkan itu yang mendukung struktur yang lebih dalam?

Tarnay Kálmán
sumber
Saya tertarik untuk mengetahui apa yang Anda modelkan. Bisakah Anda jelaskan?
wBob

Jawaban:

6

Banyak kode sumber .NET tersedia, dan sebagian besar adalah Open Source, meskipun di bawah berbagai lisensi. Masih ada kode lain, tetapi hanya untuk tujuan referensi dan tidak dapat digunakan dalam kode Anda.

Mengingat bahwa tujuan yang dinyatakan adalah:

Saya ingin menambah batas itu untuk aplikasi kompleks yang ada yang terikat untuk mencapai batas ini. Saya tidak ingin mengubah antarmuka jenis ini. Saya tidak yakin bahwa saya bisa melakukan perubahan antarmuka tipe tanpa memperkenalkan bug halus ke semua kode yang harus diubah sebagai hasilnya.

jika maksudnya adalah untuk memperbarui jenis Hierarki saat ini, maka apakah kode itu Open Source atau tidak tidak relevan karena bahkan jika itu, Anda tidak akan pernah dapat memperkenalkan perubahan apa pun ke dalam sistem keseluruhan: bahkan jika Anda dapat mengganti Majelis di SQL Server, Anda tidak akan dapat menandatanganinya dengan Sertifikat / Kunci Pribadi yang sama dan karenanya tidak akan digunakan oleh sistem.

Namun, Anda bisa membuat SQLCLR Type-Defined Type (UDT) Anda sendiri untuk memberikan fungsionalitas yang diinginkan.

Namun , karena berkaitan dengan mendapatkan pemahaman yang lebih baik tentang .NET Framework:

Anda dapat melihat kode sumber dari sebagian besar barang di sini: https://github.com/Microsoft/referencesource

dan bahkan lebih banyak barang di sini: https://github.com/dotnet/corefx

Kedua repositori yang disebutkan di atas adalah Open Source dan sebagian besar diatur di bawah lisensi MIT, meskipun Anda perlu meninjau info lisensi di setiap lokasi, dan kadang-kadang di berbagai folder, untuk memastikan.

Banyak kode yang tersisa dapat ditemukan di sini: http://referencesource.microsoft.com/

Kode yang ditemukan di ReferenceSource.Microsoft.com (tautan langsung di atas) yang tidak juga ditemukan di dua tautan pertama (yang merupakan Sumber Terbuka) bukan Sumber Terbuka dan sebaliknya diatur oleh LISENSI SUMBER REFERENSI SUMBER MICROSOFT (MS-RSL) , bagian yang relevan sedang (diedit untuk menempatkan definisi "penggunaan referensi" hanya setelah penggunaan frasa itu):

Pemberi Lisensi memberi Anda lisensi hak cipta bebas royalti yang tidak dapat dipindahtangankan, tidak eksklusif, di seluruh dunia, untuk mereproduksi perangkat lunak untuk penggunaan referensi: penggunaan perangkat lunak dalam perusahaan Anda sebagai referensi, dalam bentuk hanya baca, untuk keperluan debugging saja produk Anda, mempertahankan produk Anda, atau meningkatkan interoperabilitas produk Anda dengan perangkat lunak, dan secara khusus mengecualikan hak untuk mendistribusikan perangkat lunak di luar perusahaan Anda.

Namun, tampaknya Microsoft.SqlServer.*namespace tidak tersedia di salah satu lokasi tersebut. Yang berarti bahwa jawaban sederhana untuk pertanyaan: "is HierarchyID Open Source?" adalah: Tidak .

Jika keinginannya adalah untuk melihat kode sumber, maka Anda harus membuka DLL - Microsoft.SqlServer.Types.dll - dengan dekompiler. TETAPI, ada potensi masalah hukum dan / atau etika untuk dihadapi. Ini adalah kode hak milik sehingga ada dua hal utama yang perlu dipertimbangkan:

  • seperti yang dinyatakan dalam Perjanjian Lisensi Pengguna Akhir SQL Server (EULA) (dan seperti dikutip dalam jawaban @ TomV ), Anda hanya dapat " merekayasa balik, mendekompilasi atau membongkar " kode yang tidak disediakan " hanya sejauh hukum yang berlaku mengizinkan secara tegas " . Artinya bagi sebagian orang, adalah sah untuk melakukan ini, tetapi bagi orang lain, tidak terlalu banyak. Jadi, Anda mungkin ingin berkonsultasi dengan pengacara kekayaan intelektual setempat.

  • jika legal untuk Anda dekompilasi, maksud dari bahasa hukum, ditambah fakta bahwa beberapa kode sumber disediakan (sebagaimana ditautkan di atas) tetapi kode khusus ini tidak, tentu menyiratkan bahwa keinginan tersebut adalah untuk masyarakat umum untuk tidak melihat atau memiliki kode ini. Jadi menjadi legal untuk didekompilasi tidak boleh dianggap sebagai legal untuk digandakan, tetapi lebih dari itu dapat digunakan sebagai referensi (yaitu untuk debugging, dll).

Solomon Rutzky
sumber
4
Saya belum memikirkan aspek hukum saat menulis pertanyaan. Saya kira, satu-satunya cara yang benar-benar legal adalah penerapan ruang bersih.
Tarnay Kálmán
3
Hai Solomon, saya hanya ingin tahu bagaimana perasaan Anda jika kami menyarankan untuk mendekompilasi pustaka (luar biasa) Anda agar dapat melihat bagaimana cara kerjanya atau menyalin kode sumbernya :)
Tom V - coba topanswers.xyz
1
Membalas hasil edit Anda tentang ketidakmungkinan mengganti unit: Saya tidak ingin mengganti unit. Saya baik-baik saja dengan tipeku memiliki nama yang berbeda. Saya belum (belum?) Melihat kesulitan dalam bermigrasi ke jenis yang berbeda nama yang (untuk kasus penggunaan pohon biner terbatas) memiliki perilaku yang sama. Saya harus mengubah semua referensi ke tipe dalam prosedur tersimpan (tapi itu bisa dikelola), dan ALTER (mungkin BUAT // UPDATE / DROP) beberapa kolom, tapi hanya itu.
Tarnay Kálmán
1
@ TomV Itu poin yang bagus untuk disampaikan, terima kasih telah melakukannya. Saya bolak-balik tentang masalah ini, berada di kedua sisi dan menjadi orang yang ingin tahu. Ada beberapa alasan yang berbeda untuk menginginkan kode (debugging, mempelajari teknik, menyalin / mencuri, dll), ada yang ok. Orang-orang bertanya bagaimana mendekompilasi SQL # dan bahkan mengetahui bahwa itu bisa legal, dan mengandalkan inovasi lebih dari kerahasiaan, saya ingat tidak menghargainya. Saya kira saya menjawab dengan tergesa-gesa, dengan fokus pada aspek "bagaimana", tetapi telah memperbarui jawaban saya menggantikan instruksi dengan berbagai aspek situasi.
Solomon Rutzky
6

Ketika srutzky mengarahkan Anda ke beberapa lokasi dalam jawabannya di mana beberapa kode sumber Microsoft tersedia dan fungsi yang Anda minta tidak tercantum, saya pikir kami dapat menyimpulkan bahwa kode sumber tidak tersedia di bawah lisensi sumber terbuka apa pun, dan sepertinya pertanyaan Anda adalah itu open source, bukan tentang bisa melihat kode sumber .

Mengingat bahwa EULA menyatakan sebagai berikut:

Dengan demikian, Anda harus mematuhi batasan teknis apa pun dalam perangkat lunak yang hanya memungkinkan Anda menggunakannya dengan cara tertentu. Anda tidak boleh:
...
merekayasa balik, mendekompilasi atau membongkar perangkat lunak, kecuali dan hanya sejauh diizinkan oleh undang-undang yang berlaku, terlepas dari batasan ini;

Jadi saya khawatir Anda harus menerapkan logika sendiri.

Tom V - coba topanswers.xyz
sumber