8

我使用反射器查看通用字典集合 (Dictionary<TKey, TValue>) 的代码并修改该代码以使其线程安全。我想在我的博客上发布这段代码,以便其他人可以查看它(如果我做错了什么,请告诉我),如果他们愿意,也可以在他们的项目中使用它。从法律上讲,我可以这样做吗?我大量修改了原始代码(并且只从原始代码中获取了一些方法,而不是全部)但基本代码仍然相同,如果我这样做会不会有任何潜在的法律问题?

注意:以防万一有人指向我线程安全字典的实现,我知道已经有使用 ReaderWriterLockSlim 的线程安全字典的实现,但我不希望在读取时(仅在写入时)进行任何锁定,除了我'我使用 .net 2.0 而不是 3.5,所以无论如何我都不能使用 ReaderWriterLockSlim,而且我在某处读到 ReaderWriterLock 在 2.0 中的性能非常差,所以我不想使用它。

4

3 回答 3

12

Microsoft 的 Dictionary 源代码由Microsoft Reference Source License 的修改版本管理,它基本上只允许您阅读代码。所以不,您绝对不允许在此许可下重新分发修改后的代码。

另一方面,您可以采用Mono 的 Dictionary<K,V> 实现并对其进行修改以满足您的需求,因为它在 MIT/X11 下获得许可。与 .net 中的相比,它的性能相当好。

于 2009-03-24T23:52:19.313 回答
6

除非 .NET 框架以源代码形式发布,并且在允许您进行和分发此类修改(通常称为衍生作品)的许可下发布,否则,不,您现在可以这样做。

虽然 .NET 框架的部分源代码已经发布,但它们仅在参考许可下可用。直接从那个页面;

Microsoft 参考源代码许可证 (Ms-RSL) 是 Microsoft 源代码许可证中限制性最强的。许可证禁止所有源代码的使用,除了出于参考目的查看代码。该许可的目的是使许可人能够发布更敏感的知识产权资产,仅用于审查目的。

如果您希望提供自己的线程安全字典集合,那很好,而且绝对是一个崇高的目标,但是您不能将其基于您无权修改的内容。

于 2009-03-24T23:41:20.200 回答
4

首先,请咨询律师-我不是律师,所以请对我所说的话持保留态度。此外,此建议将以美国/西欧为中心,因为这些是我最了解的法律。

话虽如此....

从技术上讲,你甚至不能做你做过的事情。.NET Framework 被许可作为操作系统的补充。如果您阅读 .NET 2.0 的 EULA,它包括:

Microsoft Corporation (or based on where you live, one of its affiliates) licenses this supplement to you. If you are licensed to use Microsoft Windows operating system software (the “software”), you may use this supplement. You may not use it if you do not have a license for the software. You may use a copy of this supplement with each validly licensed copy of the software.

Windows Vista/XP 的许可证根据 .NET Framework 附带的 EULA 确定您的合法权利。

这会阻止您执行此操作。尤其是:

从 Windows Vista 许可协议:

You may not

· work around any technical limitations in the software

· reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation

这是他们的前两点——这两点听起来你都在尝试。重新分配包含在条款的后面。有关完整的详细信息,请阅读您的操作系统的许可证

于 2009-03-24T23:53:30.950 回答