Advanced Namespace Tools blog
11 January 2017
Golang Successes and Failures in Plan 9
Summary of Discoveries
- 9front/amd64 builds and passes tests of go1.7.4 bootstrapped from 1.4.3
- 9legacy/386 also builds and passes tests of go1.7.4 bootstrapped from 1.4.3
- Both build go1.8rc1 but fail in different ways during the test suite
- 9front/386 fails to build anything, but a broken version of 1.4.3 can be built with a minor patch
- 9front/386 old versions can build 1.4.3 but bootstrap to 1.7.4 fails
Specific Testing Results
Warning: Lots of copy/pasted error junk ahead
Lets start with go1.8rc1 test failures built via bootstrap from both 1.7.4 or 1.4.3
9front/amd64 go1.8rc1 test fails
Many tests fail and the test suite did not complete. Some example error excerpts:
2017/01/11 06:20:07 httptest.Server blocked in Close after 5 seconds, waiting for connections:
*net.TCPConn 0x90302d0 127.0.0.1:48775 in state idle
panic: test timed out after 3m0s
goroutine 87 [running]:
testing.startAlarm.func1()
/usr/glenda/go1.8rc1alt/go/src/testing/testing.go:1018 +0xfe
created by time.goFunc
/usr/glenda/go1.8rc1alt/go/src/time/sleep.go:170 +0x49
goroutine 1 [chan receive]:
testing.(*T).Run(0x8cd8ea0, 0x53942f, 0x10, 0x54a230, 0x8d27d01)
/usr/glenda/go1.8rc1alt/go/src/testing/testing.go:694 +0x2f3
testing.runTests.func1(0x8cd8ea0)
/usr/glenda/go1.8rc1alt/go/src/testing/testing.go:877 +0x6c
[...]
goroutine 100 [syscall, locked to thread]:
syscall.Syscall6(0x7, 0x907c000, 0x1000, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x9082de8, 0x23196c, ...)
/usr/glenda/go1.8rc1alt/go/src/syscall/asm_plan9_amd64.s:53 +0x5
syscall.Pread(0x7, 0x907c000, 0x1000, 0x1000, 0xffffffffffffffff, 0x25fd3f, 0x9, 0x0)
/usr/glenda/go1.8rc1alt/go/src/syscall/zsyscall_plan9_amd64.go:228 +0x82
syscall.Read(0x7, 0x907c000, 0x1000, 0x1000, 0x0, 0x9082e80, 0x9082ed8)
/usr/glenda/go1.8rc1alt/go/src/syscall/syscall_plan9.go:124 +0x57
os.(*File).read(0x90302c0, 0x907c000, 0x1000, 0x1000, 0xc, 0x0, 0x0)
/usr/glenda/go1.8rc1alt/go/src/os/file_plan9.go:247 +0x54
os.(*File).Read(0x90302c0, 0x907c000, 0x1000, 0x1000, 0x9082f28, 0x26f6b7, 0x4055)
/usr/glenda/go1.8rc1alt/go/src/os/file.go:101 +0x7b
os.(*File).Read-fm(0x907c000, 0x1000, 0x1000, 0x9082f68, 0x259948, 0x8f8f890)
/usr/glenda/go1.8rc1alt/go/src/net/fd_plan9.go:115 +0x4d
net.newAsyncIO.func1(0x8feeda0, 0x9038d10, 0x907c000, 0x1000, 0x1000)
/usr/glenda/go1.8rc1alt/go/src/net/fd_io_plan9.go:55 +0xfb
created by net.newAsyncIO
/usr/glenda/go1.8rc1alt/go/src/net/fd_io_plan9.go:63 +0xea
FAIL encoding/json 180.076s
[...]
--- FAIL: TestConnClose (0.01s)
net_test.go:190: close tcp 127.0.0.1:48162->127.0.0.1:38085: write /net/tcp/clone: unknown control request
panic: test timed out after 3m0s
[...]
FAIL net/http 180.183s
ok net/http/cgi 0.093s
2017/01/11 06:24:14 httptest.Server blocked in Close after 5 seconds, waiting for connections:
*net.TCPConn 0x8dee030 127.0.0.1:38990 in state idle
panic: test timed out after 3m0s
[...]
FAIL net/http/cookiejar 180.073s
ok net/http/fcgi 0.023s
2017/01/11 06:26:32 httptest.Server blocked in Close after 5 seconds, waiting for connections:
*net.TCPConn 0x8a6e140 127.0.0.1:60394 in state idle
panic: test timed out after 3m0s
[...]
/usr/glenda/go1.8rc1alt/go/src/os/file.go:101 +0x7b
os.(*File).Read-fm(0x8bb4000, 0x1000, 0x1000, 0x8a7df68, 0x259668, 0x8aadc50)
/usr/glenda/go1.8rc1alt/go/src/net/fd_plan9.go:115 +0x4d
net.newAsyncIO.func1(0x8b4d620, 0x8b65170, 0x8bb4000, 0x1000, 0x1000)
/usr/glenda/go1.8rc1alt/go/src/net/fd_io_plan9.go:55 +0xfb
created by net.newAsyncIO
/usr/glenda/go1.8rc1alt/go/src/net/fd_io_plan9.go:63 +0xea
FAIL net/http/httptest 180.070s
ok net/http/httptrace 0.020s
panic: test timed out after 3m0s
[...]
FAIL net/http/httputil 180.075s
ok net/http/internal 0.012s
ok net/mail 0.017s
2017/01/11 06:29:31 rpc: gob error encoding body: gob: type rpc.R has no exported fields
panic: test timed out after 3m0s
[...]
FAIL net/rpc 180.101s
ok net/rpc/jsonrpc 0.304s
--- FAIL: TestSendMail (0.01s)
smtp_test.go:515: close tcp 127.0.0.1:50668->127.0.0.1:44054: write /net/tcp/clone: unknown control request
--- FAIL: TestTLSClient (0.02s)
smtp_test.go:610: client error: close tcp 127.0.0.1:54558->127.0.0.1:63356: write /net/tcp/clone: unknown control request
FAIL
FAIL net/smtp 0.060s
ok net/textproto 0.027s
ok net/url 0.043s
--- FAIL: TestLongPath (0.13s)
--- FAIL: TestLongPath/length=247 (0.02s)
os_test.go:1759: Size("/tmp/_Go_TestLongPath661445873/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir345x/bar.txt") is 0, len(ReadFile()) is 12, want 0
--- FAIL: TestLongPath/length=248 (0.01s)
os_test.go:1759: Size("/tmp/_Go_TestLongPath661445873/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456x/bar.txt") is 0, len(ReadFile()) is 12, want 0
--- FAIL: TestLongPath/length=249 (0.00s)
os_test.go:1759: Size("/tmp/_Go_TestLongPath661445873/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir34567x/bar.txt") is 0, len(ReadFile()) is 12, want 0
--- FAIL: TestLongPath/length=400 (0.03s)
os_test.go:1759: Size("/tmp/_Go_TestLongPath661445873/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir3456789/dir34x/bar.txt") is 0, len(ReadFile()) is 12, want 0
FAIL
FAIL os 0.582s
The test runs end with a seemingly permanent hang after a print of:
ok runtime/pprof/internal/protopprof 0.013s
9legacy/386 go1.8rc1 test fails
There were not the frequent failures shown above, but the test suite did not complete successfully. Here is some of the output:
ok cmd/cover 3.069s
ok cmd/doc 0.242s
ok cmd/fix 0.052s
--- FAIL: TestPackageMainTestImportsArchiveNotBinary (1.87s)
go_test.go:260: running testgo [test main_test]
go_test.go:275: standard output:
go_test.go:276: FAIL main_test [build failed]
go_test.go:279: standard error:
go_test.go:280: go build main_test_test: /usr/glenda/go1.8rc1alt/go/pkg/tool/plan9_386/compile: wait: no living children
go_test.go:289: go [test main_test] failed unexpectedly: exit status: 'testgo 23232: 1'
FAIL
FAIL cmd/go 103.210s
ok cmd/gofmt 0.171s
ok cmd/internal/goobj 0.036s
ok cmd/internal/obj 0.034s
ok cmd/internal/obj/arm64 0.053s
ok cmd/internal/obj/x86 0.037s
ok cmd/link 0.031s
ok cmd/nm 2.036s
ok cmd/objdump 2.215s
ok cmd/pack 3.420s
ok cmd/trace 0.062s
ok cmd/vendor/golang.org/x/arch/arm/armasm 0.091s
ok cmd/vendor/golang.org/x/arch/ppc64/ppc64asm 0.111s
ok cmd/vendor/golang.org/x/arch/x86/x86asm 0.315s
ok cmd/vet 0.238s
ok cmd/vet/internal/cfg 0.056s
2017/01/11 01:33:07 Failed: exit status: 'go 15339: 1'
9front/386 old os version 1.4.3 fail to bootstrap 1.7.4
Building go_bootstrap for host, plan9/386.
runtime/internal/sys
runtime/internal/atomic
runtime
panic: runtime error: floating point error
[signal 0x5 code=0x116498d8 addr=0xad8d6 pc=0x23de76]
goroutine 1 [running]:
bootstrap/compile/internal/big.nat.itoa(0x10c337a0, 0x10, 0x16, 0x0, 0xa, 0x0, 0x0, 0x0)
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/big/natconv.go:256 +0xe6
bootstrap/compile/internal/big.nat.utoa(0x10c337a0, 0x10, 0x16, 0xa, 0x0, 0x0, 0x0)
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/big/natconv.go:240 +0x5c
bootstrap/compile/internal/big.(*Float).fmtB(0x10c2d2e0, 0x1375b224, 0x0, 0xa, 0x0, 0x0, 0x0)
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/big/ftoa.go:327 +0x13e
bootstrap/compile/internal/big.(*Float).Append(0x10c2d2e0, 0x1375b224, 0x0, 0xa, 0x62, 0x0, 0x0, 0x0, 0x0)
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/big/ftoa.go:73 +0x23f
bootstrap/compile/internal/big.(*Float).Text(0x10c2d2e0, 0x62, 0x0, 0x0, 0x0)
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/big/ftoa.go:45 +0x98
bootstrap/compile/internal/gc.fconv(0x10c2d2e0, 0x0, 0x0, 0x0)
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/gc/mpfloat.go:213 +0x69
bootstrap/compile/internal/gc.vconv(0x4687e0, 0x10c2d2e0, 0x4, 0x0, 0x0)
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/gc/fmt.go:363 +0x7bb
bootstrap/compile/internal/gc.dumpasmhdr()
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/gc/export.go:596 +0x714
bootstrap/compile/internal/gc.Main()
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/gc/main.go:493 +0x202a
bootstrap/compile/internal/x86.Main()
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/internal/x86/galign.go:80 +0x55f
main.main()
/n/9v/usr/glenda/go1.7.4/go/src/cmd/compile/main.go:31 +0xe5
go tool dist: FAILED: /n/9v/usr/glenda/go1.7.4/go/pkg/tool/plan9_386/compile -pack -o /tmp/go-tool-dist-492375390/runtime/_go_.a -p runtime -+ -asmhdr /tmp/go-tool-dist-492375390/runtime/go_asm.h /n/9v/usr/glenda/go1.7.4/go/src/runtime/alg.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/atomic_pointer.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/cgo.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/cgocall.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/cgocallback.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/cgocheck.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/chan.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/compiler.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/complex.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/cpuprof.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/cputicks.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/debug.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/defs_plan9_386.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/env_plan9.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/error.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/extern.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/fastlog2.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/fastlog2table.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/hash32.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/hashmap.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/hashmap_fast.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/heapdump.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/iface.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/lfstack.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/lfstack_32bit.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/lock_sema.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/malloc.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mbarrier.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mbitmap.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mcache.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mcentral.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mem_plan9.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mfinal.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mfixalloc.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mgc.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mgcmark.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mgcsweep.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mgcwork.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mheap.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mprof.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/msan0.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/msize.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mstats.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/mstkbar.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/netpoll_stub.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/os2_plan9.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/os3_plan9.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/os_plan9.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/panic.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/print.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/proc.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/race0.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/rdebug.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/rune.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/runtime.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/runtime1.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/runtime2.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/select.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/sema.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/signal_plan9.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/sigqueue_plan9.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/slice.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/softfloat64.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/sqrt.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/stack.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/string.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/stubs.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/stubs32.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/symtab.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/sys_nonppc64x.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/sys_x86.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/time.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/trace.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/traceback.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/type.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/typekind.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/unaligned1.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/vdso_none.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/vlrt.go /n/9v/usr/glenda/go1.7.4/go/src/runtime/write_err.go: exit status: 'compile 117520: 2'
9front/386 current fail to build go1.4.3
cpu% ./make.rc
# Building C bootstrap tool.
cmd/dist
# Building compilers and Go bootstrap tool for host, plan9/386.
lib9
/usr/glenda/go/include/plan9/386/u.h:15[/usr/glenda/go/src/lib9/flag.c:82] external redeclaration of: intptr
TYPEDEF INT /usr/glenda/go/include/plan9/386/u.h:15[/usr/glenda/go/src/lib9/flag.c:82]
TYPEDEF LONG /386/include/u.h:9[/usr/glenda/go/src/lib9/flag.c:20]
/usr/glenda/go/include/plan9/386/u.h:15[/usr/glenda/go/src/lib9/fmt/dofmt.c:81] external redeclaration of: intptr
TYPEDEF INT /usr/glenda/go/include/plan9/386/u.h:15[/usr/glenda/go/src/lib9/fmt/dofmt.c:81]
TYPEDEF LONG /386/include/u.h:9[/usr/glenda/go/src/lib9/fmt/dofmt.c:19]
/usr/glenda/go/include/plan9/386/u.h:15[/usr/glenda/go/src/lib9/fmt/dorfmt.c:81] external redeclaration of: intptr
TYPEDEF INT /usr/glenda/go/include/plan9/386/u.h:15[/usr/glenda/go/src/lib9/fmt/dorfmt.c:81]
TYPEDEF LONG /386/include/u.h:9[/usr/glenda/go/src/lib9/fmt/dorfmt.c:19]
/usr/glenda/go/include/plan9/386/u.h:15[/usr/glenda/go/src/lib9/fmt/charstod.c:81] external redeclaration of: intptr
TYPEDEF INT /usr/glenda/go/include/plan9/386/u.h:15[/usr/glenda/go/src/lib9/fmt/charstod.c:81]
TYPEDEF LONG /386/include/u.h:9[/usr/glenda/go/src/lib9/fmt/charstod.c:19]
go tool dist: FAILED: /bin/8c -FTVwp -DPLAN9 -D__STDC__=1 -D__SIZE_TYPE__=ulong -I/usr/glenda/go/include/plan9 -I/usr/glenda/go/include/plan9/386 -DPLAN9PORT -I /usr/glenda/go/src/lib9 -o $WORK/flag.8 /usr/glenda/go/src/lib9/flag.c: '/usr/glenda/go/pkg/obj/plan9_386/lib9.a' does not exist
go tool dist: FAILED: /bin/8c -FTVwp -DPLAN9 -D__STDC__=1 -D__SIZE_TYPE__=ulong -I/usr/glenda/go/include/plan9 -I/usr/glenda/go/include/plan9/386 -DPLAN9PORT -I /usr/glenda/go/src/lib9 -o $WORK/charstod.8 /usr/glenda/go/src/lib9/fmt/charstod.c: '/usr/glenda/go/pkg/obj/plan9_386/lib9.a' does not exist
go tool dist: FAILED: /bin/8c -FTVwp -DPLAN9 -D__STDC__=1 -D__SIZE_TYPE__=ulong -I/usr/glenda/go/include/plan9 -I/usr/glenda/go/include/plan9/386 -DPLAN9PORT -I /usr/glenda/go/src/lib9 -o $WORK/dorfmt.8 /usr/glenda/go/src/lib9/fmt/dorfmt.c: '/usr/glenda/go/pkg/obj/plan9_386/lib9.a' does not exist
go tool dist: FAILED: /bin/8c -FTVwp -DPLAN9 -D__STDC__=1 -D__SIZE_TYPE__=ulong -I/usr/glenda/go/include/plan9 -I/usr/glenda/go/include/plan9/386 -DPLAN9PORT -I /usr/glenda/go/src/lib9 -o $WORK/dofmt.8 /usr/glenda/go/src/lib9/fmt/dofmt.c: '/usr/glenda/go/pkg/obj/plan9_386/lib9.a' does not exist
A partial fix for the conflicting typedefs (seemingly introduced in 9front commit 5046) is commenting out a typedef from go1.4.3’s include/plan9/386/u.h
// typedef int intptr;
This produces a build that compiles and runs some things, but also tends to produce errors like this:
runtime: garbage collector found invalid heap pointer *(0x51cfe0+0xa8)=0x106b9e54 span=0x106b0000-0x106b9400-0x106ba000 state=0
fatal error: invalid heap pointer
runtime stack:
runtime.throw(0x512823)
/sys/ports/dev-lang/go/work/go/src/runtime/panic.go:491 +0x83 fp=0xdfffec38 sp=0xdfffec20
scanblock(0x51cfe0, 0x6d20, 0x30642610)
/sys/ports/dev-lang/go/work/go/src/runtime/mgc0.c:381 +0x495 fp=0xdfffecd8 sp=0xdfffec38
markroot(0x1064c000, 0x1)
/sys/ports/dev-lang/go/work/go/src/runtime/mgc0.c:499 +0x138 fp=0xdfffed10 sp=0xdfffecd8
runtime.parfordo(0x1064c000)
/sys/ports/dev-lang/go/work/go/src/runtime/parfor.c:76 +0x98 fp=0xdfffed6c sp=0xdfffed10
[...]
Along the Way
Diving into all this produced some interesting discoveries along the way, in particular I learned how to get a hybrid 9legacy/9front system running on Vultr VPS hosting. I may have more to say about that in a future blog post. For anyone who got this far after all those error excerpts, I hope there was something interesting or useful to you along the way.