爱开源的微软是如何击败 Facebook、Google 成为 GitHub No.1 的?

article/2025/10/15 12:19:01

拥抱开源的微软这几年究竟都做了些什么?

去年今月,我在微软开发者峰会上见到了《设计模式:可复用面向对象软件的基础》联合作者、现任微软技术院士(Technical Fellow at Microsoft)Erich Gamma,那是我第一次真正对「微软爱开源」的 Slogan 有了清晰而深刻的认识,从可在视窗、Linux 与 Mac 环境运行的 VS Code,基于 JavaScript、具备强型别的 TypeScript,到既开源也跨平台的 .NET Core 等,微软已然成为了开源领域的佼佼者。彼时还很好奇微软为什么会从封闭到积极拥抱开源,对此,Erich 如此言说:

其实开源对于微软而言并非新鲜事物,只是方法和心态上发生了变化。过去,我们只是自己编写,自己维护产品。现在,既使用别人的,也提供给别人使用。开源对我们来说,就是一扇门,打开了就可以接触到更多的开发者。

所以,微软爱开源,不只是使用到了很多开源的东西,我们也做了非常多的贡献。就像是“给”和“拿”的关系,这是一个非常重要的变化。我们不仅有完整的流程去使用现在的开源技术,也有完善的过程将我们的工具开放给大家使用。

从 PC 时代一路走来,曾经“因循守旧”到成为 Linux 和开源社区的头号敌人,颇让开发者嗤之以鼻的微软究竟如何在开源上发力甚至击败了 Facebook、Google 成为 GitHub 贡献第一的公司?而从诋毁开源到拥抱开源,为何微软会做出截然不同的开源战略转型?追本溯源,也许我们能够从微软开源历程的几个重大事件中找寻到答案。

2004 年,基于 OSS 许可协议发布的 WiX 工具集成为了微软发布的第一个开源项目,该工具集包括了编译器、链接器、库工具和反编译器。

2006 年,微软推出开源托管网站 CodePlex,在此网站所发布的所有程序都可以下载源码使用。尽管微软已经宣布此网站即将于今年关闭,但不可否认的是,这是微软首次重要的开源社区尝试。

2007 年,微软的开源许可证 Microsoft Public License (Ms-PL) 和 Microsoft Reciprocal License (Ms-RL) 得到了 OSI 认证。在一篇文章中,OSI 写道,“这个决定的通过获得了开源社区大多数人的认可(虽然还有不同意见),这些许可证符合开源定义的 10 项准则,所以应该通过。”

2008 年,微软加入 Apache 软件基金会并成为白金会员,逐渐向开源 Web 服务器 Apache 项目靠拢。

2009 年,微软向 Linux 内核贡献了超过两万行的代码。这些代码大大增强了在 Windows Server 2008 Hyper-V 或 Windows Server 2008 R2 Hyper-V 上运行的 Linux 操作系统虚拟机的性能。这些贡献让微软在一段较短的时间内成为了 Linux 内核排名第一的贡献者。

2009 年,ASP.NET MVC 基于 Microsoft Public License 开源,这些代码没有平台限制,也可以被移植到 Java 或 Ruby 平台中去。

2012 年,微软基于 Apache 2.0 许可证开源了它的部分 Web 产品体系,包括 ASP.NET MVC、Razor 和 Web API。

2012 年,微软开源了用来强化 JavaScript 开发大型应用程序的工具语言 TypeScript,后来更被 Google 用于打造自家维护的下一代 JavaScript 应用程序框架 AngularJS。

2012 年微软成立“微软开放技术有限公司(Microsoft Open Technologies Inc.)”,其主要目标是“推动公司在开放性方面的投入,包括互操作性、开放标准和开源”。

还是在 2012 年,微软开源了用来强化 JavaScript 开发大型应用程序的工具语言 TypeScript,后来更被 Google 用于打造自家维护的下一代 JavaScript 应用程序框架 AngularJS。

2014 年,微软云端和企业部门执行副总裁 Scott Guthrie 在 Connect() 会议上正式宣布.NET 核心将开源,包括 .NET Framework 4.6、.NET Core 5、还有 Runtime 和编译平台 Roslyn 等。这不是微软第一次宣布产品开源计划,但却是最让全球开发者震撼的一次宣布。

同年,新上任的 CEO Satya Nadella 提出了“微软爱 Linux“,并加入了 OCP(Open Compute Project),在微软 Build 大会上成立.NET 基金会,全力支持 .NET 平台上的开源研发与合作。

2015 年,微软通过与 credativ 合作,将最流行的 Linux 发行版之一的 Debian 带到了它的 Azure 上。同年与 Red Hat 达成合作,将 Red Hat 企业版 Linux(RHEL)带到了 Azure 云上。

同在 2015 年,微软还开源了 Visual Studio Code, 并且发布了 Visual Studio GDB 预览版,允许开发者远程调试 Linux 对象。

2016 年初,微软和 Canonical 展示了在 Azure 上运行 Ubuntu Linux 的第一个技术预览版。至此,微软已经将所有的领先的 Linux 发行版带到了 Azure 云上。

同年 3 月,在 EclipseCon 大会上,微软宣布加入 Eclipse 基金会,在 11 月的 Connect 开发者大会上,微软公司加入 Linux 基金会成为第 11 位白金会员,取得董事会席位,同时也宣布 Google 加入微软 .NET 开源基金会。

且在 6 月的 Red Hat DevNation 大会上,微软正式发布实现跨平台(Windows、Linux 和 Mac)的 .NET Core 1.0 ,这意味着开发者可以使用 Windows 开发,用 Linux 部署。

9 月,在 GitHub 的“对开源贡献人数最多的组织(Organizations with the most open source contributors)”的榜单中,微软击败 Facebook、Google 一跃成为 No.1,至此,微软彻底赢得了来自业界及开源社区的认可。

而到了今年,微软在开源领域已经有了诸多动作,比如开源 GVFS (Git Virtual File System) 虚拟文件系统、Azure Service Fabric SDK、用于帮助开发者创建跨平台应用的 ReactXP,以及可用于训练无人机和自动驾驶汽车的模拟器平台 AirSim 等。

在《开源纵横谈:微软开源那些事儿》一文中,作者杜玉杰如此总结道:“对企业来说开源作为一个武器,无论是进攻还是防御,首先要考虑的都应该是商业的利益。微软帝国从 PC 时代崛起,经历了互联网时代的短暂迷惘,新的君主能够领悟到了开源的价值,转变战略乘云之势重回宝座不得不说是企业开源战略转型的一个典范。”

而从技术角度出发,我们又不禁想问,开源对于微软究竟产生了怎样的影响?Erich Gamma 给出了他的答案:

开源的发展速度非常惊人,尤其是微软。五年前谈到开源时,整个 Windows 没有什么开源的东西。这五年来我们发生了很大的变化,现在微软内部也有了很多流程与方法,能够让我们的工程团队去使用开源。

五年前,我们的律师一听到开源,第一反应就说“NO”,但现在律师也在帮助我们更好地往开源上做努力了。我们知道开源领域有很多争议,特别是 License 的部分,有些“License”也许存在一些灰色地带。然而在微软,我们的工程部门和法律部门都在帮助我们更加合规地做开源项目,比如 GPL。现在,在他们的帮助下,我们能够清楚地了解哪些是我们可以使用的。

虽然是开源,但事实上对微软对我们所提供的开源软件是负责任的。微软对开源技术的运用横跨多个不同的产品线。我们内部对整个开源的软件都做了详细的记录,来帮助开发者和产品团队,让他们避免陷入到一些 License 问题里。我们很多开源的软件都有数据库去记录它用在哪个产品里,能够实现正向和反向的追踪。比如有的开源软件造成一些问题,我们可以很清楚地对相关产品进行迅速准确的修正。

而说到影响,我所看到的最大的贡献便是来自于效率的提升。比如当我们把 .Net Core 开源之后,有诸多来自社区的人帮助我们审阅代码,给出了很多改进意见。同时,许多开发者会希望能不能实现让 .Net Core 在其他平台上运行,我们可以看到在这方面很多的尝试。

最后,Microsoft OpenDev —— 微软 Azure 开源技术峰会将在北京时间 6 月 22 日凌晨0点)正式开始直播,包括微软 Azure 首席架构师 John Gossman、Ubuntu 创始人 Mark Shuttleworth、Docker COO Scott Johnston 等多位业界专家将带领听众一起进入微软的开源新世界,内容包含 Redhat on Azure、Canonical on Azure、Docker & 混和云架构实战、Pivotal Cloud Foundry 应用在现代化的企业环境中融合Java的共构、Chef on Azure for DevOps、Deis Kubernetes容器管理平台与Helm 等,欢迎进入峰会官网报名观看直播。


http://chatgpt.dhexx.cn/article/Obbgpj1E.shtml

相关文章

跨端与同构开发技术一览

关键词:React Native, uni-app, Flutter ,Tauri, Ionic 和 weex 文章目录 前言跨端技术简史几种常见跨端技术对比小程序的繁荣跨端同构技术uni-appTaroreact-native-webreactxpWeex阿里的RaxRemax去哪儿网的qrn-remax-unir去哪儿网的anuKbone腾讯新一代跨端开发框架…

@开发者,一份微软官方Github上发布的开源项目清单等你签收

最近在倒腾WPF的项目,试着搜一下微软官方提供的WPF Smaples, 结果找到了https://github.com/Microsoft/WPF-Samples. 当然还发现了Cortana相关的开源资料http://microsoft.github.io/UWPQuickStart/docs/challenges/cortana-integration.html和UWP资源http://micros…

React Native 三端同构实战

WeiboGoogle用电子邮件发送本页面 0 React Native 三端(Web、iOS、Android)同构是指在不改动原 React Native 的代码下,让其在浏览器中运行出和在 React Native 环境下一样的页面。对于使用 React Native 开发的页面,如果又单独为…

reactxp搭建,start:windows运行不起来

1、官网 reactxp 2、VSCode和Visual Studio2019 安装VSCode Visual Studio 下载地址 先不用勾选工作负荷,直接安装 3、安装nvm 访问下载地址下载安装nvm: 百度云分享 官网直装链接 nvm的github发行界面下载nvm-setup.exe GitCode镜像下载nvm-setup…

微软发布ReactXP:方便开发者构建跨平台应用

说起跨平台开发工具,开发者们最先想到的无外乎是 Cordova 和 Xamarin。但是前者无法提供足够令人满意的性能表现,而后者在 Web 开发上心有余而力不足。所以,微软 Skype 团队基于 React JS 和 React Native 开发了一款全新的跨平台开发工具 —…

跨平台技术实践案例: 用 reactxp 重写墨刀的移动端

重新编写,又一次,我们又一次重新编写了移动端应用和移动端网站。要重新编写是一个风险很大的决定,但是其必要性以及它所带来的收益是我们无法拒绝的。这篇文章会分享我们为什么这么做,我们是怎么做的,以及这次重写后为…

ReactXP入门指南

ReactXP入门指南 1.ReactXP介绍 ReactXP使用了React框架,使得开发人员可以使用React开发他们的跨平台任务。 React的理念是“学习一次,写在任何地方”。使用React和React Native,应用程序可以与iOS和Android应用程序共享大部分逻辑&#x…

SfM、VO和SLAM介绍

一家之言,仅作分享,如有不合理或需要改进的地方,欢迎各位讨论。 前言 在自动驾驶地图定位模块的功能开发中,主要研究方向分为三种:建图、里程计、定位。SfM(Structure From Motion)即 传统三维…

SfM: Structure from motion

SfM Structure from motion (SfM) is the process of estimating the 3-D structure of a scene from a set of 2-D images. 运动结构(SfM)是根据一组二维图像估计场景的 3-D **结构的过程。 注意Motion是指相机在移动 SFM通常用来建立image structu…

经典/深度SfM有关问题的整理

这篇博客主要是记录一些实践或看论文过程中遇到的一些不好理解的问题及解释。      Q1:SfM里的尺度不变性指的是什么?   A1:一般定义下,尺度不变性是指体系经过尺度变换后,其某一特性不变。比如,特征…

OpenCV实现SfM(一):相机模型

注意:本文中的代码必须使用OpenCV3.0或以上版本进行编译,因为很多函数是3.0以后才加入的。 目录: 文章目录 #SfM介绍 SfM的全称为Structure from Motion,即通过相机的移动来确定目标的空间和几何关系,是三维重建的一种…

Structure From Motion(SFM)入门讲解

概念: Structure From Motion(SFM) 是从一系列包含视觉运动信息的多幅二维图像序列中估计三维结构的技术。 SFM和立体视觉的区别 在立体视觉中,两个相机之间的相对位姿是通过标定靶精确标定出来的,在重建时直接使用三角法进行计算&#x…

[CV] Structure from motion(SFM)- 附我的实现结果

【更新】我的新博客:www.ryuzhihao.cc,当然这个csdn博客也会更新 本文在新博客中的链接:点击打开链接 完成时间:2017年2月27日 博客时间:2017年4月26日 去年,我有幸了解到image-based mode…

SFM(structure-from-motion)实现流程详细介绍

SFM(structure-from-motion)算法是一种基于各种收集到的无序图片进行三维重建的离线算法。顾名思义是从运动中(不同时间拍摄的图片集)恢复物体的三维结构,这需要估计出图片的R,t,结合相机内参重建稀疏点云。…

SFM算法介绍

背景 股票市场存在着短线、中长线、长线等不同频率的交易模式,这些交易活动决定了股票价格的变动。为了对股票价格进行预测,该文章提出了一种循环神经网络SFM,可以从股票价格的时序数据中捕捉多种频率的交易规律,从而做出短期/长…

增量式SfM详细流程介绍及实现方法

目前主流的SfM(Structure from Motion,运动结构恢复)可以分为两大类型,一种是全局式的,一种是增量式的。全局式(Global)sfm能够一次性得出所有的相机姿态和场景点结构。它通常先求得所有相机的位…

SLAM和SFM有什么区别?

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 自古以来,人们惆怅千年要解决的问题: 定位、定向. 当然了还有我是谁?我在哪里? 在这个时候, SLAM与SFM 横空出世. 这两兄弟叱咤乾坤,成为人们解决上述问题的得力帮手. SFM SFM即Struct…

SFM问题简介

最近在学习opencv的知识,遇到的一些知识点和理解记录下来,由于还是小白,有所不对的地方,大家一起交流沟通 Structure from motion,简称为SFM,是单目相机在物体周围不同的角度拍摄不同的图片,而相…

SfM详细流程介绍

增量式(Incremental)sfm则是一边三角化(triangulation)和pnp(perspective-n-points),一边进行局部BA。这类方法在每次添加图像后都要进行一次BA,效率较低,而且由于误差累积,容易出现漂移问题;但是增量式sfm的鲁棒性较高。 增量式sfm初始化 初始化主要是指选取两张匹…

主流SFM处理方式的梳理

SFM是什么? SFM即Structure-from-motion运动结构重建,从大批量图像数据出发,通过相关处理,获取目标图像集3D几何(结构)和摄像机姿态(运动)信息,主要处理流程可分为如下几…