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