提起微软公司,不少人第一反应是老牌巨头专注于私有化软件盈利模式,这大抵是源于微软前CEO Steve Ballmer曾经宣称“Linux是颗毒瘤(Linux is a cancer)”,并曾经偏执地认为所有开源软件都不值一提。但是,这是2001年的事情了,是时候更新大家对微软的刻板印象。
这里,不提继任者Satya Nadella的微软拥抱开源进行新式转型的决策,也不提微软去年加入Linux基金会等开源组织的举动。单单而言,只问一个问题:哪家公司在GitHub上贡献最多?不是Facebook,也不是Google,而是微软公司,这个第一名还是多少有些出人意料。
2014年10月,出任微软首席执行官的萨提亚 纳德拉,第一次公开宣布“微软爱Linux”。同年,微软首次发布.NET Core并将其开源;众所周知,微软核心的技术栈长期以来基于.NET和Windows绑定。在重写标准库之后,2016年6月.NET Core 1.0实现跨平台(Windows、Linux和Mac),这意味着开发者可以使用Windows开发而Linux部署。
2016年3月,Windows原生支持 Ubuntu Linux Bash, 这意味着Windows操作系统级别的开放,Win10 可以当作一台Ubuntu开发机来使用。
此外,微软称Azure全面支持所有开源技术栈,并且从IaaS(VM),PaaS和SaaS(CRM、PowerBI、Office365)全面支持用户的灵活选择。
InfoQ对数个较受社区欢迎的项目进行了整理如下:
Visual Studio Code:跨平台源代码编辑器
Visual Studio Code是微软于2015年正式发布的项目,可以运行在Mac OS X、Windows和Linux之上,面向Web和云应用的一款跨平台源代码编辑器。
虽然它的名字与Visual Studio相近,但前者是代码编辑器,后者是集成开发环境(IDE)并且目前只运行在Windows上。
Star数量: 24.3k; Fork数量:3.3k
GitHub主页:https://github.com/Microsoft/vscode
TypeScript:开源编程语言,JavaScript的超集
TypeScript是JavaScript强类型的超集,可以编译成纯JavaScript。由微软开发的自由和开源的编程语言,可以运行在各类浏览器和操作系统之上。
Star数量: 19.8k ;Fork数量:2.8k
GitHub主页:https://github.com/Microsoft/TypeScript/
CNTK: 深度学习开源工具包
CNTK全称为The Microsoft Cognitive Toolkit, 将神经网络描述为计算机可处理的有向图,有向图的叶节点表示输入值或网络参数,其他节点表示输入对应的矩阵运算。CNTK便于实现并且也结合了很多深度神经网络(DNN),神经网络(CNN)和循环神经网络/长短时记忆神经网络(RNN / LSTM)。它可以跨多个GPU和服务器实现随机梯度下降(SGD,误差反向传播)学习与自动微分和并行化。
可以在Python或者C++语言中如同库版应用,也可以使用其自有的描述语言BrainScript单机化使用。CNTK可适用于64位的Linux和Window,于2015年4月开源。
下图比较CNTK的处理速度(每秒处理的帧数)与四个其他众所周知的工具包的处理速度。 配置使用完全连接的4层神经网络(参见微软的基准脚本)和有效的迷你批量大小(8192)。在相同硬件上获得的结果。
Star数量:9.9k;Fork数量:2.4k
GitHub地址:https://github.com/Microsoft/CNTK
Donnet:采用系统虚拟机运行的编程平台
.NET最早是微软研发的XML Web services平台,C#是.NET框架上最常用的编程语言之一,通常被认为是微软专属, 其著名竞争对手是Java。
.NET框架历经数代更迭,现已演变成通用的开发平台,支持多种语言(如C#、F#、VB.Net、C++、Python等)、异步和同步编程模型,具有本地互操作性,可跨平台实现多种场景,最终于2014年开源。
Star数量: 7.8k ;Fork数量:1.2k
GitHub主页:https://github.com/Microsoft/dotnet/network
PowerShell :为任何系统提供Windows的命令行工具
一个跨平台(Windows、Linux和macOS)自动化和配置工具/框架,可与现有工具完美配合,并优化用于处理结构化数据(例如JSON,CSV,XML等)、REST API 和对象模型。 它包括命令行shell,相关的脚本语言和用于处理cmdlet的框架。
Star数量:6.4k;Fork数量:800
GitHub地址:https://github.com/PowerShell/PowerShell
MSOpenTech/redis: 在Windows使用Redis
官方只支持64位,可自行构建32位版。
该开源项目,在2.8版本中,替代UNIX fork()API中的内存映射文件模拟写时复制行为。 版本3.0类似,为了便于系统文件分页,删除了内存映射文件,在管理堆碎片方面进行了改进。
Redis对文件描述符的值做了一些假设,微软构建了一个虚拟文件描述符映射层。
Star数量:5.8k;Fork数量:8.7k
GitHub地址:https://github.com/MSOpenTech/redis
WinObjc:Windows下的Objective-C
为Visual Studio提供了一个Objective-C开发环境并支持iOS API。通过重新使用Objective-C代码和iOS API,配以Windows自有Cortana(中文名:微软小娜,微软发布的全球第一款个人智能助理)和通知等功能,用户可以创建通用Windows平台(UWP)应用程序并运行在Windows设备上。
Star数量:5.8k;Fork数量:745
GitHub地址:https://github.com/Microsoft/WinObjC
GitHub地址:https://github.com/Microsoft/api-guidelines
ASP.NET之MVC核:模型(model)-视图(view)-控制器(controller)框架
旨在TDD友好,用于创建符合最新Web标准的复杂应用程序、构建动态网站,可以在IIS中托管或自我托管。
Star数量:4.4k;Fork数量:1.6k
GitHub地址:https://github.com/aspnet/Mvc
BashOnWindows:解决Ubuntu Bash在Windows的使用问题
微软在Build 2016大会上宣布了一条振奋人心的消息,大家惊呼Ubuntu on Windows。Bash on Windows 为开发者们提供了Bash shell、Linux类似环境,在不需要Linux虚拟机的情况下,大部分的Linux命令行工具基本上可以不经修改地运行在Windows上。
Star数量:3.7k;Fork数量: 129
GitHub地址:https://github.com/Microsoft/BashOnWindows
monaco-editor:基于浏览器的代码编辑器
与 Visual Studio Code 类似,Monaco Editor 提供代码提示、智能建议等代码编辑器的功能,它运行在浏览器环境中,旨在开发人员们可以远程更方便地编写代码。与Visual Studio Code版本相比,Monaco是一个直接映射源代码的库。
Star数量: 4k;Fork数量:265
GitHub地址:https://github.com/Microsoft/monaco-editor
DMTK:分布式机器学习框架
微软的DMTK(Distributed Machine Learning Toolkit)参数服务器框架有很多版本:
LightLDA:用于大规模主题建模的可扩展、快速和轻量级系统。
LightGBM:基于决策树算法的快速、分布式、高性能梯度提升(GBDT,GBRT,GBM或MART)框架,用于排名、分类和许多其他机器学习任务。
分布式词嵌入(word embedding):实现的词嵌入的分布式算法。
DMTK framework(Multiverso): 参数服务器架构的机器学习。
Star数量: 2k;Fork数量:487
GitHub地址:https://github.com/Microsoft/DMTK
Azure相关:文档、SDK和代码示例
微软支持开发者们将各种开源软件工具和技术带入Azure。Azure 应用市场支持很多Linux 分发,包括 Ubuntu、Debian 和 SUSE;也支持借助支持 Node.js、PHP、Python 和 Java 的 Azure 应用服务,生成 Web 和移动应用。
在GitHub上Azure相关的存储库有1700+个。
Star数量(共计):149k;Fork数量(共计):291k
地址:https://azure.microsoft.com/zh-cn/overview/open-source/
写在后面
开源已经形成潮流,一家软件公司的竞争对手可能是同行企业,还可能是开源项目。
不过开源可不是公益,公司还是以赢利为导向的,那么开源对公司而言利益是什么呢?首先,企业级版本的使用往往并不免费,并且相关的技术支持、安装、系统整合、认证和培训等服务也是收取费用的。 其次,项目开源之后,可以吸引社区中对此热情的开发者们。传统模式下,软件巨头公司需要雇佣大量工程师进行开发、测试和本地化等。但是,开源相当于把一部分工作“外包”给社区。此外,如果开源项目代码优质,则会很好地塑造技术形象并在开源圈产生影响力,从而起到推广公司品牌的作用。更重要的是,公司可以接触到社区中的高尖专家程序员,增加了对他们的吸引力也就增加了更多招纳贤士的可能性,他们有可能会以兼职或者全职的形式加入公司。单纯对项目本身而言,如果被其他公司采用、再回馈到社区,这是优化项目和丰富使用场景的良性循环。
其实微软很早开始关注社区开发者并有了开源的举措:MSDN实现创立于1992年是使用层级的技术文件开放;CodePlex创立于2006年先后托管了很多开源项目;CodePlex Foundation开放源码基金会成立于2009年。
那么微软之外世界的时间发展线是怎样的呢?虽然其他几家开源软件基金会更早成立(自由软件基金会1985年、OSI开发源代码促进会1998年、Apache软件基金会 1999年、Eclipse基金会2004年、软件自由管理委员会2006年);但是程序界的大规模化关注并参与开源并不比微软的步伐早:1991年Linux源代码开源;2007年Linux基金会成立,而GitHub也开始提供软件源代码托管服务;2008年StackOverflow问答讨论网站建立。
如此看来,其实微软并没有一直盲目赶路,并且也有着不算落后的开源和社区意识。不过,缘何留下了保守不开源的刻板印象?是因为2001年时前CEO的武断宣言?还是开源之路态度不够坚决、宣传力度不够?亦或是社区更欢迎独立的第三方开源平台而非某家企业的托管平台?不过,可以确定的一点是,如所宣称那样“Microsoft Loves Linux”,微软拥抱开源并且同样拥抱社区选择的平台(如GitHub、StackOverflow)