WSL1 根本不是什么黑魔法 而是抄袭 Docker 而已吧 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rpish
V2EX    黑魔法

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

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

    WSL2 快发布了 但是今天上操作系统课讲到虚拟机 看到课件上的虚拟机结构图 突然想到 Docker 简化了虚拟机的系统层 直接调系统 API 模拟了一个虚拟环境 又想到 WSL1 好像也是那么做的 查了下发布时间 Docker13 年 SL16 年... 所以 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  
    PRO
       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
      nbsp;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     Solana     6042 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:33 PVG 10:33 LAX 19:33 JFK 22:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86