.NET的一点历史故事:Novell的崩溃和Xamarin的重生

https://blog.csdn.net/sD7O95O/article/details/78096502

学习安装 mono 时了解到的。 
2017年05月07日 08:34:30 dotNET跨平台 阅读数 144
 
 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sD7O95O/article/details/78096502

Novell 是一家神奇的技术公司,它自行开发和收购了很多不错的软件和标准,涵盖 NetWare、IPX、WordPerfect、Quattro Pro,Unix,SUSE和Mono。它曾有心挑战微软的霸权,最后不免以失败收场,但在开源运动的发展历程中,它所扮演的角色无可取代:

  • 1993年它收购 Unix System Laboratories 并由此获得 UNIX 版权,并在 SCO 诉 Linux 社区这个世纪大案中保卫了 Linux。

  • 收购 Ximian 和 SUSE,使得 GNOME 和 Mono 等开源项目得到了一个相对宽松的发展环境并进入企业市场。

  • 与微软达成了专利合作协议,并且增进产品互操作性,也促成了 Moonlight 项目开发过程中 Mono 团队和微软公司 .NET 团队之间的初次合作。

可是和 Sun 公司类似,因为运营状况不佳,2010年11月 Novell 被 Attachmate 财团以22亿美金价格收购。这家专业收购公司的财团很快开始重新组合各种资产,在大约半年后开始对 Novell 公司进行大规模裁员。各个产品组中 Mono 团队受到的影响最大,全部成员失去了饭碗。

裁员目标的选择当然体现了 Attachmate 管理层的市场判断。他们知道 SUSE 是个优质资产,必须加以保护。但他们没看好当时正值发布初期的 MonoTouch,和尚在全力研发中的 Mono for Android 这个极有市场潜力的产品。这种短视不仅给两个极有价值的项目带去不确定的未来,也直接导致原有用户连已经购买的产品都不能激活。

Miguel de Icaza 在这个关键时间做出了一个重要的选择,体现出了做事的腔调。首先他安抚人心,团结团队中各位成员,然后立即给正在外地休假的 Nat Friedman 打了个电话。两个从1999年就合作的老朋友一拍即合,准备自己投资创建新的公司来继续 Mono 系列产品的开发。和给 Mono 项目起名一样,他们再次选择了猴子这个机灵的家族,把公司命名为 Xamarin(来自 Tamarin 这个猴子的分类)。

虽然 Mono 依然是一个开源项目,Xamarin 员工参与其中并没有障碍,但是 Attachmate 当时仍然掌握着 MonoTouch 等收费产品的代码版权,怎样通过合适的渠道拿到这个版权对于初生的 Xamarin 来说。

这里 Miguel 采用了一个神奇的方法,一面保留和 Attachmate 接洽的可能,一面利用 Mono 开源项目的源代码来从头开发 MonoTouch 和 Mono for Android 的模仿产品。为了避嫌,这次原来开发 MonoTouch 的几个工程师转去做 Mono for Android,而预研 Mono for Android 的几个工程师开始从头重写 MonoTouch。

大概是因为技术方面已经没有特别挑战,Xamarin 很快开始了产品封闭测试,准备在最短时间内将它们推向市场。很多老用户也开始给 Attachmate 压力,而潜在新用户更是焦急地等待新产品的发布。

2011年7月事情峰回路转,Attachmate 资源整合后刚刚建立的 SUSE 主动找到 Xamarin 来谈合作,并在一揽子协议签字后将 MonoTouch 和 Mono for Android的版权拱手相让。当然作为交换,Xamarin 公司继续为 SUSE 客户提供 Mono 相关产品的技术支持服务。Mono开源项目的主导权也正式由 SUSE 转交到 Xamarin 手中。

经过这次合作,Xamarin 终于卸下一直担心的专利包袱,全力投入到新产品的开发之中。有趣的是,之前交叉开发的过程中据说团队里诞生了很多全新的想法。在拿回 MonoTouch 等产品版权后,这些新想法也逐步在产品之中一一实现,总算没有白费气力。

值得注意的是和 Novell 时代的 Mono 团队相比,Xamarin 是一家更为纯粹的移动平台开发工具公司。很多带有 Novell 时代印记的老技术明显不再大幅改进,失去了活力,包括:

  • libgdiplus 和 Mono 的 Windows Forms 实现

  • Mono for Visual Studio,一个在 Visual Stdio 中开发和远程部署调试 Mono 程序的插件

  • Moonlight,开源的 Silverlight 实现

同时也有部分 Mono 核心团队的成员因为个人原因加入其它公司或者创建了自己的公司。不过他们其实从来没离开过 Mono 这个业已庞大和有生命力的生态系统,各自又在新的岗位上推动了 Mono 的发展。后面将会详细介绍其中的两位代表。

附带提一个2014年9月发生的趣事。MicroFocus 公司宣布收购 Attachmate 集团,就此获得了 Novell 这个厂牌。而几年之前 MicroFocus 同样收购了 Borland 公司。这两个古老的著名品牌最后以这种方式聚到一起,令人唏嘘。

本来前面已经讲过连载结束了,不过今天整理的时候发现其实自己的博客上面已经发布过一个接近完整的章节了,所以就随手贴过来,以饲读者。原稿地址是,

https://blog.lextudio.com/mono历史片段-novell的崩溃和xamarin的浴火重生-bf1dd7b8621b

另外关于剩余多数章节的阅读方式,我现在还没有找到合适的渠道。所以有兴趣提前购买阅读的朋友,现在可以直接联系我(邮件至 support@lextm.com)获取相关信息。感谢支持。

相关文章:

原文地址:http://weibo.com/ttarticle/p/show?id=2309404104291332827636

【转帖】.NET的一点历史故事:Novell的崩溃和Xamarin的重生的更多相关文章

  1. 【转帖】.NET的一点历史故事:作者的一些感想

    .NET的一点历史故事:作者的一些感想 https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654068684&idx=2&a ...

  2. 【转帖】NET 的一点历史往事:和 Java 的恩怨

    NET 的一点历史往事:和 Java 的恩怨 https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654068672&idx= ...

  3. 浏览器User-agent String里的历史故事

    你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样? Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ...

  4. 为什么浏览器User-agent总是有Mozilla字样(User-agent String里的历史故事)【搜藏】

    你是否好奇标识浏览器身份的User-Agent,为什么每个浏览器都有Mozilla字样? Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ...

  5. 【转帖】Linux的历史----Linux内核剖析(一)

    Linux的历史----Linux内核剖析(一) 2015年04月09日 10:51:09 JeanCheng 阅读数:11351更多 所属专栏: Linux内核剖析    版权声明:本文为博主原创文 ...

  6. [转帖] JVM虚拟机的历史

    Java虚拟机发展史 https://blog.csdn.net/tinyDolphin/article/details/72809018 如何查看自己的虚拟机版本?Sun Classic / Exa ...

  7. Mac OS 的一点历史: Mac OS, Mac OSX 与Darwin

    作为收购 NeXT 公司的结果,苹果公司获得了 NeXTSTEP 架构中的 Mach 和 Objective-C 等设计.尽管 NeXTSTEP 本身已经不再发展了,但是其中的组件在 OS X 中获得 ...

  8. 谈谈 StringBuffer 和 StringBuilder 的历史故事

    1.前言 众所周知,StringBuffer 是线程安全的 ,而StringBuilder 不是线程安全的  ,但是 StringBuilder 速度会更快. 事实上 作为一个字符串拼接 方法 ,在线 ...

  9. Blazor 002 : 一种开历史倒车的UI描述语言 -- Razor

    Razor是一门相当怪异丑陋的标记语言,但在实际使用中却十分高效灵活.本文主要介绍了Razor是什么,以及Razor引擎的一些浅薄的背后机理. 写文章前我本想一口气把Razor的基本语法,以及Blaz ...

随机推荐

  1. PHP mysqli_info() 函数

    定义和用法 mysqli_info() 函数返回有关最近执行查询的信息. 该函数作用于下列查询类型: INSERT INTO...SELECT... INSERT INTO...VALUES (... ...

  2. python定时任务-sched模块

    通过sched模块可以实现通过自定义时间,自定义函数,自定义优先级来执行函数. schedule = sched.scheduler( time.time,time.sleep) schedule是一 ...

  3. 【洛谷4001】 [ICPC-Beijing 2006]狼抓兔子(最小割)

    传送门 洛谷 Solution 直接跑最小割板子就好了. 代码实现 #include<stdio.h> #include<stdlib.h> #include<strin ...

  4. 2.RabbitMq-持久化

    RabbitMq-消息持久化 问题:怎样保证消息不因生产者gg而丢失我们知道了如何在消费者的角度保证消息不丢失,但如果生产者gg了呢,消息同样会丢失,生产者gg后会默认丢弃所有的消息,除非告诉它某些消 ...

  5. 实例分析jdom和dom4j的使用和区别 (转)

    实例分析jdom和dom4j的使用和区别   对于xml的解析和生成,我们在实际应用中用的比较多的是JDOM和DOM4J,下面通过例子来分析两者的区别(在这里我就不详细讲解怎么具体解析xml,如果对于 ...

  6. maven坐标及依赖范围的学习(1)

    首先,我们先了解什么是maven的坐标(重中之重): 在这里我们可以看到那三个红色的行,基本是pom.xml中出现的最多的配置     例如这个配置:这里我们可以看到我们这个项目的pom文件中,他对名 ...

  7. HDU2795线段树入门 简单查询和修改

    http://acm.hdu.edu.cn/showproblem.php?pid=2795 #include<iostream> using namespace std; ; int h ...

  8. cmd ora-12560协议适配器错误

    这个问题我解决了很久,其实问题的关键在于我在本机安装了一个Oracle11g数据库以及安装了一个Oracle Client,导致在使用sqlplus / as sysdba链接时出现报协议适配器的错误 ...

  9. Qt串口通信专题教程

    查看以前的教程:Qt编写串口通信程序全程图文讲解 查看Wincom和Lincom介绍:Qt跨平台串口通信软件Wincom与Lincom 下载软件,文档和源码:资源下载 ——————————————20 ...

  10. C# Read/Write another Process' Memory

    https://codingvision.net/security/c-read-write-another-process-memory Today’s tutorial is about…proc ...