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 的一部分。