หลังจากหนึ่งปีของการพัฒนาและเวอร์ชันทดลอง 30 เวอร์ชัน ได้มีการนำเสนอการใช้งาน Win32 API แบบเปิดที่เสถียร - Wine 7.0 ซึ่งรวมการเปลี่ยนแปลงมากกว่า 9100 รายการ ความสำเร็จที่สำคัญของเวอร์ชันใหม่ ได้แก่ การแปลโมดูล Wine ส่วนใหญ่เป็นรูปแบบ PE การรองรับธีม การขยายสแต็กสำหรับจอยสติ๊กและอุปกรณ์อินพุตด้วยอินเทอร์เฟซ HID และการใช้งานสถาปัตยกรรม WoW64 สำหรับการรันโปรแกรม 32 บิตใน สภาพแวดล้อมแบบ 64 บิต
Wine ยืนยันการทำงานเต็มรูปแบบของโปรแกรม 5156 (ปีที่แล้ว 5049) สำหรับ Windows ส่วนอีกโปรแกรม 4312 (ปีที่แล้ว 4227) ทำงานได้อย่างสมบูรณ์แบบด้วยการตั้งค่าเพิ่มเติมและ DLL ภายนอก 3813 โปรแกรม (3703 ปีที่แล้ว) มีปัญหาการปฏิบัติงานเล็กน้อยที่ไม่รบกวนการใช้งานฟังก์ชั่นหลักของแอพพลิเคชั่น
นวัตกรรมที่สำคัญใน Wine 7.0:
- โมดูลในรูปแบบ PE
- DLL เกือบทั้งหมดได้รับการแปลงให้ใช้รูปแบบไฟล์ปฏิบัติการ PE (Portable Executable ซึ่งใช้บน Windows) แทน ELF การใช้ PE แก้ปัญหาด้วยการสนับสนุนแผนการป้องกันการคัดลอกต่างๆ ที่ตรวจสอบข้อมูลประจำตัวของโมดูลระบบบนดิสก์และในหน่วยความจำ
- ความสามารถในการโต้ตอบโมดูล PE กับไลบรารี Unix โดยใช้การเรียกระบบเคอร์เนล NT มาตรฐานได้ถูกนำมาใช้ ซึ่งช่วยให้คุณสามารถซ่อนการเข้าถึงโค้ด Unix จากดีบักเกอร์ Windows และตรวจสอบการลงทะเบียนเธรด
- ขณะนี้ DLL ในตัวจะถูกโหลดเฉพาะเมื่อมีไฟล์ PE ที่เกี่ยวข้องบนดิสก์ ไม่ว่าจะเป็นไลบรารีจริงหรือ stub การเปลี่ยนแปลงนี้ทำให้แอปพลิเคชันเห็นการเชื่อมโยงที่ถูกต้องกับไฟล์ PE เสมอ เมื่อต้องการปิดใช้งานลักษณะการทำงานนี้ คุณสามารถใช้ตัวแปรสภาพแวดล้อม WINEBOOTSTRAPMODE
- วอ64
- สถาปัตยกรรม WoW64 (64 บิตบน Windows บน Windows) ได้รับการปรับใช้แล้ว ทำให้คุณสามารถเรียกใช้แอปพลิเคชัน Windows 32 บิตในกระบวนการ Unix 64 บิต การสนับสนุนดำเนินการผ่านการเชื่อมต่อของเลเยอร์ที่แปลการเรียกระบบ NT 32 บิตเป็นการเรียก NTDLL 64 บิต
- เลเยอร์ WoW64 ได้รับการจัดเตรียมสำหรับไลบรารี Unix ส่วนใหญ่ และอนุญาตให้โมดูล PE 32 บิตเข้าถึงไลบรารี Unix 64 บิต เมื่อแปลงโมดูลทั้งหมดเป็นรูปแบบ PE แล้ว จะสามารถเรียกใช้แอปพลิเคชัน Windows 32 บิตได้โดยไม่ต้องติดตั้งไลบรารี Unix 32 บิต
- ธีม
- มีการดำเนินการสนับสนุนธีมแล้ว ธีมการออกแบบ “Light”, “Blue” และ “Classic Blue” รวมอยู่ด้วย ซึ่งสามารถเลือกได้ผ่านตัวกำหนดค่า WineCfg
- เพิ่มความสามารถในการปรับแต่งรูปลักษณ์ของส่วนควบคุมอินเทอร์เฟซทั้งหมดผ่านธีม ลักษณะที่ปรากฏขององค์ประกอบจะได้รับการอัปเดตโดยอัตโนมัติหลังจากเปลี่ยนธีมการออกแบบ
- เพิ่มการรองรับธีมให้กับแอปพลิเคชันไวน์ในตัวทั้งหมดแล้ว แอปพลิเคชั่นได้รับการปรับให้เข้ากับหน้าจอที่มีความหนาแน่นของพิกเซลสูง (High DPI)
- ระบบย่อยกราฟิก
- มีการเพิ่มไลบรารี Win32u ใหม่ ซึ่งรวมถึงบางส่วนของไลบรารี GDI32 และ USER32 ที่เกี่ยวข้องกับการประมวลผลกราฟิกและการจัดการหน้าต่างในระดับเคอร์เนล ในอนาคต งานจะเริ่มในการย้ายส่วนประกอบไดรเวอร์ เช่น winex32.drv และ winemac.drv ไปยัง Win11u
- ไดรเวอร์ Vulkan รองรับข้อกำหนด Vulkan Graphics API 1.2.201
- ให้การสนับสนุนสำหรับการส่งออกวัตถุทางเรขาคณิตที่ฟักออกมาผ่านทาง Direct2D API พร้อมความสามารถในการตรวจสอบว่ามีการคลิกหรือไม่ (การทดสอบการคลิก)
- Direct2D API ให้การสนับสนุนเบื้องต้นสำหรับเอฟเฟ็กต์ภาพที่ใช้โดยใช้อินเทอร์เฟซ ID2D1Effect
- Direct2D API ได้เพิ่มการรองรับอินเทอร์เฟซ ID2D1MultiThread ซึ่งใช้เพื่อจัดระเบียบการเข้าถึงทรัพยากรในแอปพลิเคชันแบบมัลติเธรดแบบเอกสิทธิ์เฉพาะบุคคล
- ชุดไลบรารี WindowsCodecs ให้การสนับสนุนการถอดรหัสรูปภาพในรูปแบบ WMP (Windows Media Photo) และการเข้ารหัสรูปภาพในรูปแบบ DDS (DirectDraw Surface) เราไม่รองรับการเข้ารหัสรูปภาพในรูปแบบ ICNS อีกต่อไป (สำหรับ macOS) ซึ่งไม่รองรับบน Windows
- Direct3D
- เอ็นจิ้นการเรนเดอร์ใหม่ได้รับการปรับปรุงอย่างมีนัยสำคัญ โดยแปลการเรียก Direct3D ไปเป็น Vulkan Graphics API ในสถานการณ์ส่วนใหญ่ ระดับการรองรับ Direct3D 10 และ 11 ในเอ็นจิ้นที่ใช้ Vulkan นั้นมีความเท่าเทียมกับเอ็นจิ้นที่ใช้ OpenGL รุ่นเก่า หากต้องการเปิดใช้งานกลไกการเรนเดอร์ Vulkan ให้ตั้งค่าตัวแปรรีจิสทรี Direct3D "renderer" เป็น "vulkan"
- มีการนำคุณสมบัติหลายอย่างของ Direct3D 10 และ 11 มาใช้ รวมถึงบริบทที่เลื่อนออกไป วัตถุสถานะที่ทำงานในบริบทของอุปกรณ์ การชดเชยแบบถาวรในบัฟเฟอร์ การล้างมุมมองพื้นผิวที่ไม่อยู่ในลำดับ การคัดลอกข้อมูลระหว่างทรัพยากรในรูปแบบที่ไม่มีประเภท (DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_R32G32B32A32_TYPELESS) ฯลฯ .
- เพิ่มการรองรับสำหรับการกำหนดค่าหลายจอภาพ ช่วยให้คุณสามารถเลือกจอภาพเพื่อแสดงแอปพลิเคชัน Direct3D ในโหมดเต็มหน้าจอ
- DXGI API ให้การแก้ไขแกมมาของหน้าจอ ซึ่งสามารถใช้งานได้โดยแอปพลิเคชันที่ใช้ Direct3D 10 และ 11 เพื่อเปลี่ยนความสว่างของหน้าจอ เปิดใช้งานการดึงข้อมูลตัวนับเฟรมบัฟเฟอร์เสมือน (SwapChain)
- Direct3D 12 เพิ่มการรองรับลายเซ็นรูตเวอร์ชัน 1.1
- ในโค้ดการเรนเดอร์ผ่าน Vulkan API ประสิทธิภาพของการประมวลผลคิวรีได้รับการปรับปรุงเมื่อระบบรองรับส่วนขยาย VK_EXT_host_query_reset
- เพิ่มความสามารถในการส่งออกเฟรมบัฟเฟอร์เสมือน (SwapChain) ผ่าน GDI หากไม่สามารถใช้ OpenGL หรือ Vulkan สำหรับการแสดงผลได้ ตัวอย่างเช่น เมื่อส่งออกไปยังหน้าต่างจากกระบวนการที่แตกต่างกัน เช่น ในโปรแกรมที่ใช้เฟรมเวิร์ก CEF (Chromium Embedded Framework)
- เมื่อใช้แบ็กเอนด์เชเดอร์ GLSL ตัวแก้ไข "แม่นยำ" จะได้รับการรับรองสำหรับคำแนะนำเชเดอร์
- DirectDraw API เพิ่มการรองรับการเรนเดอร์ 3D ในหน่วยความจำระบบโดยใช้อุปกรณ์ซอฟต์แวร์ เช่น "RGB", "MMX" และ "Ramp"
- การ์ด AMD Radeon RX 3M, AMD Radeon RX 5500/6800 XT/6800 XT, AMD Van Gogh, Intel UHD Graphics 6900 และ NVIDIA GT 630 ได้รับการเพิ่มลงในฐานข้อมูลกราฟิกการ์ด Direct1030D
- คีย์ “UseGLSL” ถูกลบออกจากรีจิสทรี HKEY_CURRENT_USER\Software\Wine\Direct3D แล้ว แทนที่จะเริ่มต้นด้วย Wine 5.0 คุณต้องใช้ “shader_backend”
- เพื่อรองรับ Direct3D 12 ตอนนี้คุณต้องมีไลบรารี vkd3d เวอร์ชัน 1.2 เป็นอย่างน้อย
- D3DX
- การใช้งาน D3DX 10 ได้ปรับปรุงการรองรับเฟรมเวิร์กเอฟเฟ็กต์ภาพและเพิ่มการรองรับรูปแบบภาพ Windows Media Photo (JPEG XR)
- เพิ่มฟังก์ชันการสร้างพื้นผิวที่มีให้ใน D3DX10 เช่น D3DX10CreateTextureFromMemory()
- อินเทอร์เฟซซอฟต์แวร์ ID3DX10Sprite และ ID3DX10Font ได้รับการใช้งานบางส่วน
- เสียงและวิดีโอ
- ส่วนเสริม GStreamer สำหรับ DirectShow และเฟรมเวิร์ก Media Foundation จะรวมกันเป็นแบ็คเอนด์ WineGStreamer ทั่วไปตัวเดียว ซึ่งน่าจะทำให้การพัฒนา API การถอดรหัสเนื้อหาใหม่ง่ายขึ้น
- ตามแบ็กเอนด์ WineGStreamer ออบเจ็กต์ Windows Media จะถูกนำไปใช้สำหรับการอ่านแบบซิงโครนัสและอะซิงโครนัส
- การใช้งานกรอบงาน Media Foundation ได้รับการปรับปรุงเพิ่มเติม รองรับฟังก์ชัน IMFPMediaPlayer และการจัดสรรตัวอย่าง และปรับปรุงการรองรับบัฟเฟอร์การเรนเดอร์ EVR และ SAR
- ไลบรารี wineqtdecoder ซึ่งมีตัวถอดรหัสสำหรับรูปแบบ QuickTime ได้ถูกลบออกแล้ว (ตอนนี้ตัวแปลงสัญญาณทั้งหมดใช้ GStreamer)
- อุปกรณ์อินพุต
- สแต็กสำหรับอุปกรณ์อินพุตที่รองรับโปรโตคอล HID (Human Interface Devices) ได้รับการปรับปรุงอย่างมีนัยสำคัญ โดยให้ความสามารถต่างๆ เช่น การแยกวิเคราะห์ตัวอธิบาย HID การประมวลผลข้อความ HID และการจัดหาไดรเวอร์ mini-HID
- ในแบ็กเอนด์ของไดรเวอร์ winebus.sys การแปลคำอธิบายอุปกรณ์เป็นข้อความ HID ได้รับการปรับปรุง
- เพิ่มแบ็กเอนด์ DirectInput ใหม่สำหรับจอยสติ๊กที่รองรับโปรโตคอล HID มีการใช้ความสามารถในการใช้เอฟเฟกต์ตอบรับในจอยสติ๊กแล้ว ปรับปรุงแผงควบคุมจอยสติ๊ก เพิ่มประสิทธิภาพการโต้ตอบกับอุปกรณ์ที่รองรับ XInput ใน WinMM การรองรับจอยสติ๊กถูกย้ายไปยัง DInput แทนที่จะใช้แบ็กเอนด์ evdev บน Linux และ IOHID บน macOS IOHID ไดรเวอร์จอยสติ๊กเก่า winejoystick.drv ถูกลบออกแล้ว
- มีการเพิ่มการทดสอบใหม่ลงในโมดูล DInput โดยอิงจากการใช้อุปกรณ์ HID เสมือนและไม่ต้องใช้อุปกรณ์ทางกายภาพ
- ข้อความและแบบอักษร
- เพิ่มวัตถุชุดแบบอักษรลงใน DirectWrite
- RichEdit ใช้อินเทอร์เฟซ TextHost อย่างถูกต้อง
- เคอร์เนล (อินเทอร์เฟซเคอร์เนล Windows)
- เมื่อเรียกใช้ไฟล์ปฏิบัติการที่ไม่ปรากฏชื่อ (เช่น 'wine foo.msi') ใน Wine ตอนนี้ start.exe จะถูกเรียก ซึ่งจะเรียกใช้ตัวจัดการที่เกี่ยวข้องกับประเภทไฟล์
- เพิ่มการรองรับกลไกการซิงโครไนซ์ NtAlertThreadByThreadId และ NtWaitForAlertByThreadId ซึ่งคล้ายกับ futexes ใน Linux
- เพิ่มการรองรับออบเจ็กต์ดีบัก NT ที่ใช้ในการดีบักฟังก์ชันเคอร์เนล
- เพิ่มการรองรับคีย์รีจิสทรีแบบไดนามิกเพื่อบันทึกข้อมูลประสิทธิภาพ
- ซี รันไทม์
- รันไทม์ C ใช้ชุดฟังก์ชันทางคณิตศาสตร์ครบชุด ซึ่งส่วนใหญ่ส่งต่อจากไลบรารี Musl
- แพลตฟอร์ม CPU ทั้งหมดให้การสนับสนุนฟังก์ชันจุดลอยตัวที่ถูกต้อง
- คุณสมบัติด้านเครือข่าย
- ปรับปรุงโหมดความเข้ากันได้สำหรับ Internet Explorer 11 (IE11) ซึ่งขณะนี้ใช้เป็นค่าเริ่มต้นสำหรับการประมวลผลเอกสาร HTML
- ไลบรารี mshtml ใช้โหมด ES6 JavaScript (ECMAScript 2015) ซึ่งให้การสนับสนุนคุณสมบัติต่างๆ เช่น การแสดงออกและวัตถุแผนที่
- การติดตั้งแพ็คเกจ MSI พร้อมส่วนเพิ่มเติมในกลไก Gecko ลงในไดเร็กทอรีการทำงานของ Wine เสร็จสิ้นเมื่อจำเป็น และไม่ใช่ในระหว่างการอัพเดต Wine
- เพิ่มการรองรับโปรโตคอล DTLS
- มีบริการ NSI (Network Store Interface) จัดเก็บและส่งข้อมูลเกี่ยวกับการกำหนดเส้นทางและอินเทอร์เฟซเครือข่ายบนคอมพิวเตอร์ไปยังบริการอื่น ๆ
- ตัวจัดการ WinSock API เช่น setsockopt และ getsockopt ได้ถูกย้ายไปยัง NTDLL และไดรเวอร์ afd.sys เพื่อให้สอดคล้องกับสถาปัตยกรรม Windows
- ไฟล์ฐานข้อมูลเครือข่ายของ Wine เช่น /etc/protocols และ /etc/networks ได้รับการติดตั้งในไดเร็กทอรีการทำงานของ Wine แทนที่จะเข้าถึงฐานข้อมูล Unix ที่คล้ายกัน
- แพลตฟอร์มทางเลือก
- เพิ่มการรองรับอุปกรณ์ Apple ที่ใช้ชิป M1 ARM (Apple Silicon)
- ขณะนี้การรองรับคุณสมบัติ BCrypt และ Secur32 บน macOS จำเป็นต้องติดตั้งไลบรารี GnuTLS
- ขณะนี้ไฟล์ปฏิบัติการ 32 บิตสำหรับแพลตฟอร์ม ARM ถูกสร้างขึ้นในโหมด Thumb-2 ซึ่งคล้ายกับ Windows ตัวโหลดล่วงหน้าใช้เพื่อโหลดไฟล์ดังกล่าว
- สำหรับแพลตฟอร์ม ARM 32 บิต ได้มีการนำการสนับสนุนสำหรับคลี่คลายข้อยกเว้นแล้ว
- สำหรับ FreeBSD จำนวนการค้นหาที่รองรับสำหรับข้อมูลระบบระดับต่ำ เช่น สถานะหน่วยความจำและระดับประจุแบตเตอรี่ ได้รับการขยาย
- แอปพลิเคชันและเครื่องมือการพัฒนาในตัว
- ยูทิลิตี้ reg.exe ได้เพิ่มการรองรับมุมมองรีจิสทรี 32 บิตและ 64 บิต เพิ่มการสนับสนุนสำหรับการคัดลอกคีย์รีจิสทรี
- ยูทิลิตี้ WineDump ได้เพิ่มการสนับสนุนสำหรับการทิ้งข้อมูลเมตาของ Windows และการแสดงข้อมูลโดยละเอียดเกี่ยวกับรายการ CodeView
- Wine Debugger (winedbg) ให้ความสามารถในการดีบักกระบวนการ 32 บิตจากดีบักเกอร์ 64 บิต
- ความสามารถในการโหลดไลบรารีที่สร้างไว้ในไฟล์ PE ได้รับการเพิ่มลงในคอมไพเลอร์ IDL (widl) มีการรองรับคุณลักษณะและโครงสร้างเฉพาะของ WinRT และมีการใช้การค้นหาไลบรารีเฉพาะแพลตฟอร์ม
- ระบบการประกอบ
- ในไดเร็กทอรีเฉพาะสถาปัตยกรรม ตอนนี้ไลบรารีจะถูกบันทึกด้วยชื่อที่สะท้อนถึงสถาปัตยกรรมและประเภทปฏิบัติการ เช่น 'i386-windows' สำหรับรูปแบบ PE และ 'x86_64-unix' สำหรับไลบรารี unix ทำให้สามารถรองรับสถาปัตยกรรมที่แตกต่างกันในไวน์เดียว การติดตั้งและจัดเตรียมการคอมไพล์ข้ามของ Winelib
- ในการตั้งค่าตัวเลือกในส่วนหัวของไฟล์ PE ที่ควบคุมการเปลี่ยนไปใช้ DLL ดั้งเดิม แฟล็ก '--prefer-native option' ได้ถูกเพิ่มลงใน winebuild (การประมวลผล DLL_WINE_PREATTACH ใน DllMain ถูกหยุดแล้ว)
- เพิ่มการรองรับเวอร์ชัน 4 ของรูปแบบข้อมูลดีบัก Dwarf ซึ่งตอนนี้ใช้เป็นค่าเริ่มต้นเมื่อสร้างไลบรารีไวน์
- เพิ่มตัวเลือก build '—enable-build-id' เพื่อบันทึกตัวระบุ build ที่ไม่ซ้ำในไฟล์ปฏิบัติการ
- เพิ่มการสนับสนุนสำหรับการใช้คอมไพเลอร์ Clang ในโหมดความเข้ากันได้ของ MSVC
- หนังสือรวบรวมเรื่อง
- ชื่อของไดเร็กทอรีทั่วไปในเชลล์ผู้ใช้ (Windows Shell) ถูกกำหนดให้กับโครงร่างที่ใช้โดยเริ่มต้นด้วย Windows Vista เช่น แทนที่จะเป็น 'My Documents' ตอนนี้ไดเร็กทอรี 'Documents' จะถูกสร้างขึ้น และข้อมูลส่วนใหญ่จะถูกบันทึกลงในไดเร็กทอรี 'AppData'
- เพิ่มการรองรับข้อกำหนด OpenCL 1.2 ลงในเลเยอร์ไลบรารี OpenCL แล้ว
- ไดรเวอร์ WinSpool ได้เพิ่มการรองรับขนาดหน้าที่แตกต่างกันเมื่อพิมพ์
- เพิ่มการสนับสนุนเบื้องต้นสำหรับ MSDASQL ซึ่งเป็นผู้ให้บริการ Microsoft OLE DB สำหรับไดรเวอร์ ODBC
- เอ็นจิ้น Wine Mono พร้อมการใช้งานแพลตฟอร์ม .NET ได้รับการอัปเดตเป็นรีลีส 7.0.0
- ข้อมูล Unicode ได้รับการอัปเดตเป็นข้อกำหนดเฉพาะของ Unicode 14
- แผนผังต้นทางประกอบด้วยไลบรารี Faudio, GSM, LCMS2, LibJPEG, LibJXR, LibMPG123, LibPng, LibTiff, LibXml2, LibXslt และ Zlib ซึ่งคอมไพล์ในรูปแบบ PE และไม่ต้องการเวอร์ชันในรูปแบบ Unix ในเวลาเดียวกัน ไลบรารีเหล่านี้ยังสามารถนำเข้าจากระบบเพื่อใช้แอสเซมบลีภายนอกแทนตัวเลือก PE ในตัว
ที่มา: opennet.ru