Go Wiki:Go on Plan 9

引言

Go 的一個實驗性移植版本可用於 貝爾實驗室的 Plan 9 作業系統。

支援的架構

Go 的 Plan 9 移植版可用於以下架構

  • 386
  • amd64
  • arm

支援的核心

當前的 Go 發行版已在以下系統上成功測試

要求

Go on Plan 9 需要提供以下系統呼叫的核心

需要修復 pread 系統呼叫,以便 pread 在讀取檔案時不會更新通道偏移量

TCP 連線控制檔案必須處理“close”訊息,才能優雅地關閉 TCP 連線,同時喚醒讀取器

需要修復 Fossil 以便在 wstat 後遞增 Qid.vers,這樣在截斷後進行讀取將返回新檔案的內容而不是快取的內容。

您需要支援 X.509 證書中的 SHA-2 簽名,這樣您就可以從託管在 GoogleSource、GitHub 等的儲存庫下載原始碼。

如果您在 Raspberry Pi 上執行 Plan 9,您將需要 Richard Miller 提供的最新 bcm 核心。

crypto/x509 包的 CA 證書需要安裝在 /sys/lib/tls/ca.pem。您可以從 https://curl.haxx.se/ca/cacert.pem 下載或從其他系統複製。

對於 9front,您可能需要為標準庫測試配置迴環地址

ip/ipconfig -P loopback /dev/null 127.1
ip/ipconfig -P loopback /dev/null ::1

安裝

由於 Go 是用 Go 編寫的,您可能希望使用 Go 1.4.3 來引導 Go,它是用 C 編寫的 Go 的最新版本。

但是,由於 Go 1.4 執行時在 Plan 9 上不夠成熟,我們建議您使用另一個作業系統從更新的 Go 版本引導。

從 Plan 9 引導

首先,安裝 Go 1.4

cd /tmp
git clone -b go1.4.3 https://go.googlesource.com/go go1.4
cd go1.4/src
hget http://9legacy.org/go/patch/syscall-exec.diff | ape/patch -p2
make.rc

如果您在啟用了 SMP 的機器上執行,則需要 syscall-exec 補丁。

然後,設定 GOROOT_BOOTSTRAP 環境變數

GOROOT_BOOTSTRAP=/tmp/go1.4

最後,安裝最新版本的 Go

cd /tmp
git clone https://go.googlesource.com/go
cd go/src
all.rc
bind -a /tmp/go/bin /bin

Go 現在可以使用了。

從另一個作業系統引導

首先,您必須根據 Go 安裝說明 在此作業系統上安裝 Go。

然後,您可以為 Plan 9 交叉編譯 Go 工具鏈

cd $GOROOT/src
GOOS=plan9 GOARCH=386 ./bootstrap.bash

然後,引導工具鏈將在 ../../go-plan9-386-bootstrap.tbz 中可用。

最後,您可以將此存檔提取到您的 Plan 9 機器。

例如

cd /tmp
tar xzf go-plan9-386-bootstrap.tbz
bind -a /tmp/go-plan9-386-bootstrap/bin /bin

Go 現在可以使用了。

您將能夠使用此 Go 安裝來引導未來的 Go 版本,透過設定 GOROOT_BOOTSTRAP 環境變數

GOROOT_BOOTSTRAP=/tmp/go-plan9-386-bootstrap

從二進位制檔案引導

可提供適用於 plan9/386 的 二進位制包

此二進位制包用於在 plan9/386 構建器上引導 Go。

cd /tmp
hget -o gobootstrap-plan9-386.tar.gz https://storage.googleapis.com/go-builder-data/gobootstrap-plan9-386.tar.gz
mkdir gobootstrap-plan9-386
cd  gobootstrap-plan9-386
tar xzf ../gobootstrap-plan9-386.tar.gz

您將能夠使用此 Go 的二進位制包來引導 Go,透過設定 GOROOT_BOOTSTRAP 環境變數

GOROOT_BOOTSTRAP=/tmp/gobootstrap-plan9-386

其他二進位制包可從 此處此處 獲取。

Git

Git 在 Plan 9 上不可用。然而,一個 Git 包裝器 可作為簡單的 rc 指令碼使用。它包含了您使用 go 工具所需的一切。

構建器

目前有三個 Plan 9 構建器正在執行並將結果報告給 Go 控制面板

  • plan9-386 在虛擬機器上執行貝爾實驗室的 Plan 9 (386 核心)
  • plan9-amd64-9front 在虛擬機器上執行貝爾實驗室的 Plan 9 (amd64 核心)
  • plan9-arm 在 Raspberry Pi 3 上執行貝爾實驗室的 Plan 9 (arm 核心)

狀態

Go 的 Plan 9 移植版被認為是實驗性的,並且仍在進行中。在 Go 問題追蹤器 上有許多已知問題。

問題

目前在 Go 問題追蹤器 上有許多帶有 OS-Plan9 標籤的問題是開放的。

幫助

Go 的 Plan 9 移植版是由社群驅動的移植。任何有助於改進 Go 在 Plan 9 上的移植的幫助都將不勝感激。

維護者

許多人對 Go 的 Plan 9 移植版做出了貢獻。自 2013 年 12 月以來,Go 的 Plan 9 移植版由 David du Colombier 維護。

趣聞

Go 的許多部分直接受到 Plan 9 系統的影響,因為其三位主要設計者中有兩位曾在貝爾實驗室從事 Plan 9 的工作。其中一些聯絡包括

  • Gopher 由 Renée French 設計,她也設計了 Plan 9 的兔子 Glenda。
  • 此儲存庫中託管的 Gc 編譯器使用 Plan 9 風格的載入器
  • Go 的彙編器 基於 Plan 9 的語法。Go 1.x 基於堆疊的 ABI 借鑑自 Plan 9。
  • 雖然不推薦,但也有對 Plan 9 C 的一些支援,其原始標準庫源自 Plan 9 的 libc。自託管設計文件 講述了這段歷史。

此內容是 Go Wiki 的一部分。