Try   HackMD

2025q1 Homework5 (assessment)

contributed by < NeedToDebugMyLife >

確保所有作業和測驗均使用 NeedToDebugMyLife 帳號提交

閱讀〈因為自動飲料機而延畢的那一年〉的啟發

於是我愉快的把飲料杯放上去,開始期待他按照我想像的設計運作,接著悲劇就出現了。
杯子掉不下去。
掉不下去,掉不下去,掉不下去(抱頭)。
為什麼會出問題呢?因為這裡是他媽的真實世界啊。

這或許就是理論和實作的差別

列出針對前六週教材 (含測驗題目) 的疑惑。

誠實面對自己。

期末專題目標 (構想)

前陣子在 FaceBook 看到老師在系統軟體系列課程討論區社團分享的貼文,這則貼文是在 rv32emu 運行毀滅戰士 (DOOM) 遊戲的展示。這讓我產生了很大的興趣,究竟該如何讓一款遊戲運行在 Linux 系統上。

起初的打算是想效仿曾益铭學長,想辦法讓一款遊戲運行在 rv32emu 或 Linux 系統上。

原先選定的遊戲是 Minecraft 這款遊戲,原因是我本身對這款遊戲的瞭解比較多。但經過研究後,我發現了一些問題

  1. Minecraft 雖然提供了官方的 API 讓玩家可以針對遊戲進行修改,但本質上仍然是不開源的。因此要執行仍需要仰賴官方的啟動器。
  2. Minecraft 使用 Java 編寫,如果是要在 Linux 上運行,那只需要安裝 JVM (Java Virtual Machine)啟動器就可以
    ⇒ 要讓 Minecraft 在 Linux 上運行本身就不是一件太難的事。
  3. 從毀滅戰士的 demo 影片的發現,雖然遊戲可以運行,但遊戲的幀數表現似乎不是很好 (也或許是遊戲本身的問題?)。考量到 Minecraft 遊戲本身對 CPU 效能的需求,能否在 rv32emu 上順利運行,可能仍然是個問號。

考量到以上幾點,這個方向或許不適合作為 term project 的題目,所以改為選擇其他方案


目前的方向大致上有兩種:

  • 讓遊戲運行在 rv32emu 上,但是選擇較簡單的遊戲
    ⇒ (?)
  • 讓遊戲運行在一般的 Linux 系統上,但是選擇以其他程式語言編寫的遊戲 (不仰賴 JVM)
    ⇒ Proton

Proton

對於在 Linux 系統上玩遊戲,我首先想到的是 Valve 開發的 Proton,Proton 整合了需多工具 (例如: Wine, DXVK, 等)。目的是讓一些只能在 Windows 上運行的遊戲也能在 Linux 上執行,目前已經整合到 Steam 平台,約有2萬種遊戲可以透過 Proton 在 Linux 系統上成功運行。

Wine

Wine 可以說是 Proton 得以成功運作的核心。簡單來說,Wine 就是一個轉譯系統,它會把執行程式使用的 System Call 轉換 (映射) 為對應的 Linux System Call。


Windows NT architecture

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

Wine architecture

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

基於某些原因 (Wine 的官方 wiki 也沒有明確說名是什麼原因),Wine 的架構比較接近傳統的 Windows NT 架構。而 Wine 的運作必須完全覆蓋三大 DLLs (KERNEL/KERNEL32, GDI/GDI32, and USER/USER32)

參考資料


DXVK

<修正中>
DXVK,一種將 DirectX 轉譯為 Vulkan

  • DirectX: 由 Microsoft 建立的遊戲開發 API,多數可運行在 Windows 的遊戲都是使用此 API
  • Vulkan: 為一個跨平台的由圖形程式 API, 為少數 Linux 上原生支援的 API 之一 (另一個是 OpenGL)

當遊戲使用 DirectX 進行繪圖時,DXVK 會把指令即時轉換為 Vulkan 指令,並交由 Linux 的 GPU driver 運行。


FAudio

SDL2

一對一討論