blob: bff022ad4614cc02dbec8bab3dd48fab041173f1 [file] [log] [blame] [view]
David du Colombier9f40ee82016-04-20 03:17:04 +02001# Introduction
2
3An experimental port of [Go](https://golang.org) is available for the [Plan 9 from Bell Labs](https://9p.io/plan9) operating system.
4
5# Supported architectures
6
7The Plan 9 port of Go is available for the following architectures:
8
9* 386
10* amd64
11* arm
12
13# Supported kernels
14
15The current Go distribution has been tested successfully on:
16
17* [Plan 9 from Bell Labs](https://9p.io/plan9) (386 and arm) kernel
18* [9front](http://9front.org) amd64 kernel
19* Charles Forsyth's [9k](https://bitbucket.org/forsyth/plan9-9k) (amd64) kernel
20
21# Requirements
22
23Plan 9 requires a kernel providing the following system calls:
24
25* tsemacquire (available since [2012-06-30](https://github.com/0intro/plan9/commit/bd0c9332d5b1da1371d03e8e0ad03de0d08e08c6))
26* nsec (available since [2014-05-15](https://github.com/0intro/plan9/commit/6c1d8fd563a815cbbac06f61bdc1d0f6331c3d3b))
27
28A fix to the pread system call is required, so pread will not update the channel offset when reading a file:
29
30* [9-pread-offset](http://9legacy.org/9legacy/patch/9-pread-offset.diff)
31
David du Colombiera5b9bd72016-10-18 13:30:54 +020032The TCP connection control file must handle the "close" message to be able close a TCP connection gracefully, while waking up the readers:
33
34* [9-tcp-close](http://9legacy.org/9legacy/patch/9-tcp-close.diff)
35
David du Colombier2fe1b4b2017-01-18 01:13:01 +010036A fix to Fossil is required to increment Qid.vers after a wstat, so a truncate followed by a read will return the content of the new file instead of the cached content.
David du Colombier6d6ab3a2016-11-10 12:22:21 +010037
David du Colombier63ffe502016-11-13 18:58:31 +010038* [fossil-wstat-qid](http://9legacy.org/9legacy/patch/fossil-wstat-qid.diff)
David du Colombier6d6ab3a2016-11-10 12:22:21 +010039
David du Colombier04b8d442016-11-14 00:25:10 +010040You will need support for SHA-2 signatures in X.509 certificates, so you could download sources from repositories hosted on GoogleSource, GitHub and so on.
41
42* [libsec-x509-sha2](http://9legacy.org/9legacy/patch/libsec-x509-sha2.diff)
43
David du Colombier9f40ee82016-04-20 03:17:04 +020044If you're running Plan 9 on Raspberry Pi, you'll require the latest [bcm](https://9p.io/magic/webls?dir=/sources/contrib/miller/9/bcm) kernel from Richard Miller.
45
46# Installation
47
48Since Go is written in Go, you may want to bootstrap Go with Go 1.4.3, which is the latest release of Go written in C.
49
50However, since the Go 1.4 runtime wasn't mature enough on Plan 9, we recommend you to bootstrap from a more recent version of Go, using another operating system.
51
52## Boostraping from Plan 9
53
54First, install Go 1.4:
55
56```
57cd /tmp
58git clone -b go1.4.3 https://go.googlesource.com/go go1.4
59cd go1.4/src
60hget http://9legacy.org/go/patch/syscall-exec.diff | ape/patch -p2
61make.rc
62```
63
64The [syscall-exec](http://9legacy.org/go/patch/syscall-exec.diff) patch is required if you're running a machine with SMP enabled.
65
66Then, set the `GOROOT_BOOTSTRAP` environment variable:
67
68```
69GOROOT_BOOTSTRAP=/tmp/go1.4
70```
71
72Finally, install the latest version of Go:
73
74```
75cd /tmp
76git clone https://go.googlesource.com/go
77cd go/src
78all.rc
79bind -a /tmp/go/bin /bin
80```
81Go is now ready to use.
82
83## Bootstraping from another operating system
84
85First, you must have installed Go on this operating system, following the [Go installation instructions](https://golang.org/doc/install).
86
87Then, you can cross-compile a Go toolchain for Plan 9:
88
89```
90cd $GOROOT/src
91GOOS=plan9 GOARCH=386 ./bootstrap.bash
92```
93
94Then, the bootstrap toolchain will be available in `../../go-plan9-386-bootstrap.tbz`.
95
96Finally, you can extract this archive to your Plan 9 machine.
97
98For example:
99
100```
101cd /tmp
102tar xzf go-plan9-386-bootstrap.tbz
103bind -a /tmp/go-plan9-386-bootstrap/bin /bin
104```
105
106Go is now ready to use.
107
108You'll be able to use this installation of Go to bootstrap future Go releases, by setting the `GOROOT_BOOTSTRAP` environment variable:
109
110```
111GOROOT_BOOTSTRAP=/tmp/go-plan9-386-bootstrap
112```
113
David du Colombier16813f42016-04-20 22:33:24 +0200114## Bootstraping from binaries
115
116A [binary package](https://storage.googleapis.com/go-builder-data/gobootstrap-plan9-386.tar.gz) for plan9/386 is available.
117
David du Colombier06ac2292016-04-20 22:39:06 +0200118This binary package is used to bootstrap Go on the plan9/386 builder.
119
David du Colombier16813f42016-04-20 22:33:24 +0200120```
121cd /tmp
122hget -o gobootstrap-plan9-386.tar.gz https://storage.googleapis.com/go-builder-data/gobootstrap-plan9-386.tar.gz
123mkdir gobootstrap-plan9-386
124cd gobootstrap-plan9-386
125tar xzf ../gobootstrap-plan9-386.tar.gz
126```
127
128You'll be able to use this binary package of Go to bootstrap Go, by setting the `GOROOT_BOOTSTRAP` environment variable:
129
130```
131GOROOT_BOOTSTRAP=/tmp/gobootstrap-plan9-386
132```
133
David du Colombier9f40ee82016-04-20 03:17:04 +0200134# Git
135
136Git is not available on Plan 9. However a [Git wrapper](http://9legacy.org/9legacy/tools/git) is available as a simple rc script. It includes everything you need to use the [go](https://golang.org/cmd/go) tool.
137
138# Builders
139
140Three Plan 9 builders are currently running and reporting the results to the [Go Dashboard](http://build.golang.org/):
141
142* plan9-386 is running Plan 9 from Bell Labs (386 kernel) on Google Compute Engine (new-style builder)
143* plan9-arm is running Plan 9 from Bell Labs (arm kernel) on a Raspberry Pi 3 (old-style builder)
144* plan9-amd64-9front is running 9front (amd64 kernel) on a virtual machine (old-style builder)
145
146# Status
147
148The Plan 9 port of Go is considered experimental and is still a work-in-progress. There is a number of known issues available on the [Go issue tracker](https://golang.org/issues).
149
150# Issues
151
152Many issues are currently open on the [Go issue tracker](https://golang.org/issues) with the [OS-Plan9](https://github.com/golang/go/issues?q=is%3Aopen+is%3Aissue+label%3AOS-Plan9) label.
153
David du Colombier9f40ee82016-04-20 03:17:04 +0200154# Help
155
156The Plan 9 port of Go is a community-driven port. Any help to improve the Go port on Plan 9 would be highly appreciated.
157
158# Maintainer
159
160Many people have contributed to the Plan 9 port of Go. Since December 2013, the Plan 9 port of Go is maintained by [David du Colombier](https://github.com/0intro).