Starnix 會實作 Linux UAPI,並盡可能符合 Linux 核心實作的語意。Linux UAPI 歷史悠久,其中有許多絕佳的想法,也有一些不盡理想的設計。為順利執行未修改的 Linux 二進位檔,Starnix 採取不偏頗的立場。它會實作 Linux UAPI,與實際運作方式完全相同,而不是嘗試強制執行理想化的設計。Starnix 會「如實」實作 Linux UAPI 。
這個方法可簡化偵錯程序。如果 Starnix 下執行的 Linux 程式行為異常,原因可歸類為下列兩種:
程式依賴 Linux 不支援的行為:如果程式在 Linux 核心上同樣會失敗,問題出在程式本身,而非 Starnix。
Starnix 錯誤地實作 UAPI:如果程式在 Linux 核心上運作,但在 Starnix 上失敗,只要變更 Starnix,更準確地實作 UAPI,Starnix 就能正確執行程式。
新語意造成的風險
向 Linux 使用者空間公開 Linux 核心中不存在的功能或行為,會違反精確相容性原則。導入 Starnix 專屬的裝置、檔案系統、系統呼叫或虛擬檔案,可能會導致差異。
這種差異會造成相容性衝突:一個應用程式可能依賴標準 Linux 語意,另一個應用程式則可能無意間依賴 Starnix 特有的行為。在這種情況下,如果為了修正第一個應用程式而將 Starnix 與 Linux 核心對齊,可能會導致第二個應用程式無法運作。
公開實作細節 (例如 Starnix 如何使用基礎 Fuchsia 基本型別實作 Linux UAPI) 有風險,因為這些細節通常必須變更,才能提高語意準確度。舉例來說,Linux 和 Fuchsia 的概念目前可能是一對一對應,但未來發展可能需要更彈性的實作方式,才能完全符合 Linux 概念的細微差異。
例外狀況和注意事項
這種一般做法有其限制。Starnix 盡可能遵循 Linux UAPI,但功能需求和安全性規定會導致部分偏差。
Fuchsia 整合:Starnix 會向 Linux 使用者空間公開 Fuchsia 專屬檔案系統
remotefs。由於fxfs必須向系統公開,因此 Starnix 會透過remotefs公開,而不是假裝fxfs是ext4或其他特定 Linux 檔案系統;偽裝成其他真實檔案系統類型會造成重大實作困難。Starnix 也會公開一些 Fuchsia 專屬裝置,例如magma裝置,這是提升圖像效能的必要條件。安全性排除項目:Starnix 不會實作 Linux UAPI 極度危險的層面。舉例來說,由於
/dev/mem包含裝置的實體記憶體,因此未實作,因為這會造成重大安全危害。功能演進:有時,某些功能一開始會省略,但後來會新增。舉例來說,Starnix 最初並未實作
suid,但為了支援需要標準 Linux 核心語意的重要 Linux 程式,最終還是加入了這項功能。