是否可以发布从.net框架中获取并在线修改的代码?

时间:2009-03-24 23:38:17

标签: c# .net thread-safety

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

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

3 个答案:

答案 0 :(得分:12)

Microsoft的Dictionary源代码由a modified version of the Microsoft Reference Source License管理,基本上只允许您读取代码。所以不,绝对不允许您根据此许可证重新分发修改后的代码。

另一方面,您可以使用Mono's implementation of Dictionary<K,V>并对其进行修改以满足您的需求,因为它是在MIT / X11下获得许可的。它执行quite well compared to the one in .net

答案 1 :(得分:6)

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

虽然源代码部分是.NET框架have been released,但它们仅在reference license下可用。直接从该页面开始;

  

Microsoft参考源许可证   (Ms-RSL)是最严格的   Microsoft源代码许可证。   许可证禁止所有使用   查看以外的源代码   代码供参考。该   此许可的意图是启用   许可人要发布,以供审查   目的只是,更敏感   知识产权资产。

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

答案 2 :(得分:4)

首先,请咨询律师 - 我不是一个人,所以请理所当然地说。此外,这个建议将以美国/西欧为中心,因为这些是我最了解的法律。

有人说......

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

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

这是他们的前两点 - 这两点听起来都是你想要的。重新分配将在后面的术语中包含。有关完整的详细信息,请read the license of your OS