【问题标题】:Windows APIs - Prohibited by License for Use With Mono?Windows API - 许可证禁止与 Mono 一起使用?
【发布时间】:2015-02-24 17:45:23
【问题描述】:

潜伏已久,第一次提问。

我有一个问题,我需要能够反编译为在 Windows 上运行而构建的 DLL……但我需要在 Linux 上执行此操作……在非交互式自动化工具中。我通过获取 ILSpy 源代码、撕下 GUI、将 ILSpy EXE 敲入 DLL、为其编写 CLI、在 Mono 下构建和运行它解决了这个难题。效果很好,但存在许可问题。

我问我们的居民许可机构“对于我们的目的,这是可以接受的 MIT 许可的 ILSpy 的使用吗?”他的回答的核心是

MIT 许可证没问题。但是使用 Mono 运行 .NET 应用程序可能会出现问题。如果它们需要任何 Windows DLL,您可能无法这样做,因为大多数 Windows DLL 明确表示它们只能在 Windows 操作系统上运行。当它在 Mono 下运行时,我们必须 [竭尽全力] 避免 [在另一个项目上] 尝试使用 Windows API。

然后他离开了公司。甜的。有谁知道“标准”.NET DLL(系统、System.Core 等)是否真的仅限于 Windows 平台?如果是这样,如何为 Mono 编写任何重要的 .NET 应用程序?必须使用 Mono 重新构建解决方案才能在 Mono 上运行 - 该进程是否链接到 Mono DLL 以代替 MS DLL?

我在此处和 Interwebulator 上查看了答案,但我发现的只是有关 Mono 许可的问题/答案。我感谢任何人对该主题的见解。

【问题讨论】:

  • Mono 提供自己的 System、System.Core 等版本。它们没有 Windows 依赖项。反编译您不拥有其源代码的 DLL 是否可以接受也是显而易见的。从来都不是。
  • 我们确实拥有源代码。那我们为什么要反编译呢?血淋淋的细节太长了,这里就不赘述了。感谢您的洞察力 - 作为一个单声道菜鸟,这非常有帮助。
  • @HansPassant:我相当肯定世界上有些地方逆向工程是一种受保护的活动。所以它不像你建议的那样切割和干燥。

标签: .net windows dll mono


【解决方案1】:

一个应用程序是否可以移植到Mono并在Windows以外的其他操作系统上运行,取决于两个关键,

  1. 它的任何依赖项在 Mono 上是否可用。
  2. 某些源代码是否仅许可用于 Windows。

两者可以相关,也可以不相关。下面是几个例子,

依赖可以在Mono上使用,但是license不允许

很久以前,Microsoft 决定为其用户发布 MEF 源代码,但仅在 Windows 使用下授权(是的,这意味着它不是 OSI 条款下的开源)。你可以在 Miguel 的博客上找到这个故事,

http://tirania.org/blog/archive/2008/Sep-07.html

当然,我们看到 Microsoft 很快改变了主意,转而使用完全符合 OSI 的许可证,

http://tirania.org/blog/archive/2008/Oct-02.html

因此,如果您将任何应用程序迁移到 Mono,请仔细分析依赖许可。如果任何第三方供应商向您提供仅限 Windows 的许可,您必须与他们讨论。

许可可以,但代码在 Mono 上失败

这种情况比较常见,比如DockPanel Suite

代码在MIT下完全开源,但严重依赖Win32 API实现焦点/拖放相关操作,无法完全移植到Mono。

同样,我相信 ILSpy(以及它的依赖项)是完全开源的,并且没有限制只能在 Windows 上使用。为什么大多数人认为 ILSpy 仅适用于 Windows,因为 ILSpy 人选择使用 WPF 来构建 UI,这将其主要用户群限制在 Windows。

如果您使用 GTK# 或其他 UI 框架构建跨平台 UI,其核心功能可以随心所欲。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多