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

2020-03-30 12:22:34 +08:00
 rpish

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

7582 次点击
所在节点   黑魔法
21 条回复
codehz
2020-03-30 12:30:19 +08:00
??? docker 用的是 linux 内核的命名空间,cgroup,seccomp 等机制,和虚拟化没半毛钱关系,docker 事实上完全没有任何虚拟化的过程

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

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


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

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

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

也是实现了部分 linux 的系统调用,当然,是跑在 linux 上的,目的和 wsl 不一样。
est
2020-03-30 16:50:00 +08:00
上课就专心听讲。不要乱发帖。
kindjeff
2020-03-30 16:57:30 +08:00
@ipwx #13 反向抄袭有点秀
rpish
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
2020-04-21 09:30:12 +08:00
@rpish Docker 没有模拟另一个系统。Docker 用的是 Linux 内核的环境隔离功能,本身是内核功能的一部分。

如果这还不够,那么想一下:用 WSL1 模拟 Linux,WSL1 要把所有 Linux 的 API 通过 Windows 系统重写一遍,还要想办法欺骗所有 Linux 程序,让它们以为它们运行在 Linux 下,难度可想而知。但是 Docker 使用 Linux 的内核隔离,没有重写任何 API,就是调用了内核原有的功能,包装了一下而已。
rpish
2020-04-21 14:04:57 +08:00
@ipwx 谢谢指点 知道我的问题了
同样是调用系统 API 但是 WSL1 实在 NT 内核的基础上模拟出了一个 LINUX 内核 Docker 则是利用了 Linux 的特性进行了隔离
思路上相似 但是实现难度天差地别

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/657519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX