我可以翻译.NET基础类库(BCL)吗?

3

BCL

我的具体问题是,我这样做是否违反了最终用户许可协议?


哎呀,糟糕!编辑得不太好啊!谢谢 Chris。 - GEOCHET
7个回答

16

为什么要使用反射器?只需查看原始源代码

经过更多研究,我发现.NET Framework受到与其安装的操作系统相同的最终用户许可协议的约束,但还有一些额外条款,您可以通过运行以下命令并选择适合您语言的正确选项(1033是英语)找到这些条款。

where /R "%WINDIR%\Microsoft.NET" eula*.*

由于微软操作系统的最终用户许可协议明确规定“反编译或反汇编”是不允许的,而通过Reflector查看代码可能被认为属于这一范畴,因此从技术上讲,通过Reflector查看.NET Framework源代码是不合法的。尽管可以查看原始代码... 这是一个有趣的悖论。


5
需要注意的是,任何限制反编译/反汇编/逆向工程的条款可能根据不同司法管辖区的规定无法执行。例如,一些国家的法律对此有明确规定,允许为了实现互操作性而进行反编译。 - Pavel Minaev

4
为什么要使用反编译器?直接查看原始源代码即可!但是你应该提到查看源代码的注意事项。正如Frans Bouma所写:不要查看受“参考许可证”保护的.NET源代码。他列举了几个风险,都与获取非自由知识有关,这可能在编写自己的软件时会带来问题。最严重的法律风险可能与非自愿侵犯专利有关。此外,你被明确禁止为某些其他项目做贡献,例如ReactOS(可能还包括Mono),这是在查看类似源代码后进行的。将来,这也可能包括.NET源代码。

那么这只是一条评论,而不是答案。为什么不将其作为评论留在问题下面呢? - GEOCHET
5
让我想想。也许因为它太长了?! 我认为将这个作为自己的答案进行发布并没有任何问题,因为它实际上与问题相关并且是有用的信息。值得一提的是,我起初确实将其写成了评论,当评论变得太长时,我才将其更改为回答。 - Konrad Rudolph

2

是的,你完全可以。你还可以设置VS2008来调试BCL。考虑到Microsoft提供了像ildasm这样的工具,让你可以看到IL代码,我不认为这会成为一个问题。


我的DIY商店出售撬棍,但这并不意味着在营业时间外非法闯入和浏览。 - Rowland Shaw

2
较为重要的问题是,一份法律文件能否阻止您查看存储在您拥有的磁盘上的一系列字节,并对其进行解释?很难想象任何法院会认为这样的文件具有可执行性。(这与事后分发信息的问题有所不同)。

1

1

根据您对许可证和知识产权法律的了解程度,您可能认为使用Reflector是可以接受的,而不考虑.NET Framework EULA,因为您可能认为反向工程的禁止是不可执行的(这是我的看法,但我又算什么呢?)。

以下是Reference Source Code Center (RSCC) Blog关于Reflector的说法:

《RSCC和.NET Reflector的区别》
.NET Reflector可以让你轻松查看、浏览和搜索.NET程序集的类层次结构,即使你没有它们的代码。使用它,你可以反编译和分析C#、Visual Basic和IL中的.NET程序集。
而参考源代码中心及其在Visual Studio 2008中的集成,则为在Microsoft平台上构建应用程序的开发人员提供了丰富的调试场景。使用它,你可以快速轻松地访问Microsoft平台的源代码。
那么,RSCC和.NET Reflector之间最重要的区别是什么呢?
- RSCC只能显示我们当前支持的.NET Framework源代码,而.NET Reflector可以让你看到任何.NET程序集的反射代码。 - RSCC使你能够从Visual Studio内部调试和步入源代码。 - 这两个工具都让你用C#查看.NET Framework源代码,但作为开发人员,你获得的信息有所不同:[示例已省略]

你不想使用RSCC源代码的一个原因是,许可证禁止您在以下情况下使用它:

如果您正处于设计、开发或测试其他非Windows操作系统的具有相同或基本相同特性或功能的软件,则不能使用该软件。

因此,如果您涉及Mono,您将不想使用RSCC。根据您的小心程度/偏执程度,即使您仅是Mono的用户,这可能也适用,因为这可能被“测试”覆盖。但是,我认为Mono开发人员也可能小心谨慎,甚至不使用像Reflector之类的东西(老实说,我不知道他们的政策是什么)。


1

正如Greg所指出的那样,

[操作系统最终用户许可协议明确规定]“反编译或反汇编”是不允许的。

另一方面,微软自己的MSDN杂志写道:

[...] 我认为.NET Reflector的最佳用途是检查.NET Framework程序集和方法。[...] 通过使用.NET Reflector,您可以看到Microsoft在编写DataSet的ReadXml方法时使用了什么,或者在从配置文件中读取数据时他们做了什么。.NET Reflector还是创建对象(如HttpHandlers或配置处理程序)的最佳实践的绝佳方式,因为您可以看到Microsoft团队实际上是如何在Framework中构建这些对象的。

我不是律师,但我猜想当他们建议你违反EULA时,强制执行EULA将会相当困难...


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