Facebook、微信团队、Twitter、微软开源软件列表一览

时间:2017-04-06

Facebook、微信团队、Twitter、微软开源软件列表一览

2017-04-06 InfoQ InfoQ InfoQ
编辑|小智
对于为什么要发布开源项目,Facebook开源项目负责人曾经解释过:一是开源能够帮助他人更快地开发软件,促进世界创新,主要是社会价值层面的考虑。二是开源能够倒逼Facebook的工程师写出更好的代码。三是开源能够更有效利用社区的力量,帮助Facebook一起解决难题。开源,让世界更美好,不是吗?
Facebook开源软件列表

从Facebook的GitHub账户中可以看到,Facebook已经开源的开源项目有近300个,领域涉及移动、前端、Web、后端、大数据、数据库、工具和硬件等。Facebook开源项目负责人James Pearce曾在OSCON解释过Facebook究竟为何要使用、支持和发布开源项目。具体如下:

  • 共享Facebook的代码(通常是软件“栈”,偶尔也包括硬件设计)促进了这个世界的创新。这些代码帮助他人更快地开发软件。因为Facebook不是一家软件公司,所以它在开源过程中没有面临竞争对手的威胁,相反,开源带来的价值在逐渐显现。用户使用Facebook的开源代码可以更快地构建应用,而他们也乐于回馈代码,使Facebook从中受益。

  • 拥抱开源,意味着Facebook必须一开始就写出更优秀的软件。如果他们知道某个软件从诞生起就要公开,那就必须要好好做,提高可用性和可靠性,因为将来外面的人都会用它。这种压力也会给公司内部带来更多的价值。

  • 开源带来了共享挑战的机会。开源项目面临的难题会吸引一些外部的优秀人员,而结果是,他们也带动了公司内部人员的能力提升。每天Facebook都承载了超过一亿人的沟通互联,何以能做到?唯有开源的力量。

下面是InfoQ编辑整理的Facebook现有的比较活跃的开源项目列表,欢迎交流讨论。

移动开发框架:React Native

React Native是Facebook在2015年开源的基于React.js的移动开发框架,它的设计理念是让移动应用既拥有Native的用户体验,同时又可以保留React的开发效率,提高代码的复用率。React Native的宗旨是,学习一次,高效编写跨平台原生应用。开发者可以使用JavaScript编写应用,并利用相同的核心代码就可以创建Web、iOS 和Android平台的原生应用,目前已经实现了对iOS和Android两大平台的支持。

  • Star数量:33108

数据查询语言:GraphQL

GraphQL是Facebook开源的数据查询语言。Facebook在构建移动应用程序时,需要用API获取足够强大的数据来描述所有的脸谱,同时简单易学易用,于是开发了GraphQL,并支持每天千亿级的调用。GraphQL不是像MySQL或Redis这样直接面向数据的接口,而是面向已经存在的应用代码的接口。你可以把GraphQL看作是为了调用应用服务器上的方法的一些内嵌的RPC。

大数据查询引擎:Presto

Presto是Facebook开发的一款分布式SQL引擎,主要用于针对各种大小的数据源(从GB到PB)来运行交互式分析查询。Facebook创建Presto的主要目的在于帮助他们更快地分析数据,因为Facebook的数据量一直在持续增长,产品周期的节奏也变得越来越快。自从2013年11月开源后,Presto的用户量呈现了爆发式增长。诸如Airbnb、京东、Dropbox以及Netflix等公司都将Presto作为自己的交互式查询引擎。

PHP执行引擎:HHVM

HHVM(HipHop Virtual Machine)是Facebook于2013年开源的PHP执行引擎。它采用一种JIT(just-in-time)的编译机制实现了高性能,同时又保持对 PHP 语法的充分支持。HHVM常常用作独立的服务器,用于替代Apache与mod_php,旨在执行使用Hack与PHP所编写的程序。它使用了即时编译方法来实现超高的性能,同时又保持了PHP开发者所习惯的灵活性。

JavaScript库:React

React是Facebook开发的用于构建用户界面的JavaScript库,现已为很多公司所用,因为它采用了一种不同的方式来构建应用:借助于React,开发者可以将应用分解为彼此解耦的独立组件,这样就可以独立维护并迭代各种组件了。2015年,React有两个主要的发布,同时还发布了React Native,并且发布了新的开发者工具。现在已经有越来越多的公司(包括Netflix与WordPress)开始使用React构建自己的产品了。

键值存储系统:RocksDB

RocksDB是Facebook开源的嵌入式、可持久化键值存储系统,它基于Google的LevelDB,但提高了扩展性可以运行在多核处理器上,可以有效使用快速存储,支持IO绑定、内存和一次写负荷。过去一段时间,RocksDB在社区非常流行,Facebook分析其原因在于它能够对由于网络延迟等原因造成的慢查询响应时间起到消除的作用,RocksDB非常灵活,完全可以针对各种新兴的硬件发展趋势进行定制。LinkedIn与Yahoo都是RocksDB的重度使用者。

人工智能硬件平台:Big Sur

近些年,人工智能和机器学习方向取得了长足的发展。据Kevin Lee透露,Facebook的AI软件已经能够阅读故事、回答相关场景的问题、玩游戏以及通过一些例子来学习非指定的内容。作为计算密集型的应用,AI软件的性能与数据集规模/硬件性能密切相关。尤其是硬件方面,高性能微处理器、存储器以及图形处理器(Graphics Processing Unit,GPU)的发展为AI算法的快速运行提供了坚实基础。为了进一步更好地服务大规模AI计算,Facebook推出了基于GPU的、用于训练神经网络的“Big Sur”硬件系统。

网络模拟测试工具:ATC

Augmented Traffic Control(ATC)能够利用Wi-Fi网络模拟2G、2.5G(Edge)、3G以及LTE 4G移动网络环境,测试工程师们可以快速在各种不同的模拟网络环境中切换,从而实现对智能手机和App在不同国家地区和应用环境下的性能表现进行测试。ATC是Facebook内部团队在2013年的一次Hackathon活动上开发出来的工具,其原理实际是利用了Linux流量控制系统,通过纯Python的网络库pyroute2调用netlink的API控制,而开发其的目的是为了确保更多的用户获得最好的应用体验。

  • Star数量:2962

开源数据库:HydraBase

HydraBase是HBase数据库的升级版。Facebook是HBase的重度用户,Facebook的HBase数据库系统存储着Facebook的很多关键业务数据,包括内部监控系统、搜索索 引、流数据分析以及数据抓取等。HydraBase相比HBase稳定性和可用性更高,可以减少服务器宕机时间。HydraBase能够让一个数据域分布在多个域服务器中,域服务器之间能相互备份,因此能够大大减少数据恢复所用的时间。Facebook声称HydraBase能将Facebook全年的宕机时间缩减到不到5分钟。

Facebook已经将HydraBase捐赠给Apache,目前很多代码都已经被合并到HBase中。

关系型数据库:WebScaleSQL

WebScaleSQL是基于MySQL 5.6 社区版本改编的MySQL通用分支,基于GPL开源协议发布。WebScaleSQL目前已经做了很多性能改进工作,包括:客户端异步协调、逻辑预读、查询限流、服务端线程池优化、InnoDB大页支持等等。WebScaleSQL上的功能都是很“Web Scale”和接地气的。比如线程池优化,WebScaleSQL基于Mariadb的线程池实现进行重写并优化,对读写队列进行分离,重新设计队列优先级策略,避免了饿死现象。要知道线程饿死在有些场景下是很严重的。尤其是在并发连接数往往很大的互联网应用里面。

  • Star数量:2940

代码审查工具Phabricator

代码审查方面,Facebook开源了可视化工具Phabricator。工程师可以在页面上非常方便的针对每一段(单行或者多行)代码进行交互讨论;负责审查的工程师可以接受代码改变,可以提出疑问要求原作者继续修改,可以提出自己不适合以推出该代码审查,等等。只有代码被明确接受之后才能被工程师提交到服务器端的代码库,这一点集成到提交工具中强制执行。

  • Star数量:7022

C++HTTP框架:Proxygen

Proxygen是一款Facebook开源的支持SPDY 3.1的HTTP框架。其目的不是替换Apache,而是有能力创建一个专用的高性能Web服务器,使其可以嵌入到Facebook提供Web服务的现有应用中。Facebook从2011年开始构建一款代理服务器(Proxygen这个名字也是由此而来),在该项目演进并在生产环境中测试了数年之后,Facebook将其代码开源了。 Facebook内部做的基准测试表明,在一个Proxygen echo服务器上,每秒可以支撑多达304 197次基于SPDY 3.1的内存GET请求。

开源动画库:Pop

Pop是Facebook推出的一个可扩展的iOS 和OS X动画库,其新闻聚合阅读应用Paper背后的核心技术就是由Pop支持。除了增加基本的静态动画外,还支持Spring和衰变动态动画,可非常方便的构建现实的、基于物理的交互。Pop动画库的动画效果非常流畅,因为它使用了CADisplayLink来刷新画面(帧),一秒钟刷新帧数为60帧,接近于游戏开发引擎。Pop动画的自成体系,与系统的CoreAnimation有很大的区别,但使用上非常相似。

静态代码分析工具:Infer

Infer是Facebook的开发团队在代码提交内部评审时,用来执行增量分析的一款静态分析工具,在代码提交到代码库或者部署到用户的设备之前找出bug。由OCaml语言编写的Infer目前能检测出空指针访问、资源泄露以及内存泄露,可对C、Java或Objective-C代码进行检测。Facebook使用Infer自动验证iOS和安卓上的移动应用的代码,bug报告的正确率达80%。Infer通过捕获编译命令,把要被编译的文件转换为可用于分析潜在错误的中间语言格式。整个过程是增量进行的,意味着通常只有那些有修改过并提交编译的文件才会被Infer分析。Infer还集成了大量的构建或编译工具,包括Gradle、Maven、Buck、Xcodebuild、clang、make和javac。

操作系统监控工具:osquery

osquery是一款面向OSX和Linux的操作系统检测框架。它将操作系统暴露为一个高性能的关系型数据库,允许用户编写SQL查询查看操作系统数据。在osquery中,SQL表代表像下面这样的抽象概念:

  • 正在运行的进程

  • 已加载的内核模块

  • 打开的网络连接

虽然osquery利用了非常底层的操作系统API,但它允许用户在Ubuntu、CentOS和Mac OS X上构建并使用它。osquery性能极高,内存占用小,支持用户在整个基础设施上执行查询。

JavaScript静态类型检查工具:Flow

Flow是Facebook出品的一个JavaScript代码的静态类型检查工具,该工具采用开放源码的OCaml(Objective Caml)语言开发,。Flow能够帮助开发人员查找出JavaScript代码中的类型错误,从而提高开发效率和代码质量。Flow已经能够捕获JavaScript代码中的常见问题,如静态类型转换不匹配、空指针引用等问题。同时,Flow还为JavaScript新增了类型语法,如类型别名。

Web应用架构:Flux

Facebook认为MVC无法满足他们的扩展需求,因此他们决定使用另一种模式:Flux。由于Facebook非常巨大的代码库和庞大的组织,所以MVC真的很快就变得非常复杂,于是他们得出结论,认为MVC不适合于大规模应用。

每次Facebook工程师努力增加一项新特性时,系统的复杂性成级数增长,代码变得“脆弱和不可预测”。对于刚接触某个代码库的开发人员来说,这正成为一个严重的问题。Flux是一个Facebook开发的、利用单向数据流实现的应用架构,用于 React。Flux应用有三个主要的部分组成:调度程序、存储和视图(React 组件)。

Android调试工具:Stetho

Stetho是一个Android应用的调试工具。当Android应用集成Stetho时,开发者可以通过访问Chrome,在Chrome Developer Tools中查看应用布局、网络请求、sqlite、preference等等,可视化一切应用操作(更重要的是不用root)。开发者也可通过它的dumpapp工具提供的命令行接口来访问应用内部。

微信团队开源项目列表

从GitHub上可以看出,到目前为止,由腾讯微信团队发起的开源项目已经有6个,并且这其中大部分都是在2016年开源的,领域涉及移动、数据库、基础类库、框架。中国大公司的开源曾经给社区留下不好的印象,比如有人就这么说,大公司的开源,开源也就意味着结束。也有人说,大公司的开源大部分都是KPI项目,开源与业务不能相得益彰,所以根本无法持续投入。

开源不仅是一种态度,更是一种能力,微信希望通过开源打通内部团队和外部社区,一方面可以把微信的顶级技术输出给了社区,另一方面也可以把外部的优秀的思想传递到内部团队。

C/C++协程库Libco

Libco是微信后台大规模使用的C/C++协程库,2013年至今稳定运行在微信后台的数万台机器上。Libco提供了完善的协程编程接口、常用的Socket族函数Hook等,使得业务可用同步编程模型快速迭代开发。

早期微信后台因为业务需求复杂多变、产品要求快速迭代等需求,大部分模块都采用了半同步半异步模型。接入层为异步模型,业务逻辑层则是同步的多进程或多线程模型,业务逻辑的并发能力只有几十到几百。随着微信业务的增长,系统规模变得越来越庞大,每个模块很容易受到后端服务/网络抖动的影响。基于这样的背景,微信开发了Libco,实现了对业务逻辑非侵入的异步化改造。

生产级paxos类库PhxPaxos

PhxPaxos是微信后台团队自主研发的一套基于Paxos协议的多机状态拷贝类库。它以库函数的方式嵌入到开发者的代码当中,使得一些单机状态服务可以扩展到多机器,从而获得强一致性的多副本以及自动容灾的特性。PhxPaxos在微信服务里面经过一系列的工程验证和大量的恶劣环境下的测试,在一致性的保证上极为健壮。

PhxPaxos的特性包括使用基于消息传递机制的纯异步工程架构、每次写盘使用fsync严格保证正确性、支持Checkpoint以及对PaxosLog的自动清理、使用点对点流式协议进行快速学习、支持跨机器的Checkpoint自动拉取、内置Master选举功能、自适应的过载保护等。

  • Star数量:970

高可用、强一致的MySQL集群PhxSQL

PhxSQL是一个兼容MySQL、服务高可用、数据强一致的关系型数据库集群。PhxSQL以单Master多Slave方式部署,在集群内超过一半机器存活的情况下、即可提供服务,并且自身实现自动Master切换、保证数据一致性。PhxSQL不依赖于ZooKeeper等任何第三方做存活检测及选主。PhxSQL基于MySQL的一个分支Percona 5.6开发,功能和实现与MySQL基本一致。

MySQL主备在主机上支持完整SQL、全局事务、以repeatable read和serializable级别的事务隔离,在金融、帐号等关键业务中有巨大的价值。但是MySQL传统主备方案也有其缺点。最明显的就是主机故障后的自动换主和新旧主数据一致性,即所谓的一致性和可用性。为了解决这个问题,并同时完全兼容MySQL,微信在MySQL的基础上应用Paxos,设计和开发了PhxSQL。

  • Star数量:1485

RPC框架PhxRPC

PhxRPC是微信后台团队推出的一个简洁小巧的RPC框架,编译生成的库只有450K(编译只依赖第三方库Protobuf)。PhxRPC的特性如下:

  • 使用Protobuf作为IDL用于描述RPC接口以及通信数据结构。

  • 基于Protobuf文件自动生成Client以及Server接口,用于Client的构建,以及Server的实现。

  • 半同步半异步模式,采用独立多IO线程,通过Epoll管理请求的接入以及读写,工作线程采用固定线程池。IO线程与工作线程通过内存队列进行交互。

  • 提供完善的过载保护,无需配置阈值,支持动态自适应拒绝请求。

  • 提供简易的Client/Server配置读入方式。

  • 基于lambda函数实现并发访问Server,可以非常方便地实现Google提出的 Backup Requests 模式。

  • Star数量:467

终端跨平台网络组件:Mars

Mars是微信官方的终端基础组件,是一个结合移动应用所设计的基于Socket层的解决方案,在网络调优方面有更好的可控性,采用C++开发。目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。

在微信中,任何网络实现的bug都可能导致重大事故。例如微信的容灾实现,如果因为版本的实现差异,导致某些版本上无法进行容灾恢复,将会严重的影响用户体验。微信研发了统一的跨平台的网络基础库Mars来满足发展的需要,一方面,基础组件可以提高研发效率,另外一方面,也可以提高系统的稳健性。

在设计上,Mars以跨平台、跨业务为前提,遵从高可用,高性能,负载均衡的设计原则。以网络的可用性为例,移动互联网有着丢包率高、带宽受限、延迟波动、第三方影响等特点,使得网络的可用性,尤其是弱网络下的可用性变得尤为关键。Mars 的STN组件作为基于 socket 层的网络解决方案,在很多细节设计上会充分考虑弱网络下的可用性。

热补丁技术Tinker

Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。

当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案,但它们都存在无法解决的问题,所以微信研发了自己的解决方案。总的来说,AndFix作为native解决方案,首先面临的是稳定性与兼容性问题,更重要的是它无法实现类替换,它是需要大量额外的开发成本的。而Robust兼容性与成功率较高,但是它与AndFix一样,无法新增变量与类只能用做的bugFix方案。Qzone方案可以做到发布产品功能,但是它主要问题是插桩带来Dalvik的性能问题,以及为了解决Art下内存地址问题而导致补丁包急速增大的。

Tinker的具体设计目标如下:

  • 开发透明:开发者无需关心是否在补丁版本,他可以随意修改,不由框架限制。

  • 性能无影响:补丁框架不能对应用带来性能损耗。

  • 完整支持:支持代码,So 库以及资源的修复,可以发布功能。

  • 补丁大小较小: 补丁大小应该尽量的小,提高升级率。

  • 稳定,兼容性好:保证微信的数亿用户的使用,尽量减少反射。

  • GitHub地址:https://github.com/Tencent/tinker

  • Star数量:6707

Twitter开源软件项目列表

从Twitter的GitHub账户中可以看到,Twitter已经开源的开源项目有近200个,领域涉及分布式架构、大数据、异步网络传输(客户端、服务端)、Web、工具等。Twitter可以称为构建于开源项目之上,该公司开源负责人Chris Aniszczyk表示,如果没有开源软件,Twitter将不会存在,用户在移动端和PC端发送和接收的每一条推文都会需要开源软件。

Twitter从开源社区中获得了大量的好处,而Twitter也在不断地回馈社区,开源了大量基础设施和工具,使得其他企业和开发者不必重新发明轮子,在这些开源项目的基础上更加快速地实现自己所需。可以看到,Twitter在开源社区的贡献是显著的,甚至其贡献的某些开源项目在一定程度上比Twitter本身带来的影响力更大。

下面是InfoQ编辑整理的Twitter现有的比较活跃的开源项目列表,欢迎交流讨论。

jQuery插件,快速、全功能的自动完成库:Typeahead.js

Typeahead.js是Twitter的一个jQuery插件,支持远程和本地的数据集。比较有特色的地方在于,你可以将数据集使用本地存储(local storage)来保存在本地,有效的提高用户体验。同时也拥有很多远程数据集的处理选项,例如请求频率,最大的并发请求数,等等。它的主要特性有:

  • 支持数据本地保存,客户端加载,优化加载速度;

  • 支持多语言,并且支持阿拉伯文;

  • 支持Hogan.js模板引擎整合;

  • 支持多数据集拼装;

  • 支持本地和远程的数据集。

  • Star数量:12700

JavaScript库:Twemoji

Twemoji是Twitter于2014年开源的完整的Emoji表情图片,Twemoji包含872个表情,兼容最新的Unicode 7.0。Emoji,来自日本的小巧符号,通过图像表达感情,已经征服了移动互联网的信息世界。现在,你可以在虚拟世界中随处使用它们。开发者可以去GitHub下载完整的表情库,并把这些表情加入到自己的应用或网页中。

JavaScript模板引擎:Hogan.js

Hogan.js是Twitter团队所制作的一个针对mustache模板的语法解析器。Hogan.js不依赖其他任何库或框架,同时保证了高效率的模板解析,而其体积却仅有2.5K。用它作为你的一部分资产打包编译模板提前或将它包括在你的浏览器来处理动态模板。

RPC框架:Finagle

Finagle是一个允许开发者使用Java、Scala或其他JVM语言来构建异步RPC服务器和客户端的库,主要用于Twitter的后端服务。Finagle是Twitter基于Netty开发的支持容错的、协议无关的RPC框架,该框架支撑了Twitter的核心服务。

Twitter面向服务的架构是由一个庞大的Ruby on Rails应用转化而来的。为了适应这种架构的变化,需要有一个高性能的、支持容错的、协议无关且异步的RPC框架。在面向服务的架构之中,服务会将大多数的时间花费在等待上游服务的响应上,因此使用异步的库能够让服务并发地处理请求,从而充分发挥硬件的潜能。Finagle构建在Netty之上,并不是直接在原生NIO之上构建的,这是因为Netty已经解决了许多Twitter所遇到的问题并提供了干净整洁的API。

自动化测试工具:Diffy

Diffy是一个开源的自动化测试工具,它能够自动检测基于Apache Thrift或者基于HTTP的服务。使用Diffy,只需要进行简单的配置,之后不需要再编写测试代码。

Diffy主要基于稳定版本和它的副本的输出,对候选版本的输出进行比较,以检查候选版本是否正确。因此,Diffy首先假设候选版本应该和稳定版本有“相似”的输出。即不论候选版本和稳定版本系统模块是否相同,他们的最终输出应该是“相似”的。这里一直使用“相似”,而不是使用相同,是因为相同请求可能会有一些Diffy不需要关心的干扰,比如:

  • 响应中包含服务器生成的时间戳;

  • 代码中使用了随机数;

  • 系统服务间有条件竞争。

  • GitHub主页:https://github.com/twitter/diffy

  • Star数量:2544

Scala库:Scalding

Scalding是一个Scala库,简化了Hadoop MapReduce作业开发,基于Cascading构建。Scalding跟Pig类似,但提供更紧密的Scala集成。Scalding是用于Cascading的Scala API。Cascading是一个构建于Hadoop上的API,用来创建复杂和容错数据处理工作流,它抽象了集群拓扑结构和配置,允许开发者快速开发复杂分布式的应用,而不用考虑背后的MapReduce。

数据实时分析平台:Heron

2016年5月25日,Twitter正式宣布Heron开源。Heron的基本原理和方法:实时流系统是在大规模数据分析的基础上实现系统性的分析。另外,它还需要:每分钟处理数十亿事件的能力、有秒级延迟,和行为可预见;在故障时保证数据的准确性,在达到流量峰值时是弹性的,并且易于调试和在共享的基础设施上实现简单部署。

为了满足这些需求,Twitter讨论出了几种方案,包括:扩展Storm、使用其他的开源系统、开发一个全新的平台。因为有几个需求是要求改变 Storm的核心架构,所以对它进行扩展需要一个很长的开发周期。其他的开源流处理框架并不能完美满足Twitter对于规模、吞吐量和延迟的需求。而且,这些系统也不能兼容Storm API——适应一个新的API需要重写几个topologies和修改高级的abstractions,这会导致一个很长的迁移过程。所以,Twitter决定建立 一个新的系统来满足以上提到需求和兼容Storm API。

在Twitter,Heron作为主要的流媒体系统,运行数以百万计的开发和生产topologies。由于Heron可高效使用资源,在迁移Twitter所有的topologies后,整体硬件减少了3倍,导致Twitter的基础设置效率有了显著的提升。

Web安全开发工具:SecureHeaders

SecureHeaders是Twitter送给Web开发者的一份大礼,作为一款Web安全开发工具,Secureheaders能够自动实施安全相关的header规则,包括内容安全政策(CSP),防止XSS、HSTS等攻击,防止火绵羊(Firesheep)攻击以及XFO点击劫持等。

  • Star数量:1697

代理服务器:Twemproxy

Twemproxy是一个快速的单线程代理程序,支持Memcached ASCII协议和更新的Redis协议。它全部用C写成,使用Apache 2.0 License授权。Twemproxy的强大之处在于可以通过配置的方式让它禁用掉失败的结点,同时还能在一段时间后进行重试,抑或使用指定的键->服务器映射。这意味着在将Redis用作数据存储时,它可以对Redis数据集进行分片(禁用掉结点驱逐);在将Redis用作缓存时,它可以启用结点驱逐以实现简单的高可用性。它的特性是:

  • 通过代理的方式减少缓存服务器的连接数;

  • 自动在多台缓存服务器间共享数据;

  • 通过不同的策略与散列函数支持一致性散列;

  • 通过配置的方式禁用失败的结点;

  • 运行在多个实例上,客户端可以连接到首个可用的代理服务器;

  • 支持请求的流式与批处理,因而能够降低来回的消耗;

  • 速度快;

  • 轻量级。

  • GitHub主页:https://github.com/twitter/twemproxy

  • Star数量:5434

微软开源软件列表

提起微软公司,不少人第一反应是老牌巨头专注于私有化软件盈利模式,这大抵是源于微软前CEO Steve Ballmer曾经宣称“Linux是颗毒瘤(Linux is a cancer)”,并曾经偏执地认为所有开源软件都不值一提。但是,这是2001年的事情了,是时候更新大家对微软的刻板印象。

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上。

TypeScript:开源编程语言,JavaScript的超集

TypeScript是JavaScript强类型的超集,可以编译成纯JavaScript。由微软开发的自由和开源的编程语言,可以运行在各类浏览器和操作系统之上。

  • Star数量:19.8k ;Fork数量:2.8k

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)。在相同硬件上获得的结果。

Donnet:采用系统虚拟机运行的编程平台

.NET是微软研发的XML Web services平台,此框架支持多种语言(如C#、F#、VB.Net、C++、Python等)的开发。.NET框架历经亟待,最终于2014年开源。

C#通常被认为是微软专属,是.NET框架上最常用的编程语言之一, 其著名竞争对手是Java。

  • Star数量: 7.8k ;Fork数量:1.2k

PowerShell :为任何系统提供Windows的命令行工具

一个跨平台(Windows、Linux和macOS)自动化和配置工具/框架,可与现有工具完美配合,并优化用于处理结构化数据(例如JSON,CSV,XML等)、REST API 和对象模型。 它包括命令行shell,相关的脚本语言和用于处理cmdlet的框架。

  • Star数量:6.4k;Fork数量:800

MSOpenTech/redis: 在Windows使用Redis

官方只支持64位,可自行构建32位版。

该开源项目,在2.8版本中,替代UNIX fork()API中的内存映射文件模拟写时复制行为。 版本3.0类似,为了便于系统文件分页,删除了内存映射文件,在管理堆碎片方面进行了改进。

Redis对文件描述符的值做了一些假设,微软构建了一个虚拟文件描述符映射层。

WinObjc:Windows下的Objective-C

为Visual Studio提供了一个Objective-C开发环境并支持iOS API。通过重新使用Objective-C代码和iOS API,配以Windows自有Cortana(中文名:微软小娜,微软发布的全球第一款个人智能助理)和通知等功能,用户可以创建通用Windows平台(UWP)应用程序并运行在Windows设备上。

ASP.NET之MVC核:模型(model)-视图(view)-控制器(controller)框架

旨在TDD友好,用于创建符合最新Web标准的复杂应用程序、构建动态网站,可以在IIS中托管或自我托管。

BashOnWindows:解决Ubuntu Bash在Windows的使用问题

微软在Build 2016大会上宣布了一条振奋人心的消息,大家惊呼Ubuntu on Windows。Bash on Windows 为开发者们提供了Bash shell、Linux类似环境,在不需要Linux虚拟机的情况下,大部分的Linux命令行工具基本上可以不经修改地运行在Windows上。

  • Star数量:3.7k;Fork数量:129

Azure相关:文档、SDK和代码示例

微软支持开发者们将各种开源软件工具和技术带入Azure。Azure 应用市场支持很多Linux 分发,包括 Ubuntu、Debian 和 SUSE;也支持借助支持 Node.js、PHP、Python 和 Java 的 Azure 应用服务,生成 Web 和移动应用。

在GitHub上Azure相关的存储库有1700+个。

  • Star数量(共计):149k;Fork数量(共计):291k

今日荐文

点击下方图片即可阅读

一名合格的架构师应该具备哪些特质?

【推荐】 NoSQL 简介
【推荐】 大数据开发专家(40K以上)必须掌握技能!
【推荐】 什么是 热闹驱动开发 ?
【推荐】 程序员工作时用到的“工具”有哪些?