The Alky Project

若談到在 Linux 上執行 Windows 應用程式,大家第一個想到的一定是 Wine 這個開放原始碼專案及其衍生物,然而在很久很久以前(其實也沒很久,大約 2007 年的事),有個叫 Alky 的專案成功把 Windows 遊戲《獵魂》(Prey,2006)的試玩版轉換成原生、可直接執行的 Linux 版,這在當時的 Linux 社群裡造成了不小的轟動。

 

 

Alky 是如何做到的?其實 Alky 和 Wine 都是試圖在 Unix 平台上重製 Windows API ,並將這些重製的 API 提供給 Windows 應用程式取用,讓程式可以被順利執行。然而差別在於 Wine 是直接對 Windows 應用程式做執行的動作,Alky 則是將其轉換成原生的 Linux 應用程式。而且據說 Alky 並沒有使用 Wine 的原始碼,是個完全獨立的專案。

 

消息一出,在當時立即引起了許多的討論,有些人期待 Alky 可以做得比 Wine 更好、支援更多的遊戲以及更好的執行效能。也有些人對 Alky 的成效持保留態度(例如 DR),當時 DR 認為,能夠將《獵魂》轉換成 Linux 版,確實是不簡單,但也不是最困難的項目。《獵魂》是款 OpenGL 的遊戲,使用 id Tech 4 引擎開發,而且使用相同引擎的遊戲《毀滅戰士 3》(Doom 3)早在 2004 年便推出了 Linux 版。從中可以推測,《獵魂》相對來說不會有太多專屬於 Windows 平台的程式碼,因此這樣的成果及好運(?)不見得可以大規模適用在其它的遊戲上。

 

然而奇怪的是,後來 Alky 專案就在期待與質疑兼具的聲音中,慢慢的從公眾面前完全消失了,因此往後幾年才開始接觸 Linux 桌面系統的人應該完全沒聽說過有這個玩意的存在(當然,老經驗的 Linux 桌面使用者可能也沒聽過)。就是連 DR 自己都想不太起來到底 Alky 發生了什麼事,因此當 DR 某天不經意的想到這段過往時,就覺得應該好好搜尋相關的資訊來釐清一下。

 

原本以為這應該會是個很困難的搜尋與整理工作,但搜尋了一下就發現原來 Alky 的原作者 Cody Brocious(Daeken)其實在 2009 年時就已經在自己的網誌完整交代了整個專案的始末:

 

Alky Postmortem - I, Hacker

 

作者的自述幾乎是鉅細靡遺的,真是得來全不費功夫。想直接看原文的人就不用再看以下的部份了,因為以下只是 DR 對於作者自述的簡單整理而已。

 

根據原作者 Cody Brocious 的敘述,Alky 的起頭來自於嘗試將 Windows PE(Portable Executable)可執行格式轉換成 Mac OS X 的版本(Mach-O)。在重製 Windows API 的工程獲得了初步成功後,作者開始認為針對 Windows 遊戲做轉換會是可行的。接著便開始著手申請域名、建立專案網站,然後在媒體網站上發放消息,公佈後,Alky 在當時獲得了三種反應:

  1. 認為這是無法做到的。
  2. 有可能做到,但工作量龐大。
  3. Wine 遜斃了,希望你們可以做得更好。

 

Alky 起初是個開放原始碼的專案,在消息放出之後,便獲得了一些開發者的參與。但 Brocious 自言他當時對整個專案的管理很差,沒有真正有誠意的讓他人投入在這個專案裡,使得 Alky 形同開放原始碼的封閉專案。後來 Brocious 與人合夥成立了 Falling Leaf Systems 公司,一開始他們曾考慮是否採用雙授權的模式來發佈原始碼,但最終為了生意的考量,他們決定直接將 Alky 轉為封閉原始碼,並且在毫無事先知會的情況下關閉了整個專案網站,這讓原本有參與的開發者不知所措。

 

後來 Alky 開始進行重寫,以儘快有個能成功執行的遊戲為目標,他們首先完成並發佈了《獵魂》試玩版的 Mac OS X 轉換工具。為了募集所需的資金來購買硬體設備,公司以五十美元的價格販售早期會員資格,早期會員能夠取得《獵魂》以及未來所有其它遊戲的轉換工具。然而事實上在完成了《獵魂》的 Linux 轉換工具後,他們再也沒能推出其它的轉換工具。

 

在《獵魂》的項目告一段落後,Brocious 開始把目標放在 DirectX 9 的重製工作上,希望讓《上古捲軸 IV:遺忘之都》(The Elder Scrolls IV: Oblivion,2006)可以被順利執行。但後來又決定把目標放在 DirectX 10 上,此舉不再將 Mac OS X 和 Linux 視為主要的支援平台,而是將焦點放在 Windows XP 上,因為當時 Windows Vista 飽受抨擊,但 DirectX 10 卻又是被限定於 Vista 的技術。在目標變更後,他們對外發佈了一套函式庫讓一些 DX10 SDK 的 demo 可以在 Windows XP 經由 OpenGL 執行。儘管還未達到真正實用的狀態,但仍引起了一些注意。 Brocious 接著進行著色器(shader)格式的逆向工程並開發重編譯器(recompiler),讓 Direct3D 10 的著色器可以用在 OpenGL 上。

 

除此之外,公司注意到有個叫 VAIO 的專案能夠讓 Vista 限定的應用程式(非 DX10)在 Windowx XP 上執行。在經過了一些洽談後,他們招募了 VAIO 的開發人員並將 VAIO 重新命名為 Alky for Applications。原本 VAIO 的開發人員被指派投入到《最後一戰 2》(Halo 2,2004)和《闇影狂奔》(Shadowrun,2007)這兩款 Vista 限定、但非 DX10 的遊戲上,讓這兩款遊戲可以在 Windows XP 執行。當時他們確信有能力可以完成這項工作,於是還預售了這兩款遊戲外加免費轉換工具的搭配方案。

 

在此同時 Brocious 自己仍在 DX10 的項目上持續努力著,當時他已和一間有興趣的公司講定日期要做技術示範,而時間是有些緊迫的。但就在《最後一戰 2》和《闇影狂奔》轉換工具預定發佈的一週前,負責該項目的開發人員跟 Brocious 說他無法完成這項工作,Brocious 一方面認為自己犯了錯(因為他身兼對方的經理,卻沒有掌握到工作進度),另一方面只能放棄 DX10 的項目,自己接手轉換工具的開發。但最終這兩個項目都沒能在期限內完成。

 

於是 Brocious 感到很挫折,便決定將公司給關了,專案的原始碼則發佈到 GitHub 上。在 Brocious 的自述中,他表示自己學習從中到以下事物:

  1. 如果要營運一個開放原始碼專案,應該讓人們容易參與,並且應該要讓他們感到自己是專案的一份子而不只是自由工作者。
  2. 如果要結束一個開放原始碼專案,應該事先讓參與的人知道。
  3. 如果要改變目標,應該跟使用者、客戶說明清楚。
  4. 充分掌握員工的工作進度,尤其員工是在異地工作時。

 

附註 :後來《獵魂》在 2008 年發佈了官方的 Linux 版,由  Ryan C. Gordon 完成移植。此外他還開發了 Direct3D 著色器的跨平台轉換函式庫 MojoShader

 

分類: