V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rpish
V2EX  ›  黑魔法

WSL1 根本不是什么黑魔法 而是抄袭 Docker 而已吧

  •  
  •   rpish · 2020-03-30 12:22:34 +08:00 · 7578 次点击
    这是一个创建于 1699 天前的主题,其中的信息可能已经有所发展或是发生改变。

    WSL2 快发布了 但是今天上操作系统课讲到虚拟机 看到课件上的虚拟机结构图 突然想到 Docker 简化了虚拟机的系统层 直接调系统 API 模拟了一个虚拟环境 又想到 WSL1 好像也是那么做的 查了下发布时间 Docker13 年 WSL16 年... 所以 WSL1 根本不像知乎上吹的是什么黑魔法 不过是抄袭了 Docker 的想法 最后还因为坑太多填不上 放弃了 转用更传统的办法

    21 条回复    2020-06-23 02:20:01 +08:00
    codehz
        1
    codehz  
       2020-03-30 12:30:19 +08:00 via Android   ❤️ 13
    ??? docker 用的是 linux 内核的命名空间,cgroup,seccomp 等机制,和虚拟化没半毛钱关系,docker 事实上完全没有任何虚拟化的过程

    wsl 1 是直接造了一个新的内核兼容层实现,也和虚拟化没半毛钱关系( wsl2 才是虚拟化)

    你想说的那种模拟,叫做用户态虚拟化,qemu 有实现,但是这依赖于同系统,也就是实现 linux x86 跑 linux arm 的二进制,做不到让 windows 跑 linux 或者反过来
    jonah
        2
    jonah  
       2020-03-30 12:45:57 +08:00 via Android   ❤️ 1
    实际上 docker 才不是什么黑魔法,用 shell 脚本就能实现类似 docker 的功能
    maggch
        3
    maggch  
       2020-03-30 12:47:48 +08:00   ❤️ 2
    半瓶子咣当
    also24
        4
    also24  
       2020-03-30 12:51:46 +08:00 via Android   ❤️ 5
    Docker 可以粗略的理解为:
    以前你在 Linux 上运行 Linux 虚拟机,突然发现,诶两边都是 Linux 诶,那用同一份 Linux 内核不就好了嘛?
    于是 Docker 出现了。


    有一天楼主想做 WSL1 了:
    诶那我按照 Docker 的思路来做吧,首先我们共享一下 Linux 内核……
    诶?我 TM 是 Windows 啊哪儿来的 Linux 内核?
    binbinyouliiii
        5
    binbinyouliiii  
       2020-03-30 12:55:21 +08:00 via Android   ❤️ 3
    楼主要是不知道的话虚心请教也没人会说你,但是半瓶子水出来吹牛就是你的不对了
    Yvette
        6
    Yvette  
       2020-03-30 13:08:03 +08:00
    看标题我就猜到楼主是个学生
    CallMeReznov
        7
    CallMeReznov  
       2020-03-30 13:17:24 +08:00
    我如果是楼主,早被人打死了!
    westoy
        8
    westoy  
       2020-03-30 13:21:46 +08:00   ❤️ 1
    LXC 在角落里画圈圈
    Lonely
        9
    Lonely  
       2020-03-30 13:24:32 +08:00 via iPhone
    你是来搞笑的吗?就因为 wsl 发布时间晚所以就是抄 docker 的?
    reus
        10
    reus  
       2020-03-30 14:53:29 +08:00   ❤️ 1
    ……学艺不精就不要随便喷

    docker 基于 linux 的 namespace 机制,也就是隔离进程、网络、cgroup 等等,使用同样技术的用户态程序早就有了,lxc 。
    wsl 是实现了 linux 的系统调用,等于自己写了半个 linux 内核,类似的还有 linux 的 wine,只不过是兼容 windows 。
    murmur
        11
    murmur  
       2020-03-30 15:04:02 +08:00
    楼上的都喷完了,我就不喷了
    Love4Taylor
        12
    Love4Taylor  
       2020-03-30 15:05:29 +08:00 via Android
    还真就什么人都有啊,见识了。
    ipwx
        13
    ipwx  
       2020-03-30 15:22:31 +08:00   ❤️ 1
    楼主看完评论大可以继续喷:

    “我觉得 WSL 抄袭了 wine……”
    jy02201949
        14
    jy02201949  
       2020-03-30 15:24:13 +08:00
    看到那么的人喷,我就放心了
    reus
        15
    reus  
       2020-03-30 15:33:07 +08:00
    还有一个类似 wsl 的东西是 google 的 gVisor: https://github.com/google/gvisor

    也是实现了部分 linux 的系统调用,当然,是跑在 linux 上的,目的和 wsl 不一样。
    est
        16
    est  
       2020-03-30 16:50:00 +08:00
    上课就专心听讲。不要乱发帖。
    kindjeff
        17
    kindjeff  
       2020-03-30 16:57:30 +08:00   ❤️ 1
    @ipwx #13 反向抄袭有点秀
    rpish
        18
    rpish  
    OP
       2020-04-21 06:03:00 +08:00
    @codehz
    @jonah
    @maggch
    @also24
    @binbinyouliiii
    @Yvette
    @CallMeReznov
    @westoy
    @Lonely
    @reus
    @murmur
    @Love4Taylor
    @ipwx
    @jy02201949
    @reus
    @est
    @kindjeff
    大二狗一枚 学艺不精 见笑了
    Docker 通过 namespace 实现 我看 liveoverflow 视频"自制 Docker"是知道的
    WSL1 是通过内核兼容层 不是像 WSL2 的虚拟化 这个我有提到了啊 是表述不清晰?

    我想表达的就是:
    1.WSL1 和 Docker 都是通过系统的 API 来模拟一个系统 而不是像 WSL2 直接虚拟化
    2.WSL1 在发布时间上比 Docker 晚 ==> 可能是抄袭它的想法

    我承认学艺不精,表述不好,但是标题用的是疑问句,不是陈述句,应该看得出来吧?
    上来嘲讽我也会啊,能不能麻烦给点指教.🙂(不带干货的无脑喷,我读小学的弟弟都行)

    @codehz 多谢指教: )
    ipwx
        19
    ipwx  
       2020-04-21 09:30:12 +08:00
    @rpish Docker 没有模拟另一个系统。Docker 用的是 Linux 内核的环境隔离功能,本身是内核功能的一部分。

    如果这还不够,那么想一下:用 WSL1 模拟 Linux,WSL1 要把所有 Linux 的 API 通过 Windows 系统重写一遍,还要想办法欺骗所有 Linux 程序,让它们以为它们运行在 Linux 下,难度可想而知。但是 Docker 使用 Linux 的内核隔离,没有重写任何 API,就是调用了内核原有的功能,包装了一下而已。
    rpish
        20
    rpish  
    OP
       2020-04-21 14:04:57 +08:00
    @ipwx 谢谢指点 知道我的问题了
    同样是调用系统 API 但是 WSL1 实在 NT 内核的基础上模拟出了一个 LINUX 内核 Docker 则是利用了 Linux 的特性进行了隔离
    思路上相似 但是实现难度天差地别
    fengdra
        21
    fengdra  
       2020-06-23 02:20:01 +08:00
    @rpish 思路上一点都不相似。linux namespace 的思路是在内核上划分子空间,实现资源隔离,一个内核当多个系统用; WSL1 是一个内核实现两套 API ( Windows API 和 Linux 子系统),和资源隔离没有关系,反而要保持两边资源访问的一致性。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2127 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:01 · PVG 09:01 · LAX 17:01 · JFK 20:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.