Windows Subsystem for Linux的限制是什么?

去年我曾尝试过使用WSL,但当时它无法运行我想在上面尝试的神经网络项目。似乎与其内核过时或类似的原因有关。
自那以后,WSL进行了许多更新。在WSL上运行适用于Ubuntu的程序有哪些限制?它们基本上是等效的吗?有没有一些信息可以提前确定这一点?

1@wjandrea 你链接的问题是在2018年7月提出的,而这个问题最初是在2018年1月提出的...除非你相信时间旅行,否则这不是链接问题的重复。 - Aslan French
2在SE网站上,重复意味着它的答案对于这个问题也是有效的。它不必是完全相同的重复,也不必比重复的问题更早。它只是一种表明其他问题的答案也会回答这个问题的方式。 - vidarlo
2@David 实际上,重复问题并不是基于时间,而是基于质量和受欢迎程度。链接的问题有更多的赞同和回答。顺便说一下,这些问题有一些差异,所以也许它们并不是完全相同的重复问题,但我会把决定权交给你和社区来决定。 - wjandrea
1抱歉,说得也有道理。不过,1)我的问题是特别针对在神经网络的背景下讨论这些内容的,这是更具体且不包含在其他问题中的;2)虽然链接的问题获得了更多的赞同,但最佳答案实际上有点垃圾。我下面更新的答案包含了更多的信息。 - Aslan French
1我主要注意到了内核模块可用性的限制,比如缺少回环内核模块(这意味着无法支持将ISO文件挂载为块设备)。此外,像dd这样的工具也无法直接通过/dev访问块设备。 - Jasper
@Jasper 谢谢,这真的很有帮助。如果你想编辑我下面更新的答案之一,请随意,或者我也愿意自己整合它。我对比 DEs 更深层次的东西没有确切的了解,而且内核对我来说几乎是魔法,所以我觉得我不会做得好。 - Aslan French
2个回答

WSL常见问题解答中:

我能在WSL中运行所有Linux应用程序吗?

不! WSL是一个工具,旨在使需要的用户能够在Windows上运行Bash和核心Linux命令行工具。

WSL不支持GUI桌面或应用程序(例如Gnome、KDE等)。

此外,尽管您可以运行许多流行的服务器应用程序(例如Redis),但我们不建议将WSL用于服务器场景 - Microsoft提供了各种解决方案,用于在Azure、Hyper-V和Docker中运行生产Ubuntu工作负载。

还有官方测试可供Linux测试计划,其中提供了有关软件的一些见解,以及它们是否可以工作或接近工作。


上面的两个链接是官方立场。微软指出,WSL并不旨在支持图形界面。然而,用户已经成功运行了xfce和unity。
当有人能够在WSL上运行unity时,我怀疑是否存在任何限制。WSL还有很多未经验证的领域,所以让某些东西正常工作可能取决于用户(也就是你 ;) )。

限制在更深层次上。由于没有Linux内核,像VirtualBox这样使用内核模块的东西将无法工作。注意:我自己没有测试过,如果我的假设不正确,请纠正我。 - ravery
Vbox有点牵强,没错。但即使如此,我认为可能可以实现;这需要对代码进行大量修改,但我会假设从内核向Windows传递所需的所有内容,并由Windows处理是可能的。你可以在WSL端模拟一个内核,将信息发送到Windows并将其报告给Vbox。只是胡扯而已 ;) - Rinzwind
我看过你指向的常见问题解答,但我使用的神经网络工具是命令行界面的,没有图形用户界面,也不是图形化程序。不过我从官方 WSL GitHub 上得到了答案。WSL 目前还不支持 CUDA 或 OpenCL,而这两者对于使用 GPU 运行神经网络是必需的。即使我能让它运行起来,仅使用 CPU 的话基本上是无用的。看来我又要在分区上安装 Linux 了! - Aslan French

自从最初提出这个问题以来,WSL的情况已经稳定下来了一些,我想传达一些信息。

我可以报告说,在WSL中基本上可以完成任何只需要CPU的常规Linux任务。这意味着你可以轻松运行GUI应用程序,甚至整个桌面环境,但这也意味着运行神经网络更多是在浪费电力。(WSL还缺少CUDA驱动程序,尽管Ubuntu有CUDA驱动程序,但如果WSL实际上能够获得GPU访问权限,可能可以使用)

GUI应用程序

你可以通过以下方式获取GUI应用程序:

你所需要做的就是:

安装一个Windows X服务器。我使用VcXsrv
使用以下命令将路由信息添加到bash中:
echo "export DISPLAY=localhost:0.0" >> ~/.bashrc
如果你使用zsh,只需将导出显示信息添加到你的.zshrc文件中。
如果你使用zsh,只需将导出显示信息添加到你的.zshrc文件中。
我解决了运行神经网络的问题,只是在我的台式机上安装了Linux,哈哈。这样做更容易。
更广泛地回答这个问题,
WSL最重要的限制是Linux和Windows文件系统并不真正兼容。Linux文件使用与Windows文件不同的权限方案,当你在WSL主文件夹~/中编辑或保存文件时,保存的元数据会使Windows在记事本中显示为空文件。还有一些关于换行符的差异问题(Linux上的LF与Windows上的CRLF),但这个问题不那么严重,尤其是自从微软启用了VS Code和记事本可以使用任何一种换行符后。
理论上可以从Windows资源管理器访问Linux文件系统,但这是非常不可取的,而且如果你想要的话,你几乎无法对其进行任何操作。

关于您上次提到的权限问题,那只是针对在Linux家目录下保存/编辑的文件而言吗?如果您将符号链接到Windows目录并编辑那些文件,情况会怎样呢? - Simon
Simon: 没问题。在最新的WSL版本中,你也可以从Windows访问Linux文件系统,路径为\wsl$<distro>\home<username><filename>或者其他你喜欢的路径。不过需要注意的是,这个功能只在Linux发行版正在运行时才能使用,因为它是通过与Linux进行通信实现的。 - John Cowan
补充约翰所说的,我相信他们在最新的Windows Insider版本中已经启用了对WSL的explorer.exe访问权限。 - Aslan French