Go Wiki:Go on Plan 9
引言
Go 的一個實驗性移植版本可用於 貝爾實驗室的 Plan 9 作業系統。
支援的架構
Go 的 Plan 9 移植版可用於以下架構
- 386
- amd64
- arm
支援的核心
當前的 Go 發行版已在以下系統上成功測試
- 貝爾實驗室的 Plan 9 (386 和 arm) 核心
- 9front amd64 核心
- 貝爾實驗室 9k (amd64) 核心
要求
Go on Plan 9 需要提供以下系統呼叫的核心
- tsemacquire(自 2012-06-30 起可用)
- nsec(自 2014-05-15 起可用)
需要修復 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 的一部分。