【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

对话微软开源技术子公司资深总监 Gianugo:关键在于互操作性

  • 2013-07-30
  • 本文字数:4991 字

    阅读完需:约 16 分钟

Gianugo Rabellino 差点成为一个律师。在大学实习的时候,Gianugo 对法律工作的理解被颠覆,转而投向了程序员的行列,并成为了开源社区的活跃份子。在开源界活跃的 20 年间,他做过技术支持,做过 CTO,成立过自己的公司,并在 Apache 社区中的数个项目中被推选为 committer 和副主席。2010 年,他加入了微软。

现在,Gianugo 是微软开源技术公司(Microsoft Open Technologies, Inc, 微软全资子公司)的资深总监。 MS Open Tech 成立于 2012 年 4 月,其前身是微软的互操作性部门。根据公司官网的说明,MS Open Tech 的目的主要是“在微软与非微软技术之间搭起桥梁,通过开放标准和开放源码提升互操作性”。MS Open Tech 在 HTML5、Hadoop、Eclipse 等开源技术与 Windows、Azure、Visual Studio 等微软产品之间构建项目,并提供了 VM Depot 服务,为公共领域提供 VM 镜像共享的平台。

一个开源界的资深人士为何会加入微软?MS Open Tech 又是一个什么样的组织,它的目的和职责都有哪些?InfoQ 中文站近日跟 Gianugo 进行了一次交流,了解到一些以上问题的答案。

InfoQ:Gianugo,先跟大家做一下自我介绍吧。

Gianugo:我是来自 MS Open Tech 的 Gianugo。MS Open Tech 是一个独立的子公司。我在 2010 年 10 月加入了微软,到现在已经快三年了。一开始,我加入的团队是互操作性团队,这个团队后来分离出来,成为了现在的 MS Open Tech 子公司。Open Tech 的成立是为了进一步推动开放——在我们看来,这包括开放源码,开放标准与互操作性。

互操作性团队到现在已经有 7 年的历史。虽然名字变了,不过做的事情是差不多的。成立独立的公司,意味着我们更加敏捷,更加轻便,能够更好的适应快速响应的挑战——在开源领域,快速响应就是一切。

加入微软之前,我创办了 Sourcesense Europe BV 公司——欧洲最大的开源服务供应商之一。我同时为 Apache 工作——这是一个基于志愿者模式的组织。顺便说一句,Apache 基金会的主席最近也加入了 MS Open Tech。我呢,是个副主席。所以这也挺有意思的:这相当于他在 MS Open Tech 里给我报告,而我在 Apache 里向他报告。

当然了,Apache 是个志愿者模式的社区,也就是说,你在里面想干啥都行,并没有公司一样的等级划分,也没有老板规定你要做这做那的。我们有各自的职责——Apache 基金会的主席承担发言人的职责,同时要做一些行政执行方面的工作,比如签发支票之类的。每一个项目都报告给委员会,这样只是为了确保委员会了解项目的进程。

委员会的任务在于确保 Apache 社区的健康。社区是他们唯一关心的对象。好的代码来自好的社区。Apache 的座右铭就是:社区大于代码。这很有意思,因为它是个事实。

InfoQ:这挺有意思。MS Open Tech 在开源这方面主要是跟随 Apache 的文化么?

Gianugo:MS Open Tech 毕竟是个公司,它具有公司所具备的所有属性。不过,参与社区是我们的主要工作之一。我在开源领域已经工作了 20 年,在这个过程中,我深刻的意识到,开放源代码只是整体中的一部分,还有很多其他的东西。在 MS Open Tech,我们必须了解这一点。对我来说,重要的不是我们做什么,而是我们怎么做。

InfoQ:其他很多公司也有开源技术中心等对开源方面的投入。他们的做法是,雇一些工程师到公司内部,让这些工程师参与社区项目,将自己的代码贡献给上游。上游的 committer 或 maintainer 会审查、提交他们的代码,而他们往往来自不同的公司。MS Open Tech 也是这样的运作方式吗?

Gianugo:还有比这些工作更重要的事情。将代码贡献给上游,相当于请求其他人为你维护代码。这就好像是你送给人一份礼物,但这份礼物会加重别人未来的工作量。你必须以正确的方式去做这个请求,而不是直接将代码扔到墙的另一边,仅仅因为它是开源的,就认为这个项目应该接收这段代码。实际上,很多代码提交是被项目拒绝掉的。正确的做法应该是跟社区进行沟通,让他们知道你来了,你会留下,而不是扔下代码就走人。这是开源过程中很重要的一部分。

我们一直在复盘我们的贡献。如果我们贡献一段代码,那是因为我们认为它很重要,所以我们会继续贡献,而不是打了就跑。

InfoQ:比如说,对于 Azure 的 Eclipse 插件这个项目,整个流程是怎样的呢?

Gianugo:这个项目跟上面说的情况不同,因为这是个我们自己运作的项目。对这个项目来说,我们进行开发和分发,同时我们欢迎社区人士为这个项目贡献补丁。我们自己就是这个项目的维护者。所以,这个项目主要是看其他人是不是愿意参与进来。如果有人带了一个很大的特性过来,这个特性会加重我们的工作量,那我们需要做一个评估:这希望加入的 20000 行新代码是否有这个价值,让我们愿意处理这里面可能包含的 bug——或者应该说,肯定会包含的 bug。

一个更贴切的例子是我们在 WebKit、Blink 和 Firefox 上的贡献。我们根据他们的规则贡献代码。对于 Hadoop 和 Linux 内核也是同样。

在 Linux 内核这个领域,不乏自己开发驱动、分发驱动的公司,有些驱动甚至还是二进制的。我们也可以这样做,但我们没有。我们去找到了 Linux 内核社区的维护者,向他们了解我们应该做的。一段代码进入内核的流程非常复杂,需要进入测试分支,需要让一位维护者审核你的代码,需要回应他们的各种反馈,比如“我们不是这样处理系统调用的”,或者“我们不是这样处理空格的”。不管怎么说,这是别人家。各家有各家的家规,我们需要遵守。如果要成为 Linux 世界的好公民,WebKit 世界的好公民,Node.js 世界的好公民,我们就必须遵守他们的规则。这是参与社区活动的原则。

InfoQ:从 MS Open Tech 的官网来看,过去一年大概有 60 个项目左右,还有不少被归档的项目。

Gianugo:是的。正如我所说,我们在这块已经做了 7 年,所以项目是做过很多。

InfoQ:公司现在有多少人了?

Gianugo:70 个左右。这是比较合理的团队尺寸。另一方面,我们有一个叫 MS Open Tech Hub 的项目,通过这个项目,微软母公司的工程师可以临时加入 Open Tech,参与开源项目。这些人都加起来,人数就很多了。

对于我们做的事情,可以参考这个例子:目前, ASP.NET 的大部分代码都开源了,这是 MS Open Tech 的工作成果之一。开源的部分包括 MVC、ASP.NET 网页,Entity Framework,Razor 模板引擎,Actor FX,RX,TX 等等,差不多是全部了。

同时,这个项目接受来自外部的贡献,这意味着微软之外的用户可以给.NET 提交补丁,如果补丁被接受,下一个版本的微软.NET 产品中将会包含这些补丁。如果你去 ASP.NET 的 codeplex 页面查看,就能够了解整个流程是怎样的。签署一个贡献者协议,就可以提交补丁。我们现在已经有为数不少的外部贡献者了。ASP.NET 已经是一个社区项目。

InfoQ:可以说,MS Open Tech 主要的工作就是两个:给现有的开源项目贡献代码,以及将微软的现有项目开源。

Gianugo:正是如此。这是一个趋势。这样做的原因有很多:将我们的技术更多的开源,会吸引社区的兴趣;参与更多的社区项目,可以使我们的产品也能支持这些技术,提供给我们的客户。Azure 和 Hadoop 就是这个关系。

InfoQ:你当时为什么决定加入微软?

Gianugo:因为我看到了这个趋势。你听过我的故事就明白了。

长话短说,我的故事是这样的:我在很多开源项目里做过贡献:Firefox,很多 Apache 的项目,PHP,等等。我是 Apache 软件基金会的成员,还被推选为副主席。总的来说,可以说我是个不错的开源开发者。

最初,我是一个律师。我在学校念的是法律,不是工程。在学校念完法律之后我才发现,我并不想做一名律师。所以,我不得不“重新创造”自己。但是呢,我又没有足够的资源再去读一个学位。这时候,我在开源界学到了我需要的一切。社区是个非常神奇的存在。想想看,一个意大利小村庄里的失意少年,这一天还在想着,“完了完了,我这辈子就要做一个律师了”,结果过了一天,我就在跟 HP、IBM 和 Sun 的一群工程师们谈天说地了,谈论的话题是一个叫做 Linux 的新鲜玩意儿。这种协作感深深地打动了我。

为什么加入微软?因为我看到微软在开源领域的投入越来越多。更重要的是,他们做事的方式是完全对路的。

当时,我还在运作着自己的公司,是个局外人。有一天我们要帮助微软做一个项目:创建一个开源库,可以用 Java 读写,打开 HTML 文件。我是在那个时候认识微软,并认识了我最终加入的团队里面的成员。当时我就发现,他们有很强的意愿去做正确的事,并且用正确的方式去做。所以,当我决定离开自己的公司,让它自己去成长的时候,微软给了我一个 offer,我感到很兴奋,就过去了。

微软有一点我很喜欢,就是他在开源这块有很清晰的界线。这年头,自称开源的公司多如牛毛,但实际上,很多公司的开源态度都很暧昧,他们的产品总是有那么一撮是不开源的,但他们又总是顶着开源的帽子行事。我们对于开源是很清晰的:这些是开源的,那些是商业的,就这么简单。清晰的界限非常重要。

InfoQ:这跟 Apache 许可协议有关么?微软对 GPL 协议总是有问题,你们是否总是倾向于 Apache 协议?

Gianugo:我们在 Linux 内核上贡献的代码自然是 GPL 的。对于我们发起的项目,Apache 协议是我们的最爱。不过,这并不妨碍我们在各类协议的项目中活动:BSD,GPL,乃至于 AGPL 。MongoDB 就是 AGPL 协议的。

当然了,协议只是工具,有各自的限制,优点和缺点。我们总是要想办法选择比较合适的。

InfoQ:那么,当你们进入一个新项目——比如 Hadoop 或者 MongoDB——的时候,设立的目标是什么呢?

Gianugo:首先,我们做这一切的最初原因,都是因为我们听从我们客户的声音,我们听从市场的声音。客户想要用某种技术。开发者们正在使用某些技术。我们的目标就是要让我们的客户和我们的开发者社区能够用上这些技术。

举个例子。我在这边参与的第一个项目差不多在两年半前,当时我们发现 Node.js 开始火了。所以我们就看看这个 Node.js 到底是什么东西,看了之后觉得这东西很有趣,有潜力。当时我们已经在琢磨 JavaScript 和 HTML 5 这档子事儿了,所以觉得这个东西真的不错。然后呢,我们试着在 Windows 上运行它,结果我们被惊呆了:这玩意儿压根在 Windows 上它就跑不起来!Node.js 仅仅是为 Linux 设计的。

于是我们跑到社区里,表示我们想要解决这个问题。社区方面的回应是标准的开源社区最佳回复:提交一个补丁吧。不过,他们说的更加具体:补丁你们随便发,不过,由于解决这个问题涉及到性能、可扩展性等,肯定要对原本的核心代码进行大手术,需要使用很多的 UNIX 语义,创建结构库等等。所以,无论你们做什么,请保证你们的补丁不会影响到 Linux 上的性能。这当然是很合理的要求。

几个月之后,我们和 Node 社区发布了一个叫做 libuv 的新平台,说白了就是可以让你在 Linux 和 Windows 上都能进行 event I/O。libuv 现在已经被不少其他的开源项目使用。有了这个之后,Node.js 在 Windows 上的性能提升了一个数量级,总算可以用了。有意思的是,与此同时,Node.js 在 Linux 上的性能也提升了 5%!当时社区发了一个声明说,这个新版本是首个可以在 Windows 上跑起来的版本,同时呢,它在 Linux 上也跑得更快了。这就是跟社区合作产生的力量。为什么说理解社区的运作机制那么重要,这就是原因。

所以现在呢,我们在 Azure 上可以提供 Node.js 的服务给我们的开发者。Azure 上现在可以用 PHP,可以用 Java,可以用 Python,可以用.NET,可以用 Node.js——我们为它们都提供了 SDK。而且,这些 SDK 都是开源的。而且,你可以给这些 SDK 提交补丁。而且,我们为这些 SDK 提供了开放的 RESTful API,全都有完备的文档。

在这家公司工作仍然令我很兴奋,因为我们在各方面做的路子都是正确的。

InfoQ:所以简单来说,你们的目标是两个:让微软的客户可以使用他们想要的各种技术;让其他技术领域的开发者可以在微软的平台上做开发。

Gianugo:是的。

看看我们现在所在的这间屋子:我们有这样多种类的设备,但它们打开网页的方式都是一致的。在今天,互操作性非常非常重要。市场上那些不重视互操作性的玩家最终都会被抛弃。客户有选择权,他们有权选择自己想用的技术,同时可用的技术又如此之多。你不可能将他们囚禁在一个技术领地里面。

曾经,我们有.NET 阵营,Java 阵营等等。你们做 QCon,QCon 大会上讲的编程语言何其多?分享的技术何其多?所以,我们必须要让不同的技术之间可以通话。

MS Open Tech 的使命是成为桥梁。互操作性是微软平台和非微软平台之间的桥梁。我们希望提供选择。有选择,客户才会来;没选择,客户就走了。

2013-07-30 13:291889

评论

发布
暂无评论
发现更多内容

微服务之负载均衡

Disaster

微服务

【Netty】「萌新入门」(一)Hello, World!

sidiot

Java 后端 Netty 6 月 优质更文活动

赋能矿山 | KaiwuDB 智慧矿山解决方案

KaiwuDB

解决方案 智慧矿山 KaiwuDB

2023-06-11:redis中,如何在100个亿URL中快速判断某URL是否存在?

福大大架构师每日一题

redis 福大大架构师每日一题

KaiwuDB 受邀亮相山东省数字化转型论坛

KaiwuDB

数字化转型 KaiwuDB

Flink实现高效实时处理百万级数据:实践与优化

xfgg

flink 6 月 优质更文活动

构建系列之新一代利器Esbuild(上)

江湖修行

cli 构建 esbuild 前端‘’

【差分隐私】基本原理与入门级应用 | 京东云技术团队

京东科技开发者

京东云 差分隐私算法 企业号 6 月 PK 榜

短视频云端批量混剪实操指南

阿里云视频云

云计算 短视频 视频云 云剪辑

直播回顾 | 一体化智能可观测平台如何保障电商节大促

博睿数据

可观测性 智能运维 博睿数据 618 电商行业

STM32通过ADC1读取光敏电阻的值转换光照强度

DS小龙哥

6 月 优质更文活动

深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)

汀丶人工智能

人工智能 自然语言处理 深度学习 命名实体识别 6 月 优质更文活动

Sparkplug 规范中涉及 MQTT Broker 的 5 个关键概念

EMQ映云科技

通信协议 mqtt 工业物联网

架构师日记-从技术角度揭露电商大促备战的奥秘 | 京东云技术团队

京东科技开发者

京东云 企业号 6 月 PK 榜 京东618

Amazon CodeWhisperer 编程助手试用总结

Hanson

深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

汀丶人工智能

人工智能 自然语言处理 深度学习 命名实体识别 6 月 优质更文活动

平台即产品:数字化转型的全新驱动力

SEAL安全

平台工程 平台即产品

想要更好地理解大模型架构?从计算参数量快速入手

Baihai IDP

人工智能 Transformer 大模型 白海科技 企业号 6 月 PK 榜

浪潮 KaiwuDB x 大数据中心 | 数据驱动政府治理能力快速提升

KaiwuDB

KaiwuDB 大数据中心建设

喜讯 | 华秋电子荣获证券时报年度高成长企业

华秋电子

一些对程序员有用的网站

小万哥

程序员 程序人生 运维 前端 后端

Service Mesh的主要实现原理

穿过生命散发芬芳

Service Mesh 6 月 优质更文活动

深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景

汀丶人工智能

人工智能 深度学习 计算机视觉 OCR 6 月 优质更文活动

京东购物车分页方案探索和落地 | 京东云技术团队

京东科技开发者

京东云 京东商城 企业号 6 月 PK 榜 6 月 优质更文活动

Java线程池三、调优和性能优化

echoes

Java 线程池

千万级数据的可视化交互展示:Vue.js 技术解析

xfgg

Vue eCharts 6 月 优质更文活动

通过技术变革,推动全面预算管理前行

智达方通

全面预算管理

深度学习应用篇-计算机视觉-视频分类[8]:时间偏移模块(TSM)、TimeSformer无卷积视频分类方法、注意力机制

汀丶人工智能

人工智能 深度学习 计算机视觉 视频分类 6 月 优质更文活动

在 Go 中如何使用 database/sql 来操作数据库

江湖十年

MySQL 后端 Go 语言

“全球金牌课程”8月5-6日 · CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum捷行

敏捷教练 Scrum Master CSM 敏捷项目管理

HummerRisk获中国开源创新大赛优秀奖

HummerCloud

开源 云安全

对话微软开源技术子公司资深总监Gianugo:关键在于互操作性_微软_sai_InfoQ精选文章