Go Wiki:Plan 9 上的 Go
介绍
一个实验性的 Go 移植版本可用于 来自贝尔实验室的 Plan 9 操作系统。
支持的架构
Go 的 Plan 9 移植版本适用于以下架构
- 386
- amd64
- arm
支持的内核
当前的 Go 发行版已在以下内核上成功测试
- 来自贝尔实验室的 Plan 9(386 和 arm)内核
- 9front amd64 内核
- 贝尔实验室 9k(amd64)内核
要求
Plan 9 上的 Go 需要一个提供以下系统调用的内核
- 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
Plan 9 上没有 Git。但是,一个 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 移植版本是一个由社区驱动的移植版本。任何帮助改进 Plan 9 上的 Go 移植版本都将受到高度赞赏。
维护者
许多人对 Go 的 Plan 9 移植版本做出了贡献。自 2013 年 12 月起,Go 的 Plan 9 移植版本由 David du Colombier 维护。
花絮
Go 的许多部分都直接受到 Plan 9 系统的影响,因为 Go 的三位主要设计者中有两位曾在贝尔实验室工作过,参与过 Plan 9 的开发。其中一些联系包括
- Go 语言吉祥物 由 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 的一部分。