雕刻在NT内核中的LINUS故事

    这是一个美妙而且疯狂的时代,瞬息万变,一切皆有可能。

    曾经一度,微软把Linux看作危险的异类,想将其扼杀在摇篮之中。而如今,摇身一变,化敌为友,微软是LINUX Foundation的铂金级别会员。

640?wx_fmt=png

    根据Linux Foundation的官方文档,铂金会员是Linux Foundation最高级别的会员,每年的年费为50万美金。(https://www.linuxfoundation.org/bylaws/)

Platinum
US$ 500,000
Gold
US$ 100,000
Silver
US$ 20,000 (employee size greater than 5,000)
US$ 15,000 (employee size between 500 and 4,999)
US$ 10,000 (employee size between 100 and 499)
US$ 5,000 (employee size <100)

    铂金级别的会员可以在Linux Foundation的Board中有一个席位,制定决策时有话语权。

  撇开技术外的不谈,从技术角度看,Windows 10引入的WSL(Windows Subsystem for Linux)非常值得关注和思考。

    简单来说,WSL就是让Windows用户可以在Windows上使用Linux,运行原生的二进制程序,不需要重新编译。

    对于从来没有使用过WSL的格友,强烈推荐你试一下WSL,如果你使用的是Windows 10,那么“把大象装进冰箱”只需要三步:

  1.   以管理员身份启动一个PowerShell窗口,执行Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

  2.     重启

  3.     打开Windows Store(以前一直觉得没用的东西,终于有用了),搜索WSL,选择你喜欢的Linux发行版本安装   

640?wx_fmt=png

    安装速度很快,比在虚拟机里安装要快很多,比如,选择Ubuntu的话,连下载带安装只要几分钟就好了。   

640?wx_fmt=png

    接下来就可以享受Linux的短平快了,安装gcc,gdb,......喜欢什么装什么,就是一两条命令的问题。


    从名字来看,WSL是为Linux而设计的子系统(Windows Subsystem for Linux)。但是如果深刻分析,冷静思考,WSL用的并不是Linux内核,而是Linux应用

    进一步说,WSL是让Linux应用可以运行在经典的NT内核之上,不需要重新编译,实现二进制兼容。

    有了WSL后,NT内核上便可以肩并肩的运行Windows程序和Linux程序,二者可以访问相同的文件系统,可以通信,可以写作,可以做的事情很多很多......

    比如,下面的任务管理器截图里便包含了Ubuntu的top进程。

640?wx_fmt=png

    

    有人可能说,Linux应用怎么能跑在NT内核上呢?这的确不是一件简单的事,但是微软花钱、花时间做到了。

    简单来说,启用WSL后,Windows会以驱动的形式加载一个名为LxCore的模块:

    \SystemRoot\system32\drivers\LXCORE.SYS

    某种意义上说,它就是微软版本的Linux内核。

    还是举个例子来帮助大家快速加深理解吧。

    我们曾经介绍过Linux内核中的SYSC_reboot函数,它是reboot API对应的系统服务。更有趣的是,这个函数里面雕刻着Linus大神的生日和三个爱女的生日

  在LxCore中,也可以看到这一组神秘的数字,反汇编名为LxpSyscall_REBOOT的函数,便可以看到。

    

640?wx_fmt=png

    完整的反汇编结果有点长,上面截图是最关键的部分,可以看到有四条比较指令,第一条是比较cmd是不是代表reboot的“FEEL DEAD”。第二条便是比较Magic1是不是Linus大神本人的生日1969/12/28。后面三个比较的目标分别是三个女儿的生日,不多说了。

    如此看来,Linus的家庭故事也被雕刻在了Windows操作系统之中,这或许是当初Linus编写这段代码时也没有预料到的。    

    下面是调用LxpSyscall_REBOOT函数的情景:

640?wx_fmt=png

    截图中从#05栈帧起的下半部分对应的应用程序的栈,目前WinDBG还不能回溯出其中的函数名字,但是已经在计划内了,在LXCORE模块块中已经准备了一个名为PicoWalkUserStack的函数。

    说到这里,大家应该坚信,WSL中并没有使用真正的Linux内核,而是克隆了一份。于是问题来了,严格说,狭义的Linux就是指Linux内核,Linux上的各种应用很多都来自GNU或者其它源头。

    从软件生态和产业的角度思考,内核本身并不创造价值,应用程序才是用户真正需要和体现价值的。如此说来,WSL是让值钱的Linux应用程序可以跑在Windows上,为Linux应用提供了一个新的运行环境。从这个角度来说,WSL与Linux内核无疑是相互竞争的关系。于是乎,Linux与微软的关系又变得非常微妙了,可能是并肩前进,互利双赢,也可能是貌合神离,与狼共舞?奇妙的世界,一切皆有可能。


  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值