从.NET框架中获取并在线修改代码是否可行?

8
我使用反射器查看了泛型字典集合(Dictionary<TKey, TValue>)的代码,并对其进行了修改,使其线程安全。我想在我的博客上发布这段代码,以便其他人可以审查它(并告诉我是否有错),并在他们的项目中使用它。从法律角度来看,我能这样做吗?我对原始代码进行了大量修改(只取了一些方法而不是整个代码),但基本代码仍然相同。如果我这样做会有任何潜在的法律问题吗?
注意: 万一有人指向线程安全字典的实现,我知道已经有使用ReaderWriterLockSlim实现的线程安全字典了,但我不希望在读取时加锁(只在写入时加锁),此外,我正在使用.NET 2.0而不是3.5,所以我无法使用ReaderWriterLockSlim,另外我在某个地方读到说2.0版本的ReaderWriterLock性能非常差,所以我不想使用它。

更有趣的文章将是如何锁定写入但不锁定读取以及如何处理迭代器。 - Hans Passant
在我看来,让一个字典内部实现线程安全是人为的;更常见的情况是需要跨一组相关操作(例如ContainsKey/Add/Remove)实现线程安全。除非你将其更改为接受委托(或类似),否则我个人并不认为它有多大用处。 - Marc Gravell
@nobugz,如果你有兴趣知道怎么做,请给我发送电子邮件。如果可以联系到你的话,我可以告诉你如何操作。 - Waleed Eissa
@Marc,你为什么要在Add()中使用ContainsKey()?直接使用索引器即可,例如dic[key] = value; 如果您有特殊需求(不希望值被替换),可以添加一个新方法,例如AddIfNotExists()并使其线程安全,这是我会做的。 - Waleed Eissa
嗨,Waleed,你可以请求更多信息或接受一个答案吗? - Jb Evain
3个回答

12

如果你能提供一个替代方案,那么给出一个温和的回答会更好。+1 - Wim Coenen
关于 Mono 替代方案的观点很好!此外,参考源代码许可证仅在您特别下载源代码时才有效。如果是从框架反编译的,则 .NET Framework EULA 是相关的许可证... - Reed Copsey
Reed:是的,在任何情况下都不行 :) - Jb Evain

6
除非.NET框架以源代码形式发布并且在允许您制作和分发此类修改(通常称为派生作品)的许可证下发布,否则不可以这样做。虽然部分.NET框架的源代码已经发布了,但它们仅在参考许可证下提供。从页面中直接引用如下;“Microsoft参考源代码许可证(Ms-RSL)是Microsoft源代码许可证中最限制的许可证。该许可证禁止除查看代码以外的所有源代码使用。该许可证的目的是使许可方仅发布更敏感的知识产权资产以进行审查。”如果您希望提供自己的线程安全字典集合,那很好,绝对是一个高尚的目标,但您不能基于没有修改权的东西来实现它。

4
首先,咨询一位律师-我不是律师,所以请谨慎对待我的话。此外,这些建议将以美国/西欧为中心,因为这些是我最了解的法律。

话虽如此....

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

Microsoft Corporation(或者根据您居住地的不同,其附属公司)向您许可此补充内容。如果您获得使用Microsoft Windows操作系统软件(“软件”)的许可,则可以使用此补充内容。如果您没有软件的许可证,则不得使用它。您可以在每个有效许可的软件副本上使用此补充内容。

Windows Vista / XP的许可证根据随.NET Framework提供的EULA确定您的法律权利。

这会阻止您这样做。特别是:

来自Windows Vista许可协议:

您可能不

·绕过软件中的任何技术限制

· 反向工程、反编译或反汇编软件,除非适用法律明确允许,即使受到此限制的影响。 这是他们的前两个要点,听起来你正在尝试做这两件事。再分发在后面的条款中包括。有关完整细节,请阅读您操作系统的许可证

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接