作者|木
环编辑|小智
在 GitHub 上贡献最多的公司,不是 Facebook,也不是 Google,而是微软。InfoQ 对微软数个较受社区欢迎的项目进行了整理,以飨读者。希望开源的精神,能给技术社区带来更多的实惠!
写在前面
提起微软公司,不少人第一反应是老牌巨头专注于私有化软件盈利模式,这大抵是源于微软前 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#、F#、VB.Net、C 、Python 等)的开发。.NET 框架历经亟待,最终于 2014 年开源。
C#通常被认为是微软专属,是 .NET 框架上最常用的编程语言之一, 其著名竞争对手是 Java。
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):实现的词嵌入的分布式算法。
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 平台)。微软设的最有价值专家奖(Microsoft MVP Award)也开始欢迎开源社区的活跃分子加入。
有人认为微软这些开源举动晚了,错失了很多机会。不过,“种一棵树最好的时间是十年前,其次是现在”。业界接下来应该更关注的是,微软究竟会将开源做到什么程度,并因此对社区产生多么深刻影响。