Go Wiki:Go 於 Plan 9
簡介
Bell Labs 出品的 Go 實驗性移植可供 Plan 9 from Bell Labs 作業系統使用。
支援的架構
Plan 9 移植的 Go 可用於下列架構
- 386
- amd64
- arm
支援的核
目前的 Go 發行版已在下列作業系統上成功測試
- Plan 9 from Bell Labs(386 和 arm)核
- 9front amd64 核
- Bell Labs 9k(amd64)核
需求
Go on Plan 9 需要提供下列系統呼叫的核
- tsemacquire(自 2012-06-30 起提供)
- nsec(自 2014-05-15 起提供)
需要修復 pread 呼叫系統,因此 pread 在讀取檔案時不會更新通道偏移
TCP 連線控制檔必須處理「關閉」訊息,以便在喚醒讀取器時優雅地關閉 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 編寫的,因此您可能想要使用 C 編寫的 Go 最新版本 Go 1.4.3 來啟動 Go。
但是,由於 Plan 9 上 Go 1.4 執行時間還不夠成熟,建議您使用其他作業系統從更新版本的 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 了。
您可以透過設定 GOROOT_BOOTSTRAP
環境變數來使用這個版本的 Go 來啟動之後的 Go 版本
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
您可以透過設定 GOROOT_BOOTSTRAP
環境變數來使用這個 Go 二進位套件來啟動 Go
GOROOT_BOOTSTRAP=/tmp/gobootstrap-plan9-386
Git
Git 在 Plan 9 上並不可用。不過已提供一個 Git 封裝器,它是一個簡單的 rc 腳本。封裝器包含使用 go 工具所需的全部內容。
編譯器
目前有三個 Plan 9 編譯器正在執行,並將結果回報給 Go Dashboard
- plan9-386 在虛擬機器上執行來自貝爾實驗室的 Plan 9(386 核心)
- plan9-amd64-9front 在虛擬機器上執行來自貝爾實驗室的 Plan 9(amd64 核心)
- plan9-arm 在 Raspberry Pi 3 上執行來自貝爾實驗室的 Plan 9(arm 核心)
狀態
Plan 9 的 Go 埠點仍被視為實驗性質,且仍是進行式的開發。在 Go 錯誤追蹤器 上可以查看已知問題。
錯誤
在 Go 錯誤追蹤器 上,目前仍以 OS-Plan9 標籤標示著許多錯誤。
說明
Plan 9 的 Go 埠點是由社群推動的埠點。任何有助於改善 Plan 9 上 Go 埠點的協助都將備受讚賞。
維護者
許多人貢獻了 Plan 9 的 Go 埠點。自 2013 年 12 月以來,Plan 9 的 Go 埠點由 David du Colombier 維護。
瑣事
Go 的許多部分受到 Plan 9 系統的直接影響,因為其三名主要設計師中有兩位曾在貝爾實驗室研究 Plan 9。以下是其中一些關聯性
- Gopher 是由蕾妮·弗倫奇設計,而她也是設計 Plan 9 兔子 Glenda 的人。
- 此儲存庫中貯存的 Gc 編譯器使用 Plan 9 形式載入器。
- Go 的組合語言程式 係根據 Plan 9 的語法而設計。Go 1.x 基於堆疊的 ABI 是從 Plan 9 借來的。
- 雖然不建議,但也曾對 Plan 9 C 提供一些支援,其原始標準函式庫來自 Plan 9 的 libc。自主持設計文件 討論了這段歷史。
此內容是 Go Wiki 的一部分。