تصور کنید یک گیمر باشد که میخواهد کنترل کامل روی سختافزارش داشته باشد، اما مجبور است به «جعبهسیاه» درایورهای بسته شرکتها اعتماد کند. حالا این محدودیت در حال شکستن است و درایورهای متنباز مسیر نفوذ به قلعهی ویندوز را پیدا کردهاند.
به نقل از لویی-فرانسیس راته-بولیان (Louis-Francis Ratté-Boulianne) از شرکت Collabora در ۲۸ ژوئیه ۲۰۲۶، نخستین درایور vulkan (یک رابط برنامهنویسی گرافیکی برای پردازشهای سنگین) متنباز برای پردازندههای گرافیکی AMD اکنون روی ویندوز اجرا میشود. تیم توسعه با انتقال RADV — که ستون فقرات گرافیکی لینوکس است — به محیط Win32، عملاً انحصار نرمافزارهای بسته در این پلتفرم را به چالش کشید.
زمینه: شکاف میان لینوکس و ویندوز
برای درک این موضوع باید بدانید که کاربران AMD در ویندوز سالهاست به درایورهای بسته وابسته بودهاند، در حالی که کاربران لینوکس از اجرای شفاف Mesa بهره میبرند. در اکوسیستم لینوکس، RADV به درایور پیشفرض Vulkan برای سختافزارهای AMD تبدیل شده است. شرکت AMD نیز تلاشهای متنباز خود را با متوقف کردن جایگزینهای مبتنی بر PAL (کتابخانه انتزاع پلتفرم) و تمرکز بر Mesa یکپارچه کرد.
این تفاوت باعث ایجاد یک چرخه توسعه تکهتکه شد؛ جایی که رفع باگها و ابزارهای عیبیابی بر اساس سیستمعامل تفکیک شده بودند. پورت کردن RADV به ویندوز به دنبال ایجاد یک پایگاه کد مشترک در تمامی پلتفرمها است. این رویکرد باعث میشود عیبیابی آسانتر شود، زمان رفع مشکلات کاهش یابد و توسعهدهندگان بازیها بتوانند گزارشهایی از مشکلات یا بهبوداتی ارائه دهند که بدون توجه به سیستمعامل، به نفع همه کاربران باشد.
این تلاش برای پل زدن میان دو دنیا در زمانی رخ میدهد که ویندوز ۱۰ و ۱۱ رابط WDDM2 را استاندارد کردهاند. این رابط یک مبنای تئوریک برای درایورهای شخص ثالث فراهم میکند و مدلی شفاف تعریف میکند که چگونه یک درایور حالت کاربر (UMD) با سیستمعامل و درایور حالت هسته (KMD) تعامل داشته باشد.
جزئیات: پیشرفت در مهندسی معکوس
چالش اصلی این پروژه، «دادههای خصوصی درایور» (Private Driver Data) بود که در فراخوانیهای D3DKMT یافت میشد. اینها تکههای کد مبهم و مختص هر سازنده هستند که محتویات آنها کاملاً به تشخیص درایور میبازد. این بلوکهای داده، درایور حالت کاربر (UMD) را از طریق یک رابط مستندنشده به درایور حالت هسته (KMD) متصل میکنند.
برای دور زدن این بنبست، پژوهشگری به نام فیت اکستراند (Faith Ekstrand) ابزاری به نام wddm2-pdd-re ساخت تا این فراخوانیها و محتوای دادههای خصوصی آنها را برای برخی برنامههای D3D12 ثبت و تحلیل کند. نتایج این پیشکار در کنفرانس XDC 2024 ارائه شد. اکستراند با تحلیل این برنامهها، توانست توابع حیاتی زیر را مهندسی معکوس کند:
- استعلام اطلاعات مربوط به آداپتور گرافیکی
- تخصیص بافرهای حافظه
- ایجاد صفهای دستور (Command Queues)
- ارسال تکالیف پردازشی به درایور بسته هسته
با استفاده از این یافتهها، اکستراند در نهایت موفق شد یک مدل سهبعدی چرخان را روی صفحه نمایش دهد و بدین ترتیب امکانپذیر بودن این پورت را به اثبات رساند.
از مثلثها تا اجرای بازیها
تیم Collabora با تکیه بر دستاوردهای اکستراند، پروژه را از نمایش مدلهای ساده سهبعدی فراتر برد. تمرکز آنها بر انعطافپذیر کردن درایور از طریق کاهش مقادیر سختکد شده (hard-coded) بود تا سختافزارهای مختلف را پشتیبانی کند. آنها همچنین وابستگی به WSL (زیرسیستم ویندوز برای لینوکس) را حذف کردند تا پشتیبانی بومی (Native) فراهم شود و پایداری سیستم را بهبود بخشیدند تا درایور پس از تنها دو دقیقه تست با deqp-vk کرش نکند.
طبق مستندات فنی این پروژه، دستاوردهای کلیدی این مرحله عبارت بودند از:
- بهبود مدیریت جریان دستورات (Command Stream) و همگامسازی
- افزودن پشتیبانی از Sparse Bindings
- پیادهسازی Tessellation و Task Shaders
- استعلام پویا (Dynamic Querying) از ویژگیهای GPU
نقطه عطف این مسیر، اجرای موفقیتآمیز بازی Counter-Strike 2 با استفاده از آرگومان -vulkan بود. این اتفاق ثابت کرد که RADV میتواند بارهای کاری پیچیده و واقعی موتورهای بازیسازی را در ویندوز مدیریت کند، هرچند درایور هنوز کاملاً با استانداردهای رسمی مطابقت (Conformant) ندارد.
موانع سختافزاری و کامپایلری
پیشرفت پروژه خطی نبود. تیم توسعه هنگام انتقال از نسل دهم GPUها (مانند RX 7800 XT) که فیت از آن استفاده میکرد، به نسل یازدهم (مانند RX 7900 XT) با مشکلات شدید پایداری مواجه شد. تغییرات معماری باعث میشد سیستم در هر عملیاتی پیچیدهتر از یک پاکسازی سادهی سطح (Surface Clear) با یک رنگ سختکد شده، هنگ کند.
برای حل این مشکل، Collabora یک لایه ثبت (Logging) کامل برای WDDM2 توسعه داد. این ابزار به مهندسان اجازه میدهد جریان دستورات، رجیسترها و کدهای شیدر را استخراج کنند تا تفاوتهای بین درایور متنباز و بسته را پیدا کنند. آنها همچنین با «بلوکهای مبهم درون فراخوانیهای API مبهم» از طریق متد D3DKMTEscape مواجه شدند. در حالی که این قلابهای مختص سازنده امکاناتی مثل رندرینگ چند-GPU را فراهم میکنند، تیم تصمیم گرفت فعلاً آنها را نادیده بگیرد.
تداخلهای کامپایلری نیز پیشرفت را کند کرد. Mesa عمدتاً با GCC و Clang توسعه مییابد، اما MSVC مقادیر Enums را متفاوت مدیریت میکند. بهطور خاص، MSVC ممکن است مقداری را به عنوان «علامتدار» (Signed) تفسیر کند و آن را به مقادیر ۳۲ بیتی محدود کند که منجر به رفتارهای غیرمنتظره و عجیب در کد میشد.
دیوار نهایی عملکرد
در حال حاضر، بزرگترین گلوگاه در بخش «نمایش» (Presentation) است. RADV فعلاً از یک مسیر کند مبتنی بر CPU برای نمایش تصویر استفاده میکند. در حالی که جس ناتالی (Jesse Natalie) پیشتر روی WSI برای ویندوز از طریق درایور Dozen کار کرده بود، اما هنوز کارهای بیشتری برای فعالسازی DXGI swapchains مورد نیاز است.
برای بهبود عملکرد، تیم باید تصاویر را از D3D12 وارد کند که مستلزم تعامل با متادیتاهای مبهم بیشتری است. دستیابی به «قله خط لولههای گرافیکی» یعنی zero-copy swaps، میتواند منجر به افزایش ۳ برابری عملکرد در برنامههایی شود که محدودیت GPU ندارند. با این حال، این امر به دلیل محدودیتهای اشتراکگذاری تصویر، نیازمند دخالت مستقیم AMD و مایکروسافت است.
علاوه بر این، اتکا به ساختارهای دادههای خصوصی مهندسی معکوس شده، همچنان شکننده است. چون UMD و KMD به صورت جفتهای هماهنگ عرضه میشوند و هیچ تضمینی برای سازگاری عقبرو (Backward Compatibility) وجود ندارد، هر بهروزرسانی در درایور بسته هسته میتواند پورت متنباز را بدون اطلاع قبلی خراب کند. برای حل این مشکل، تیم دو راهکار پیشنهاد میدهد:
۱. ایجاد یک رابط مستند و پایدار برای KMD
۲. ساخت یک کتابخانه واسط (Shim) برای میانجیگری ارتباطات از طریق کانال دادههای خصوصی
این تلاش که توسط Valve حمایت میشود، این فرض را که درایورهای گرافیکی ویندوز باید «جعبه سیاه» بمانند، تغییر میدهد. با اثبات وجود یک مسیر عملیاتی متنباز، فشار بر سازندگان سختافزار افزایش مییابد تا رابطهای مستند و پایداری را برای جامعه توسعهدهندگان فراهم کنند.
گام بعدی شما
- توسعهدهندگان میتوانند شاخه عمومی پروژه را در گیتهاب بررسی کنند تا با ساختار WDDM2 و تکامل ابزارهای Logging آشنا شوند.
- دنبالکنندگان دنیای لینوکس، ادغام احتمالی ویژگیهای جدید RADV در نسخههای ویندوزی را زیر نظر بگیرند.
- برای درک عمیقتر از لایههای گرافیکی، مستندات مربوط به
D3DKMTEscapeرا مطالعه کنید.
اما این تازه شروع رقابت برای باز کردن قفلهای سختافزاری است؛ اثر این رویکرد روی کنسولهای نسل جدید را در گزارشهای آتی بررسی خواهیم کرد.




گفتگو