Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >iOS/Android的Mono是开放的还是关闭的?付费还是免费?

iOS/Android的Mono是开放的还是关闭的?付费还是免费?
EN

Stack Overflow用户
提问于 2011-10-29 00:09:29
回答 5查看 13.7K关注 0票数 18

我正在尝试学习更多关于移动/平板电脑开发的知识,作为一名.NET开发人员,我自然会被Mono所吸引。但是我很困惑--我以为Mono是免费和开源的;然而,所有的迹象似乎都表明Mono是一种“付费游戏”交易(https://store.xamarin.com/)。

谁能帮我理解一下哪一个是正确的答案?

谢谢!

哑光

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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工作

票数 36
EN

Stack Overflow用户

发布于 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的应用程序。我肯定不能用我每年在微软生态系统中花费的数万美元做到这一点。

票数 17
EN

Stack Overflow用户

发布于 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可以继续使用所有相同的类库,甚至相同的编译器。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7936066

复制
相关文章
设计模式-组合实体模式
通常我们收快递,有时候上班期间真的没有空去收啊,所有就会委托其他人,或者说让房管代收一下,然后房管会统一放到一个地方,下再我们再去取,而这个统一管理,我们就不用直接在工作期间去收快递,并且最终也可以拿到我人们的快递。
逍遥壮士
2020/09/18
6290
设计模式-组合实体模式
组合实体模式
组合实体模式(Composite Entity Pattern)用在 EJB 持久化机制中。一个组合实体是一个 EJB 实体 bean,代表了对象的图解。当更新一个组合实体时,内部依赖对象 beans 会自动更新,因为它们是由 EJB 实体 bean 管理的。以下是组合实体 bean 的参与者。
Java架构师必看
2020/04/13
5010
BDC的执行模式与更新模式
MODE 'A' UPDATE 'S' MESSAGES INTO it_messtab. CALL TRANSACTION 'TCODE' USING bdc_tab ... ABAP提供的这个语法是执行BDC的核心,其中bdcdata这个内表的填充方法很多。用事务码 SHDB/SM35可以生成填写这个表的内容,按照ABAP字典结构类型 BDCDATA 的定义对应填写就可以了。 MODE 确定批输入的执行模式,有下面几个可选值: 执行模式,有下列可选值(执行模式常用的是A N) 本帖隐藏的内容 "A" 显示所有输入屏幕,如果在 bdc_tab 中包含该屏幕的功能码,则会出现小窗口显示这个功能码。它也是默认值,如果指定不是下面的值,则都认为是 A。 "E" 只有在出现错误时才显示屏幕,用户可以修正数据,修正后程序可以继续处理。 "N" 不显示屏幕的静默模式。如果到达被调用事务的断点,则系统处理终止,并设置一些系统字段。sy-subrc 为 1001,sy-msgty 为 "S"、sy-msgid 为 "00"、sy-msgno 为 "344"、sy-msgv1 为 "SAPMSSY3"、sy-msgv2 为 "0131"。 "P" 不显示屏幕的调试模式。如果到达被调用事务的断点,则系统自动转到 ABAP 调试器,这种方式主要用于调试过程。 更新模式,有下列可选值(更新模式常用的是S) "A" 异步更新。被调用程序的更新按照没有指定 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由另一个专门的更新进程执行,主程序一旦提交数据就继续执行,而不管提交的更新是否执行完成。这种方式比较适合于用一个事务码大量更新指定数据,比如维护主数据等。 "S" 同步更新。被调用程序的更新按照指定了 COMMIT WORK 语句和 AND WAIT 附加的方式执行。也就是说,数据更新被放到更新队列里,由专门的更新进程执行,但是主程序会等到数据提交完成,返回结果信息后才继续执行。这种方式比较适合于数据一致性要求比较高,多个不同事务码的连续处理。 "L" 本地更新。被调用程序的更新按照执行 SET UPDATE TASK LOCAL 语句的方式执行。也就是说,数据更新在主程序所在的进程中完成,主程序必定等到被调用事务完成才继续执行。
matinal
2020/11/27
1.2K0
C#设计模式09——组合模式的写法
组合模式是一种结构型设计模式,它允许将对象组合成树形结构以表示“整体/部分”层次结构。使用此模式,客户端可以按相同的方式处理单个对象和对象集合,而不必关注它们是单个对象还是组合对象。组合对象本身也可以作为容器,包含其他组合对象,形成更复杂的树形结构。
明志德道
2023/10/21
2060
C#的模式匹配
在C# 7.0及更高版本中,模式匹配成为了语言中一个强大的特性,它允许开发者以声明式的方式进行类型检查、值比较和其他复杂的数据结构分析。本文将深入探讨C#中模式匹配的核心概念、应用场景和一些高级技巧。
Michel_Rolle
2024/10/09
2.5K0
C#设计模式12——代理模式的写法
代理模式是一种结构型设计模式,它允许通过代理对象来控制对真实对象的访问,以提供额外的功能或控制访问权限。
明志德道
2023/10/21
1720
C#设计模式之策略模式
  策略模式是针对一组算法,将每个算法封装到具有公共接口的独立的类中,   从而使它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
小小许
2020/01/15
8330
C#设计模式10——外观模式的写法
外观模式(Facade Pattern)又称门面模式,是一种结构型设计模式,它提供了一个统一的接口,用来访问一个子系统中一群功能相关联的接口。外观模式定义了一个高层接口,让子系统更容易使用。
明志德道
2023/10/21
1790
聊聊 C# 中的 Composite 模式(组合模式)
Composite组合模式属于设计模式中比较热门的一个,相信大家对它一定不像对访问者模式那么陌生,毕竟谁又没有遇到过树形结构呢。不过所谓温故而知新,我们还是从一个例子出发,起底一下这个模式吧。
独立观察员
2022/12/06
3840
聊聊 C# 中的 Composite 模式(组合模式)
C#设计模式16——中介者模式的写法
中介者模式是一种行为型设计模式,它定义了一个中介者对象来封装一系列对象之间的交互。中介者模式可以使得对象间的交互更加松耦合,避免了对象之间的直接依赖,从而使系统更加灵活、易于扩展和维护。
明志德道
2023/10/21
1720
C#设计模式18——迭代器模式的写法
迭代器模式是一种行为型设计模式,它允许客户端通过一种统一的方式遍历集合对象中的元素,而无需暴露集合对象的内部结构。
明志德道
2023/10/21
1470
C#设计模式19——装饰器模式的写法
装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地给一个对象添加一些额外的职责,而不需要修改这个对象的代码。
明志德道
2023/10/21
3270
C#设计模式02——原型模式的写法
 源码下载:https://gitee.com/weilong2020/csharp_23_-design-patterns.git
明志德道
2023/10/21
1160
C#设计模式02——原型模式的写法
C#设计模式之订阅发布模式
发布订阅是一种设计模式,它允许应用程序组件之间进行松散耦合。 其实订阅发布设计中主要是发布者生成事件通道,用于在不了解任何订阅者存在的情况下通知订阅者。
HueiFeng
2020/05/25
1K0
C#设计模式13——建造者模式的写法
建造者模式是一种创建型设计模式,它通过将一个复杂的对象分解为多个简单的对象并按照一定的顺序进行组装而创建出一个复杂的对象。这样可以使得构造过程更加灵活,同时也可以隐藏创建过程的复杂性。
明志德道
2023/10/21
2150
C#设计模式11——享元模式的写法
享元模式是一种结构型设计模式,目的是通过共享对象来尽量减少内存使用和对象数量。它通过将对象分为可共享的和不可共享的来实现这一目的。
明志德道
2023/10/21
1730
C#设计模式17——责任链模式的写法
责任链模式是一种行为型设计模式,它允许对象组成一个链并依次检查另一个对象是否可以处理请求。如果一个对象可以处理请求,它处理请求,并且负责将请求传递给下一个对象,直到请求被处理为止。
明志德道
2023/10/21
2590
C#设计模式08——桥接模式的写法
什么是C#桥接模式? 桥接模式是一种结构型设计模式,它可以将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过将实现细节从抽象类中分离出来,从而让它们可以根据需要独立变化。
明志德道
2023/10/21
2400
c#设计模式之单例模式
单例模式对于我们来说一点也不模式,是一个常见的名称,单例模式在程序中的实际效果就是:确保一个程序中只有一个实例,并提供一个全局访问点,节省系统资源
小小许
2020/01/15
8980
设计模式系列之建造者模式构建实体类
所谓建造者模式就是**将组件和组件的组件过程分开,然后一步一步建造一个复杂的对象。**所以建造者模式又叫生成器模式。 建造者模式类图
SmileNicky
2020/10/26
8840
设计模式系列之建造者模式构建实体类

相似问题

存储库模式中实体更新的DB往返

20

没有实体框架的存储库模式?

10

存储库模式与DAO管理实体

20

存储库模式和活动记录模式兼容吗?

20

存储库模式中的实体交换或ORM

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文