-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256
Hello,
I noticed that it looks like Tor Project is using Go 1.4.2 to build the pluggable transports in Gitian. I'm curious why a newer version of Go isn't used. My understanding is that Go 1.4.2 (or earlier) is needed to build Go 1.5 because 1.5's source code is itself in Go. Would using Go 1.5 be as simple as building 1.4.2 in Gitian (as is done now), and then using 1.4.2 to build 1.5, and then placing 1.5 in PATH instead of 1.4.2 as is done now? Have obstacles been identified in such a configuration, or is it just that no one tried it?
Cheers, - -Jeremy Rand
On Sun, Jan 03, 2016 at 11:01:25PM -0600, Jeremy Rand wrote:
I noticed that it looks like Tor Project is using Go 1.4.2 to build the pluggable transports in Gitian. I'm curious why a newer version of Go isn't used. My understanding is that Go 1.4.2 (or earlier) is needed to build Go 1.5 because 1.5's source code is itself in Go. Would using Go 1.5 be as simple as building 1.4.2 in Gitian (as is done now), and then using 1.4.2 to build 1.5, and then placing 1.5 in PATH instead of 1.4.2 as is done now? Have obstacles been identified in such a configuration, or is it just that no one tried it?
It's just that nobody has tried it. Here's the ticket for the most recent update (to 1.4.2) if you want to make a new patch and file a new ticket: https://bugs.torproject.org/15448
On 4 Jan 2016, at 16:14, David Fifield david@bamsoftware.com wrote:
On Sun, Jan 03, 2016 at 11:01:25PM -0600, Jeremy Rand wrote:
I noticed that it looks like Tor Project is using Go 1.4.2 to build the pluggable transports in Gitian. I'm curious why a newer version of Go isn't used. My understanding is that Go 1.4.2 (or earlier) is needed to build Go 1.5 because 1.5's source code is itself in Go. Would using Go 1.5 be as simple as building 1.4.2 in Gitian (as is done now), and then using 1.4.2 to build 1.5, and then placing 1.5 in PATH instead of 1.4.2 as is done now? Have obstacles been identified in such a configuration, or is it just that no one tried it?
It's just that nobody has tried it. Here's the ticket for the most recent update (to 1.4.2) if you want to make a new patch and file a new ticket: https://bugs.torproject.org/15448 https://bugs.torproject.org/15448
Note the go bootstrap process has changed now that go is entirely written in go:
The new build process for Go 1.x (x ≥ 5) will be:
• Build cmd/dist with Go 1.4. • Using dist, build Go 1.x compiler toolchain with Go 1.4. • Using dist, rebuild Go 1.x compiler toolchain with itself. • Using dist, build Go 1.x cmd/go (as go_bootstrap) with Go 1.x compiler toolchain. • Using go_bootstrap, build the remaining Go 1.x standard library and commands.
https://docs.google.com/document/d/1OaatvGhEAq7VseQ9kkavxKNAfepWy2yhPUBs96FG...
Tim Wilson-Brown (teor)
teor2345 at gmail dot com PGP 968F094B
teor at blah dot im OTR CAD08081 9755866D 89E2A06F E3558B7F B5A9D14F
Tim Wilson-Brown - teor transcribed 12K bytes:
On 4 Jan 2016, at 16:14, David Fifield david@bamsoftware.com wrote:
On Sun, Jan 03, 2016 at 11:01:25PM -0600, Jeremy Rand wrote:
I noticed that it looks like Tor Project is using Go 1.4.2 to build the pluggable transports in Gitian. I'm curious why a newer version of Go isn't used. My understanding is that Go 1.4.2 (or earlier) is needed to build Go 1.5 because 1.5's source code is itself in Go. Would using Go 1.5 be as simple as building 1.4.2 in Gitian (as is done now), and then using 1.4.2 to build 1.5, and then placing 1.5 in PATH instead of 1.4.2 as is done now? Have obstacles been identified in such a configuration, or is it just that no one tried it?
It's just that nobody has tried it. Here's the ticket for the most recent update (to 1.4.2) if you want to make a new patch and file a new ticket: https://bugs.torproject.org/15448 https://bugs.torproject.org/15448
Note the go bootstrap process has changed now that go is entirely written in go:
The new build process for Go 1.x (x ≥ 5) will be:
• Build cmd/dist with Go 1.4. • Using dist, build Go 1.x compiler toolchain with Go 1.4. • Using dist, rebuild Go 1.x compiler toolchain with itself. • Using dist, build Go 1.x cmd/go (as go_bootstrap) with Go 1.x compiler toolchain. • Using go_bootstrap, build the remaining Go 1.x standard library and commands.
https://docs.google.com/document/d/1OaatvGhEAq7VseQ9kkavxKNAfepWy2yhPUBs96FG...
Tim Wilson-Brown (teor)
I've not tried it yet, but it's my understanding that gccgo can still be used to compile go-1.5:
https://github.com/golang/go/issues/10092
So another route might be to modify our build of GCC to include gccgo, then use that to bootstrap the official Go compiler.
isis:
Tim Wilson-Brown - teor transcribed 12K bytes:
Note the go bootstrap process has changed now that go is entirely written in go:
The new build process for Go 1.x (x ≥ 5) will be:
• Build cmd/dist with Go 1.4. • Using dist, build Go 1.x compiler toolchain with Go 1.4. • Using dist, rebuild Go 1.x compiler toolchain with itself. • Using dist, build Go 1.x cmd/go (as go_bootstrap) with Go 1.x compiler toolchain. • Using go_bootstrap, build the remaining Go 1.x standard library and commands.
https://docs.google.com/document/d/1OaatvGhEAq7VseQ9kkavxKNAfepWy2yhPUBs96FG...
Tim Wilson-Brown (teor)
I've not tried it yet, but it's my understanding that gccgo can still be used to compile go-1.5:
https://github.com/golang/go/issues/10092
So another route might be to modify our build of GCC to include gccgo, then use that to bootstrap the official Go compiler.
I never tried using gccgo to bootstrap as using go_1.4 is rather easy in practice using the official tooling:
# 1. Build a go1.4 using GCC.
git clone https://github.com/golang/go.git cp -r go go_bootstrap ( cd go_bootstrap; git checkout origin/release-branch.go1.4 ) ( cd go_bootstrap/src/ && ./all.bash )
# 2. Now build a go1.5 using the go1,4 export GOROOT_BOOTSTRAP=$PWD/go_bootstrap ( cd go && git checkout origin/release-branch.go1.5 ) ( cd go/src/ && ./all.bash )
# 3. And now do echo "PATH=$PATH:$PWD/go/bin" >> .profile Cheers!