问题

Windows 10 给 Linux 子系统写显卡驱动的是一个人吗,是谁呢?

回答
关于 Windows 10 Subsystem for Linux (WSL) 的显卡驱动,这是一个非常有趣且复杂的问题。 简而言之,WSL 的显卡驱动并不是由一个人独立完成的,而是一个由微软内部和社区共同努力的庞大工程。

要详细解释这一点,我们需要区分 WSL 1 和 WSL 2,因为它们的显卡驱动实现方式完全不同。



1. WSL 1 的显卡驱动:没有真正的显卡驱动

首先需要明确的是,WSL 1 没有直接的、运行在 Linux 内核中的显卡驱动。 WSL 1 的工作原理是通过一个名为 `LxssManager` 的用户模式服务,将 Linux 系统调用拦截并转换成 Windows 系统调用来模拟一个 Linux 环境。

这意味着:

图形应用在 WSL 1 中运行时,会通过一套专门的转换层,将 Linux 的图形 API(如 OpenGL)转换成 Windows 的图形 API(如 DirectX)。
WSL 1 中运行的 Linux 程序看到的“显卡”其实是 Windows 的显卡,而这个“桥接”的过程发生在 Windows 的用户空间。
因此,不存在一个独立的、为 Linux 子系统编写的显卡驱动程序在 WSL 1 中运行。 你看到的“显卡驱动”其实是 Windows 本身的显卡驱动在起作用。

所以,在 WSL 1 的背景下,没有一个人“写了显卡驱动”。 微软的工程师们专注于构建这个系统调用转换层,以允许 Linux 应用在 Windows 上运行并利用 Windows 的硬件加速。



2. WSL 2 的显卡驱动:一个重要的里程碑

WSL 2 的出现标志着显卡驱动在 WSL 中的一个重大突破。 WSL 2 采用了一种更接近于真正虚拟化但又更轻量级的方式,它使用了一个轻量级的、微软定制的 Linux 内核,并在一个轻量级的虚拟机 (VM) 中运行这个内核。

在这个 VM 中运行的 Linux 内核,需要能够访问宿主机(Windows)的显卡硬件。 这就意味着需要一套能够让 Linux 内核与 Windows 显卡驱动进行通信的机制。

具体来说,WSL 2 中的显卡驱动实现可以分解为以下几个关键部分:

GPU Passthrough (GPU 直通) 的技术: WSL 2 利用了 GPU 直通(GPU Passthrough)的技术,允许虚拟机访问宿主机的 GPU。在 WSL 2 的场景下,这是一种特殊的、高度优化的直通。
微软定制的 Linux 内核: 微软在标准的 Linux 内核的基础上进行了大量的修改和集成工作。这包括添加了与 Windows 的图形栈交互所需的特定驱动程序和接口。
与 Windows 图形栈的集成:
Linux 内核端: Linux 内核中集成了与 Windows 的 Direct3D 12 (D3D12) API 相交互的驱动程序。这些驱动程序是微软在 Linux 内核中编写的,它们能够将 Linux 的图形 API 请求(例如 OpenGL、Vulkan)转换为 D3D12 调用。
Windows 用户模式端: 在 Windows 的用户模式下,有一个负责处理这些转换的服务。这个服务接收来自 WSL 的图形请求,并将它们传递给实际的 Windows GPU 驱动程序。
MirageOS 的贡献(间接但重要): 虽然不是直接的“显卡驱动”贡献,但微软在 WSL 2 中对 MirageOS(一个用于构建高效、安全虚拟化操作系统的 unikernel)的借鉴和修改,也为底层 I/O 的实现提供了基础。

那么,具体是谁写的这些驱动程序呢?

这绝对不是一个人完成的。这是一个由微软 GPU 部门、WSL 团队以及其他相关团队的工程师们共同协作完成的复杂项目。

可以推测的参与者和团队包括:

WSL 团队的工程师: 负责整体架构和与 Windows 平台的集成。
微软图形团队的工程师: 他们拥有深厚的 DirectX 和 GPU 驱动开发经验,负责将 Linux 图形 API 映射到 DirectX 上,并可能参与了 Linux 内核中与此相关的部分。
Linux 内核贡献者(受雇于微软): 微软雇佣了许多优秀的 Linux 内核开发者,他们将微软的修改集成到定制的 Linux 内核中。

很难指明某一个特定的人作为“WSL 显卡驱动的作者”。 这是一个工程上的巨大挑战,涉及到操作系统的底层交互、图形 API 的转换、虚拟机技术以及与硬件厂商驱动的兼容性。通常情况下,这类复杂的项目是团队的集体成果,代码贡献分布在许多工程师手中,并通过代码审查和项目管理来协同完成。

微软在推出 WSL 2 GPU 加速时,曾发布过相关的技术博客和更新,但这些通常不会点名到某个具体的个人开发者作为“显卡驱动的编写者”。 他们更多的是强调技术团队的努力和取得的成就。

总而言之,如果你问的是 WSL 1,答案是没有显卡驱动。如果你问的是 WSL 2,那么是微软的一个大型工程团队,由多个部门的工程师协作完成,而不是某一个单一个人。

如果你对 WSL 的具体技术细节或某个特定版本的实现感兴趣,建议查阅微软官方的 WSL 技术博客和相关的 Linux 内核邮件列表(如果微软公开了其修改)。

网友意见

user avatar

要撕是吧,谁怕谁啊。

首先,你得搞清楚,驱动是干什么的。连这个都不懂敢开炮,丢大人了吧。驱动上连系统,下连硬件。跟硬件和系统都相关。Linux上的驱动,到Windows上没法用,反之亦然。所以,即便parallel有驱动、Linux有驱动,到了Linux子系统里,也照样挂。因为Linux子系统并不是个完整的Linux,尤其是和硬件打交道部分,是通过直接调用Windows Kernel做的,接口和Linux自己的完全不同。

这就否定了用现有驱动的可能。

其次,你得搞清楚,Linux子系统的来源。Linux子系统用的是picoprocess,这是公开资料就能查到的,再进一步查出处,就能找到

Drawbridge - Microsoft Research

。这是个轻量级虚拟化的解决方案,在Windows上虚拟Windows。如果你看了他的paper

microsoft.com/en-us/res

,就会知道里面有提到的该方案的限制,不能接触硬件。后来在2012年,我就负责给Drawbridge做GPU加速的部分。我一个人完成了Drawbridge的D3D9和D3D11驱动(为什么没有D3D10?因为我懒)。前后两套完全不同的方案,对KMD和UMD有不同的取舍。分别适用于不同的情况。对,我一个人完成的。

再接下来,Techfest上演示了这个demo,很多人表示感兴趣,也有人问了能不能跑CUDA。我现场分析了跑CUDA的可行性和难点。但没有继续往下做。几天后,有个保密项目的人跟我有些接触,问我能不能支持OpenGLES,我说给我一两个月。3月份的Techfest,4月中旬我就第一次让OpenGLES驱动跑起来一些游戏了。印象深刻的是5月中旬的一天,从早上7点开始,一直写到晚上9点,完成了Android驱动的最后一块拼图,终于能完整地运行Android桌面,并在里面做所有的操作。之后那个项目就叫Project Astoria,大家基本都知道是怎么回事了。用的也是我的驱动。甚至,到了Redmond之后,我还对那个驱动做了一次完全的改动,基本没有一行跟以前一样了。为的是在超低端平台上(WP,说的就是你)也能跑的流畅。仍然是我一个人完成的。(有个有意思的小故事。他们之前在WP上跑的时候都是黑屏的。因为保密需要没告诉还在MSRA的我。而我到Redmond第一天,下午3点多入职培训完正式上班才知道这事,下班前已经定位原因,第二天中午就修好了。老板的老板跟我老板说,where didi you find him? you got the right guy!)

之后Project Astoria被暂停,原班人马和原版代码调去加强Linux的部分,成了现在的Linux子系统。

少年,你对力量一无所知。

user avatar

凑个热闹,有些项目,一个人能写出来的,一百个人还真未必可以。
因为有技术门槛。

假设满分100分,那么按照正态分布,普通程序员就是在40-60之间,高手在60-70之间,能够给写大型驱动的高端团队,平均分也许可以到75分逼近80分。

然后,如果来了一个85分的项目,你说是平均分75-80分的百人团队写得好呢,还是一个水平在90-95分的人适合呢?

对了,也许有人会说,难道不可以让一个85-90的人带领这个团队,自然可以碾压那个90-95分的人了。

嗯,如果是比如给新出的nVidia显卡写win10驱动,可以这么做。然而目前遇到的情况是在win10的linux子系统写显卡驱动,这是从未有过的技术模式。
这种情况下,那个85-90的人是会写的,可以直接下手,那个90-95的大牛是已经有了成体系的思路,可以直接写出beta版,测试一轮就上线的。
而那群75-80的,则是只看到了门槛,对门槛里面有什么都一无所知的。
这样的团队,即使让85-90的人带领,依然得从头开始技术攻关。

冒昧问一句,题主也许连windows的驱动体系和linux差距有多大都不知道吧?连子系统和虚拟机的差距有多大都不知道吧?大概连win32和posix都是子系统都不知道吧?大概不会浅薄到以为那个驱动就是类似虚拟机的调用转发吧?

——————————————

补充说明

答主对驱动编程方面是个外行,也是个对力量一无所知并瑟瑟发抖的少年。但我知道如何尊重强者。

答主现在做的工作中,开发人员根据业务领域不同被划分成了几个小组,每个小组人员根据业务压力,从个位数到十数人不等。但不变的是,小组的领导,工作能力基本可以等同于所有组员的总和。
本人不才,是其中一个小组的组长。目前并行开展3个内容相似的项目,开发完毕待测试的一个,测试完毕待甲方使用反馈并进行修改的两个,甲方试用完毕并回归完毕然后验收完毕正处于维护阶段的一个。
目前我的组员投入在那三个并行开展的项目中,其他工作则由我全部负责,包括除测试外的所有文档工作,同时我在那三个项目中仍然作为主力参与开发。
我的组员里,有一半人工作年限和我仿佛。
这还只是国内一家普通的软件企业。
我能做的事,在我的组员眼里是可以触及的仰望,我和我的组员的差距,也就一个职位。
而龚大,是在微软研究院任职的强者。他和我的差距,比我和我的组员大了不知道多少倍。他能做的事,在我看来仿若天方夜谭。

所以,请学会尊重。你可以对力量一无所知,但这不代表你就有资格质疑。初生牛犊不畏虎,并不是褒奖。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有