标签 微软 下的文章

原文观点

今日 Linux 中国发布了一篇文章 《大家都在点赞 Windows Terminal,我决定给你泼一盆冷水》 。该文主要观点引用如下:

  • Windows Terminal 是一个套在 Windows 操作系统原本的 CMD、Powershell、Windows Subsystem for Linux(WSL)之上的一个界面更加漂亮、功能更加强大的终端工具。严格来说,它是套在 CMD 、Powershell 之上的一个终端。
  • 它也只是一个终端而已,而不是一个更加好用的 Shell。
  • Windows 用户所吐槽的命令行不好用不在于其表面,而在于其没有一个足够好用的 Shell。
  • 看起来,Windows Terminal 和 WSL 的结合,已经非常完美了,但作为一个 Shell 来用的话,又显的过于笨重。
  • WSL 无论做的再怎么好,无法摆脱它只是一个运行于 Windows 系统中附属的子系统。无论 WSL 做的再好,本质上并没有比虚拟机做的更多。
  • 作为生态的打造者,微软真正可以做好的是,打造一个能够在体验和生态上与 Unix Shell 一致的 Shell,或者是干脆提供 Bash、Zsh 等常用 Shell 的原生支持(WSL 虽然支持 Bash、Zsh等,但依然是需要先进入 WSL 才能使用,但你可以畅想一下,如果 CMD 变成了 Bash,会是什么样的呢?)。
  • 对于广大使用 Windows 开发的用户来说,一个闪闪发亮的、现代化的、功能强大的终端固然很好,但好的终端只不过是锦上添花之举,而一个强大好用的 Shell 才是真正能够雪中送炭的东西,只有一个足够好用的 Shell,才能成为 Windows 命令行世界的救世主。

关于原文更完整的观点,请参阅原文。这里针对原文观点和表达一些不同意见的商榷。

Terminal 与 Shell

诚如原文所说,Windows Terminal 其实是一个窗口而已,真正执行的是里面的软件,但是 Windows Terminal 并不如原文说的那么一无是处。众所周知 CMD、PowerShell 默认进入以后是没有标签的,想要使用多个只能多开窗口,管理起来不如够方便,而且配色也是影响使用者快速定位问题的一个重要指标。而这次的 Windows Terminal 不但解决这些问题,还能够支持 emoji,可大大提升在里面所运行的程序的使用体验。

再来说说什么是 shell ?一个 shell 是提供用户与操作系统交互的界面/入口,当我们在命令行中输入各种命令时,其实就是在执行一个应用程序,shell 将这些程序送往内核进行执行,所以最终还是要归到内核的系统调用,此外广义上的 shell 其实还包括了图形界面。

让我们来看看第一个点:

  • Windows Terminal 是一个套在 Windows 操作系统原本的 CMD、Powershell、Windows Subsystem for Linux(WSL)之上的一个界面更加漂亮、功能更加强大的终端工具。严格来说,它是套在 CMD 、Powershell 之上的一个终端。

Windows Terminal 准确来说就是一个支持配色的更加现代的终端入口,也不能说是嵌套什么 CMD、PowerShell、WSL,你想怎么使用它取决于你想进入什么样的命令行解释器。举个 Linux 下的例子就是我可以在 konsole 下使用 fish、zsh、bash 等 shell 解释器。

更好用的 shell?

  • 它也只是一个终端而已,而不是一个更加好用的 Shell。
  • Windows 用户所吐槽的命令行不好用不在于其表面,而在于其没有一个足够好用的 Shell。
  • 看起来,Windows Terminal 和 WSL 的结合,已经非常完美了,但作为一个 Shell 来用的话,又显的过于笨重。

关于这里,我觉得原文作者忽视了 Shell 与 Terminal 的区别。Shell 作为一个命令解释器,必然有自己的语法。而 Linux 生态系统中已经很好用的 shell 就有 fish、zsh、bash 等,但是这些语法也不是所有都兼容的,而且一个好用的 shell 一般只是用户感觉上的东西,没有很明确的指标。Windows 用户在有了 WSL 之后可以使用任何 Linux 已经有的 shell 解释器,这其实已经足够解决问题了,毕竟这些工具的改进是为了吸引 Linux 平台上的开发者,而不是为了一个毫无经验的小白准备的。

此外,原文作者提到的 Windows Terminal 与 WSL(搭载完整内核) 结合作为 shell 使用的话,无异于高射炮打蚊子。这点我也是强烈反对的,首先 shell 只是一个命令解释器,它其实不负责命令的执行,最终所有的程序都要传递给系统调用,如果底层的系统调用不支持,那么该 shell 脚本也是无法执行的(内核不会有反应、或者报错),所以你要使用 shell,那么必须要求有底层内核的支持,这不是什么高射炮打不打蚊子的事,而是你必须要知道其实 shell 它自己本身就是个解释器,没有别的特异功能而已。

一个更好用的 shell 也许是值得吸引人的,但是其实 shell 的语法也不见得多好用,很多反人类的,只是我们已经学习接受了这种语法所以认可它。另一个方面是历史问题,要想你写的脚本一次编写处处执行,那么最好就是 bash 兼容了,否则别人为了执行你的特殊语法,还要装一个能读懂你的 shell 语法的解释器。

wsl 与虚拟机?

  • WSL 无论做的再怎么好,无法摆脱它只是一个运行于 Windows 系统中附属的子系统。无论 WSL 做的再好,本质上并没有比虚拟机做的更多。

我其实觉得这句话没有道理,为什么这样说呢,确实 WSL 不会比虚拟机做的更多,因为你虚拟机安装的是一个完整的操作系统,但是 WSL 优势是什么?

WSL 的优势就是不需要虚拟机,你便可以使用大部分 Linux 的生态,这是向开发人员示好。而且 WSL 不需要长期运行一个虚拟机,在 WSL1 的时候,你实际执行应用 WSL 会把系统调用转成 NT 系统调用。而 WSL2 将包含完整 Linux 内核,还将支持 Docker(此处无法得知它具体的实现,不做推测)。WSL1 的限制很多,使用起来不是特别方便,这个有使用过的朋友应该很有体会,但是 WSL2 既然能运行 Docker,那么有了 Docker 我就有了一切。

生态体验?

  • 作为生态的打造者,微软真正可以做好的是,打造一个能够在体验和生态上与 Unix Shell 一致的 Shell,或者是干脆提供 Bash、Zsh 等常用 Shell 的原生支持(WSL 虽然支持 Bash、Zsh等,但依然是需要先进入 WSL 才能使用,但你可以畅想一下,如果 CMD 变成了 Bash,会是什么样的呢?)。
  • 对于广大使用 Windows 开发的用户来说,一个闪闪发亮的、现代化的、功能强大的终端固然很好,但好的终端只不过是锦上添花之举,而一个强大好用的 Shell 才是真正能够雪中送炭的东西,只有一个足够好用的 Shell,才能成为 Windows 命令行世界的救世主。

这两个观点也是不攻自破的,我既然可以使用 WSL,那么我本身就拥有了 Linux 的生态。如果是希望写 bat 批处理而能有 bash、zsh 的这些体验,那么确实是需要一个新的 shell 满足 Unix Shell 语法,再来解释 Windows 下的命令行,可是这其实也是不需要的。因为本人发现在 WSL 里面执行一个 exe 程序是完全可行的,因此可以用这种 shell 语法去编写我的脚本,oh nice!!体验非常统一啊有没有?

locez@Lenovo-PC~> pycharm64.exe  ### 会启动我的 pycharm
locez@Lenovo-PC~> git.exe | xargs echo

我的观点

我本人认为,微软的这些拥抱 Linux 的举措,其实就是在吸引 Linux 上的开发者而已,开发者想要的工具,如果能够在 Windows 下就能直接使用,那对我们这些开发人员来说无外乎是喜报。工具多一个总不是坏事,但是如果它真的值得使用,那么用户一定会增加,这就是需要微软来做的事情了。我本人是双系统用户,在打游戏娱乐方面我一定会使用 Windows,做开发写代码我会切换到 Linux,曾经写一个很小的软件也是如此。但是后来 WSL 出现了,简单的脚本我可以在 Windows 下就直接完成并且提交,不需要重启系统,然后继续玩我的游戏,美滋滋。

另外就是 Windows Terminal 与 WSL2 的出现会解放我现在系统上的一些工具,例如 git bash、gpg4win 等。如果 WSL2 真的有完整的系统调用,那么我现有的 Windows 上的开发环境便不再需要,专注于游戏娱乐,但是一进 WSL 便是我工作学习的地方。

编者按:本文不代表本站观点,而且微软收购 GitHub 的后果目前尚未显现出来,本文只是提供了一个选择。

正如你们之前听到的那样,微软收购了 GitHub。这对 GitHub 的未来意味着什么尚不清楚,但 Gitlab 的人认为微软的最终目标是将 GitHub 整合到他们的 Azure 帝国。对我来说,这很有道理。

尽管我仍然不情愿地将 GitHub 用于某些项目,但我前一段时间将所有个人仓库迁移到了 Gitlab 中。现在是时候让你做同样的事情,并抛弃 GitHub。

有些人可能认为微软的收购没有问题,但对我来说,这是压垮骆驼的最后一根稻草。几年来,微软一直在开展一场关于他们如何热爱 Linux 的大型营销活动,并突然决定用它所有的形式拥抱自由软件。更像 MS BS 给我​​的。

让我们花点时间提醒自己:

  • Windows 仍然是一个巨大的专有怪物,数十亿人每天都在丧失他们的隐私和权利。
  • 微软公司(曾经)以传播自由软件的“危害”闻名,以防止政府和学校放弃 Windows,转而支持 FOSS。
  • 为了确保他们的垄断地位,微软通过向全世界的小学颁发“免费”许可证来吸引孩子使用 Windows。毒品经销商使用相同的策略并提供免费样品来获取新客户。
  • 微软的 Azure 平台 - 即使它可以运行 Linux 虚拟机 - 它仍然是一个巨大的专有管理程序。

我知道移动 git 仓库看起来像是一件痛苦的事情,但是 Gitlab 的员工正在趁着人们离开 GitHub 的浪潮,通过提供 GitHub 导入器使迁移变得容易。

如果你不想使用 Gitlab 的主实例(gitlab.org),下面是另外两个你可以用于自由软件项目的备选实例:

朋友不要再让人使用 Github 了。


via: https://veronneau.org/lets-migrate-away-from-github.html

作者:Louis-Philippe Véronneau 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在这篇分析报告中,我们将使用 2017 年度截止至当前时间(2017 年 10 月)为止,GitHub 上所有公开的推送事件的数据。对于每个 GitHub 用户,我们将尽可能地猜测其所属的公司。此外,我们仅查看那些今年得到了至少 20 个星标的仓库。

以下是我的报告结果,你也可以在我的交互式 Data Studio 报告上进一步加工

顶级云服务商的比较

2017 年它们在 GitHub 上的表现:

  • 微软看起来约有 1300 名员工积极地推送代码到 GitHub 上的 825 个顶级仓库。
  • 谷歌显示出约有 900 名员工在 GitHub 上活跃,他们推送代码到大约 1100 个顶级仓库。
  • 亚马逊似乎只有 134 名员工活跃在 GitHub 上,他们推送代码到仅仅 158 个顶级项目上。
  • 不是所有的项目都一样:在超过 25% 的仓库上谷歌员工要比微软员工贡献的多,而那些仓库得到了更多的星标(53 万对比 26 万)。亚马逊的仓库 2017 年合计才得到了 2.7 万个星标。

红帽、IBM、Pivotal、英特尔和 Facebook

如果说亚马逊看起来被微软和谷歌远远抛在了身后,那么这之间还有哪些公司呢?根据这个排名来看,红帽、Pivotal 和英特尔在 GitHub 上做出了巨大贡献:

注意,下表中合并了所有的 IBM 地区域名(各个地区会展示在其后的表格中)。

Facebook 和 IBM(美)在 GitHub 上的活跃用户数同亚马逊差不多,但是它们所贡献的项目得到了更多的星标(特别是 Facebook):

接下来是阿里巴巴、Uber 和 Wix:

以及 GitHub 自己、Apache 和腾讯:

百度、苹果和 Mozilla:

(LCTT 译注:很高兴看到国内的顶级互联网公司阿里巴巴、腾讯和百度在这里排名前列!)

甲骨文、斯坦福大学、麻省理工、Shopify、MongoDb、伯克利大学、VmWare、Netflix、Salesforce 和 Gsa.gov:

LinkedIn、Broad Institute、Palantir、雅虎、MapBox、Unity3d、Automattic(WordPress 的开发商)、Sandia、Travis-ci 和 Spotify:

Chromium、UMich、Zalando、Esri、IBM (英)、SAP、EPAM、Telerik、UK Cabinet Office 和 Stripe:

Cern、Odoo、Kitware、Suse、Yandex、IBM (加)、Adobe、AirBnB、Chef 和 The Guardian:

Arm、Macports、Docker、Nuxeo、NVidia、Yelp、Elastic、NYU、WSO2、Mesosphere 和 Inria:

Puppet、斯坦福(计算机科学)、DatadogHQ、Epfl、NTT Data 和 Lawrence Livermore Lab:

我的分析方法

我是怎样将 GitHub 用户关联到其公司的

在 GitHub 上判定每个用户所属的公司并不容易,但是我们可以使用其推送事件的提交消息中展示的邮件地址域名来判断。

  • 同样的邮件地址可以出现在几个用户身上,所以我仅考虑那些对此期间获得了超过 20 个星标的项目进行推送的用户。
  • 我仅统计了在此期间推送超过 3 次的 GitHub 用户。
  • 用户推送代码到 GitHub 上可以在其推送中显示许多不同的邮件地址,这部分是由 GIt 工作机制决定的。为了判定每个用户的组织,我会查找那些在推送中出现更频繁的邮件地址。
  • 不是每个用户都在 GitHub 上使用其组织的邮件。有许多人使用 gmail.com、users.noreply.github.com 和其它邮件托管商的邮件地址。有时候这是为了保持匿名和保护其公司邮箱,但是如果我不能定位其公司域名,这些用户我就不会统计。抱歉。
  • 有时候员工会更换所任职的公司。我会将他们分配给其推送最多的公司。

我的查询语句

#standardSQL
WITH
period AS (
  SELECT *
  FROM `githubarchive.month.2017*` a
),
repo_stars AS (
  SELECT repo.id, COUNT(DISTINCT actor.login) stars, APPROX_TOP_COUNT(repo.name, 1)[OFFSET(0)].value repo_name 
  FROM period
  WHERE type='WatchEvent'
  GROUP BY 1
  HAVING stars>20
), 
pushers_guess_emails_and_top_projects AS (
  SELECT *
    # , REGEXP_EXTRACT(email, r'@(.*)') domain
    , REGEXP_REPLACE(REGEXP_EXTRACT(email, r'@(.*)'), r'.*.ibm.com', 'ibm.com') domain
  FROM (
    SELECT actor.id
      , APPROX_TOP_COUNT(actor.login,1)[OFFSET(0)].value login
      , APPROX_TOP_COUNT(JSON_EXTRACT_SCALAR(payload, '$.commits[0].author.email'),1)[OFFSET(0)].value email
      , COUNT(*) c
      , ARRAY_AGG(DISTINCT TO_JSON_STRING(STRUCT(b.repo_name,stars))) repos
    FROM period a
    JOIN repo_stars b
    ON a.repo.id=b.id
    WHERE type='PushEvent'
    GROUP BY  1
    HAVING c>3
  )
)
SELECT * FROM (
  SELECT domain
    , githubers
    , (SELECT COUNT(DISTINCT repo) FROM UNNEST(repos) repo) repos_contributed_to
    , ARRAY(
        SELECT AS STRUCT JSON_EXTRACT_SCALAR(repo, '$.repo_name') repo_name
        , CAST(JSON_EXTRACT_SCALAR(repo, '$.stars') AS INT64) stars
        , COUNT(*) githubers_from_domain FROM UNNEST(repos) repo 
        GROUP BY 1, 2 
        HAVING githubers_from_domain>1 
        ORDER BY stars DESC LIMIT 3
      ) top
    , (SELECT SUM(CAST(JSON_EXTRACT_SCALAR(repo, '$.stars') AS INT64)) FROM (SELECT DISTINCT repo FROM UNNEST(repos) repo)) sum_stars_projects_contributed_to
  FROM (
    SELECT domain, COUNT(*) githubers, ARRAY_CONCAT_AGG(ARRAY(SELECT * FROM UNNEST(repos) repo)) repos
    FROM pushers_guess_emails_and_top_projects
    #WHERE domain IN UNNEST(SPLIT('google.com|microsoft.com|amazon.com', '|'))
    WHERE domain NOT IN UNNEST(SPLIT('gmail.com|users.noreply.github.com|qq.com|hotmail.com|163.com|me.com|googlemail.com|outlook.com|yahoo.com|web.de|iki.fi|foxmail.com|yandex.ru', '|')) # email hosters
    GROUP BY 1
    HAVING githubers > 30
  )
  WHERE (SELECT MAX(githubers_from_domain) FROM (SELECT repo, COUNT(*) githubers_from_domain FROM UNNEST(repos) repo  GROUP BY repo))>4 # second filter email hosters
)
ORDER BY githubers DESC

FAQ

有的公司有 1500 个仓库,为什么只统计了 200 个?有的仓库有 7000 个星标,为什么只显示 1500 个?

我进行了过滤。我只统计了 2017 年的星标。举个例子说,Apache 在 GitHub 上有超过 1500 个仓库,但是今年只有 205 个项目得到了超过 20 个星标。

这表明了开源的发展形势么?

注意,这个对 GitHub 的分析没有包括像 Android、Chromium、GNU、Mozilla 等顶级社区,也没有包括 Apache 基金会或 Eclipse 基金会,还有一些其它项目选择在 GitHub 之外开展起活动。

这对于我的组织不公平

我只能统计我所看到的数据。欢迎对我的统计的前提提出意见,以及对我的统计方法给出改进方法。如果有能用的查询语句就更好了。

举个例子,要看看当我合并了 IBM 的各个地区域名到其顶级域时排名发生了什么变化,可以用一条 SQL 语句解决:

SELECT *, REGEXP_REPLACE(REGEXP_EXTRACT(email, r'@(.*)'), r'.*.ibm.com', 'ibm.com') domain

当合并了其地区域名后, IBM 的相对位置明显上升了。

回音

接下来

我以前犯过错误,而且以后也可能再次出错。请查看所有的原始数据,并质疑我的前提假设——看看你能得到什么结论是很有趣的。

感谢 Ilya Grigorik 保留的 GitHub Archive 提供了这么多年的 GitHub 数据!

想要看更多的文章?看看我的 Medium在 twitter 上关注我 并订阅 reddit.com/r/bigquery试试 BigQuery,每个月可以免费分析 1 TB 的数据。


via: https://medium.freecodecamp.org/the-top-contributors-to-github-2017-be98ab854e87

作者:Felipe Hoffa 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

旨在推行和保护开源软件的 开源计划 Open Source Initiative (OSI)26 日宣布,微软最近成为了其白金赞助者。

OSI 的主要目标是通过培训和合作,以及通过基础设施来促进开源技术和开源软件项目发展。没有像 OSI 这样的开源组织,整个开源运动将没有机会成功地成为软件行业的一等公民,而现在专有软件仍占用有利地位。而现在,微软的加入将进一步促进开源软件的发展。

OSI 总经理兼董事 Patrick Masson 说,“广义地说,这是 OSI 和开源软件运动的一个重要里程碑。我觉得没有比这个更能证明开源软件的成熟、生存能力、关注和成功,它不仅得到了微软的认可,而且是作为赞助商支持,以及他们作为贡献者参与这么多开放源项目和社区。”

微软是开源软件项目的领先贡献者

据 OSI,微软是一个领先的贡献者。它对开源社区的贡献是众所周知的,包括与 Canonical 合作定制 Azure 的 ubuntu 内核, 以及 Windows 上的 Linux 子系统(WSL)。

微软也与 Red Hat 和 SUSE 以及 Linux 基金会在各种项目上展开了合作,并与 OSI 成员 FreeBSD 基金会合作,在该公司的 Azure 云平台上支持其 FreeBSD 操作系统。通过加入 OSI,微软会更多地在其产品中集成开源软件。

Canonical 前几天正式发布公告称,“Windows 10 Loves Ubuntu”,其 Ubuntu 16.04 LTS 在 Windows 10 商店中以应用的方式出现,这是继 openSUSE 及 SLES 之后,又一款可以从 Windows 10 商店中下载的 Linux 操作系统。

一些用户已经注意到了,Ubuntu Linux 是以 WSL(Windows Subsystem for Linux)的方式出现在 Windows 10 商店中,如我们之前多次的报道,其目的主要是可以让跨平台开发者们无须重启或运行虚拟机即可在两个平台测试其开发的应用。

不过,这次 Canonical 正式发布的公告是以 “Windows 10 Loves Ubuntu” 为题,显然是呼应了之前微软 CEO 萨提亚的口号“Microsoft Love Linux”。在该公告中,正式宣布了其 Ubuntu 16.04 LTS 以应用的方式出现在 Windows 10 商店中,不过只有使用最新的 Windows Insider 构建版本才能使用。

“这个最新改进的应用是由 Canonical 在微软 WSL 团队的协助下创建,并在微软 Build 2017 大会上宣布。” Canonical 工程师 Dimitri John Ledkov 说,“其安装体验得到了极大改进,使用 Ubuntu on Windows 将从所未有的容易。”

用户需要加入到 Windows Insiders 计划中,并升级到 Windows 10 的最新预览版才能使用它,因为“Windows Subsystem for Linux(WSL)”只在 Windows Insider 构建版本中可用。

要激活它,搜索“打开或关闭 Windows 功能”,启用“Windows Subsystem for Linux” 选项,并像安装其它应用一样从 Windows 10 商店中安装 Ubuntu 即可。安装后第一次启动需要初始化配置。

此外, 除了 SUSE 和 Ubuntu 之外,Fedora 也在计划进入 Windows 10 商店中。

via: softpediaubuntu

Bash on Windows

微软发布了 Bash on Windows,旨在吸引开发者使用 Windows 平台。其高级程序经理 Rich Turner 呼吁 Linux 开发人员放弃 Linux ,转到 Windows 10 上来:“Windows 中的 Linux 子系统将给开发者们提供所有他们在 Linux 开发中必要的工具,而不用丧失 Windows 10 的优势。”

这是诱惑么?这是诱惑么?这是诱惑么?


via: http://turnoff.us/geek/bash-on-windows/

作者:Daniel Stori 译者:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出