我正在尝试学习更多关于移动/平板电脑开发的知识,作为一名.NET开发人员,我自然会被Mono所吸引。但是我很困惑--我以为Mono是免费和开源的;然而,所有的迹象似乎都表明Mono是一种“付费游戏”交易(https://store.xamarin.com/)。
谁能帮我理解一下哪一个是正确的答案?
谢谢!
哑光
发布于 2011-10-29 00:28:38
更新(2016/03/31)
历史记录答案
首先,让我们弄清楚Mono案例:-)
Mono在free speech中是免费的,而不是free beer。你可以免费获得它(即不需要付费),因为它是在允许这样做的开源许可证下提供的。但你仍然可以为它付费(例如,在Novell时代,人们确实为Mono的一些版本付费)。此外,有些人不能在免费开源许可证下使用Mono (例如,在源代码不可用的情况下作为游戏引擎...)。在这种情况下,需要从版权所有者那里获得商业许可。
Mono for Android是一个基于Mono的商业产品,由Xamarin销售(他拥有Mono的许可权)。它重用了许多Mono已经实现的东西,还带来了 lot 更多功能,以允许.NET开发人员在安卓平台上使用他们的技能。
最后,Mono for Android的评估版本在与Android模拟器(而不是设备)一起使用时,是不含的,并且功能齐全。所以你仍然可以尝试,学习和享受Mono和Mono for Android,而不需要向Xamarin支付一分钱:-)
注意:这同样适用于MonoTouch,它允许您从Mac计算机构建基于.NET的iPhone/iPad (iOS)应用程序。
免责声明:我为Xamarin工作
发布于 2011-10-29 00:31:57
作为一个长期的.Net开发人员(从1.0开始),我可以告诉你,如果你不是一个业余爱好者,你在MonoTouch和MonoDroid上花费的任何钱在短期内都会有巨大的回报。
当然,UI有一个学习曲线,第三方控制环境远不如Windows平台那么健壮,但能够在.Net框架下编程(即使语言是C#)是一个难以描述的优势,值得花在Xamarin上的每一分钱。
我们能够在不到3个月的时间内将一个针对平板电脑操作系统和PocketPC编写的500,000行VB.Net应用程序移植到iPad上,包括本地数据库支持、web服务交互等。现在我们有了一个公共服务层,应该不到一个月就可以为安卓创建UI了。到那时,我们将拥有一个跨iOS、安卓、Windows桌面、Windows tablet和Windows Phone的应用程序。我肯定不能用我每年在微软生态系统中花费的数万美元做到这一点。
发布于 2013-04-29 17:16:37
旧帖子,但poupou的答案需要一些澄清和一些额外的信息。
首先,自从Poupou的帖子发布以来,Xamarin在整个Mono/Android/iOS堆栈中添加了一个新的社区版许可证,允许应用程序的封闭源代码分发,但该许可证仅限于二进制文件的大小。在实践中,甚至一些Hello World应用程序也超过了社区版的二进制大小限制,所以在我看来,从任何实际的定义来看,这都不是一个真正的选择。
也就是说,核心Mono运行时和运行时库都是在LGPL下授权的。这使得在没有从Xamarin购买商业许可证的情况下使用mono运行时在应用程序商店中发布封闭源代码软件变得困难,但并非不可能。根据我的理解,LGPL允许的一种选择是为您的应用程序提供对象文件。这将允许用户将应用程序的对象文件重新链接到mono运行时的不同版本,然后将重新链接的应用程序安装到他们的设备上。他们仍然可以访问目标文件,但是如果你愿意,你仍然可以关闭你的源代码。我不是律师,但我认为您可以对这些对象文件收费,并仅根据请求分发它们。
如果您想使用mono发布开源应用程序,您将处于有利的位置,因为您不仅可以发布目标代码,还可以发布应用程序的完整源代码,允许用户将mono重新链接到他们自己的应用程序版本中,从而满足LGPL的要求。
现在,问题来了。虽然我上面说的是真的,但它只适用于核心mono运行时。这是因为核心mono运行时具有开源许可证。你可能会惊讶地发现,平台特定的绑定都不是开源的,这些绑定是Xamarin提供的将你的.net mono代码与android和iOS的平台UI/系统库连接起来的库和开发工具。那么,适用于安卓和MonoTouch的Mono (还有monomac?)既不像言论自由那样自由,也不像免费啤酒那样自由。它们都是100%的商业产品。现在,我被告知您可以私下申请开源兼容许可证,但您的开源项目必须预先批准,这意味着您将无法利用封闭源代码项目的目标代码选项,而且我不知道Xamarin会对这样的许可证施加什么样的限制(我怀疑与社区版类似的限制)。
编辑:更正上述内容- Xamarin不会为您提供开源项目的开源兼容许可证。相反,如果他们能验证你的应用程序是合法开源的,他们会给你一个免费的完整的Xamarin许可证(例如,开发者想要在其中一个应用程序商店上发布一个开源应用程序的版本)。这仍然是商业许可(对于一个开发人员),而不是开放源码兼容许可,因此该许可不适用于为您的项目下载代码并构建它的任何其他开发人员。他们需要购买自己的Xamarin许可证才能发布自己版本的开源应用程序。
这意味着,利用封闭源代码分发的LGPL对象代码选项的唯一方法(或者,实际上,在没有Xamarin许可的情况下发布兼容LGPL的开源应用程序),您需要编写所有您自己的平台绑定,以使您的应用程序能够以任何有意义的方式与系统或UI交互。来自ClockworkMod的Koushik Dutta在Xamarin发布用于安卓的Mono之前就开始了这样一个项目,至少在安卓绑定方面是这样。在Xamarin发布之后,他放弃了这个项目,但代码仍然可以在这里找到:https://github.com/koush/androidmono
如果要为Mono创建一组android/iOS绑定,并在MIT/X11等许可的开源许可证下发布它们,那么应用程序可以绕过Xamarin,在符合LGPL的对象文件选项下发布应用程序(如果是开源应用程序,也可以直接发布代码)。
更进一步-如果您查看核心mono许可细目,您将注意到只有核心mono运行时及其库在LGPL下获得许可。几乎所有的类库都已经在使用许可许可,如MIT/X11或其他某种形式的Apache或MS-PL。这意味着,假设除了为android/iOS创建一些允许的开源绑定之外,有人从头开始并使用更宽松的许可重写核心mono运行时和运行时库( mono的所有LGPL‘’ed部分),那么这个假设版本的mono(我幻想它时称为"MonoLibre“)可以免费嵌入到封闭源代码应用程序中,而无需释放目标文件、开放您的应用程序、支付Xamarin任何东西,或者必须向Xamarin请求许可才能分发您的开源应用程序。Xamarin可以继续销售“商业化”的mono运行时,但MonoLibre可以继续使用所有相同的类库,甚至相同的编译器。
https://stackoverflow.com/questions/7936066
复制相似问题