go plugin with snapcraft 4 doesn't support building static binaries
Metadata
Current evaluation
Closed as stale. The Go plugin has significantly changed since Snapcraft 4, rendering the report obsolete. Users should upgrade to a newer Snapcraft version for updated build behavior.
Suggested action: —
No scores available.
Issue body
I have a go program which does not require any dynamic library dependencies, and as such I would like to link it statically and use the `base: base` for this snap, so I have tried this:
```
parts:
etrace:
build-environment:
- CGO_ENABLED: "0"
plugin: go
source: .
```
but it still produces a dynamically linked executable against libc, because snapcraft internally does this command always:
```
Building etrace
go build -o /root/parts/etrace/install/bin ./...
go build -ldflags -linkmode=external -o /root/parts/etrace/install/bin ./...
# github.com/anonymouse64/etrace/cmd/etrace
loadinternal: cannot find runtime/cgo
```
which completes, but gives me this:
```
$ ldd ./squashfs-root/bin/etrace
linux-vdso.so.1 (0x00007ffd91f77000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3d02414000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3d02624000)
```
which I can't use with the bare base snap. What works instead is to do this manually:
```
override-build: |
mkdir -p $SNAPCRAFT_PART_INSTALL/bin
cd $SNAPCRAFT_PART_SRC
go build -o $SNAPCRAFT_PART_INSTALL/bin ./...
```
It would be nice if snapcraft either:
1. automatically detected that CGO_ENABLED=0 was set in the build-environment and didn't manually link things
2. automatically detected that the built binaries from go build -o ./bin ./... were not dynamically linked at all and skipped the final link step
3. had a property or otherwise first-class mechanism to specify that a go part built with the go plugin should be statically compiled (perhaps an option to the plugin yaml, etc.), this could also potentially replace setting the build-environment for CGO_ENABLED=0 as well
snapcraft, version 4.0.5
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| qwen/qwen3.6-35b-a3b | — | — | Closed as stale. The Go plugin has significantly changed since Snapcraft 4, rendering the report obsolete. Users should upgrade to a newer Snapcraft version for updated build behavior. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
95
Complexity:
35
Confidence:
90
Support Request:
10
|
close stale | Go plugin in Snapcraft 4 forces dynamic linking despite CGO_ENABLED=0, blocking static builds for bare base snaps. Issue is 6 years old, has zero maintainer interaction, and references a long-obsolete version. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
95
Complexity:
30
Confidence:
85
Support Request:
10
|
close stale | Snapcraft 4 go plugin forces dynamic linking despite CGO_ENABLED=0, preventing static builds for bare base snaps. Issue is 6 years old with no maintainer response. | |
| qwen3.6-35b-a3b-mtp-q6 |
Staleness:
98
Complexity:
35
Confidence:
85
Support Request:
20
|
close stale | Snapcraft 4 Go plugin forces dynamic linking even with CGO_ENABLED=0, blocking static builds for bare bases. Report is six years old, completely untriaged, and lacks maintainer engagement. | |
| qwen3.6-35b-a3b-mtp-q6 |
Staleness:
95
Complexity:
20
Confidence:
90
Support Request:
30
|
close stale | Snapcraft's go plugin forces dynamic linking, blocking static builds for bare bases. Open with zero comments and 270+ days of inactivity. Needs triage and an explicit static build option or CGO_ENABLED=0 auto-detection. |
Update history
No update history recorded yet.
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #1616985 the go plugin doesn't use go build-snaps | snapcraft (launchpad) | closed | Resolved by adding build-snap support to snapcraft and publishing a dedicated go snap. The go plugin was updated to use the go build-snap instead of the legacy deb package, enabling support for newer Go versions. | |
| #1751 the go plugin doesn't use go build-snaps | snapcraft | closed | Closed without resolution or discussion. The report appears abandoned or superseded, with no fix implemented or merge details provided. |