The 171 Approved Go Proposals Still Unimplemented: A Ten‑Year Technical Debt List
An analysis of the 171 open Go proposals that have been marked Accepted but remain unimplemented, revealing that over half have been pending for more than five years, the categories most affected, the reasons behind the backlog, and recent signs that the Go team is accelerating their resolution.
Go’s proposal mechanism allows anyone to submit a proposal to the golang/go repository, discuss it publicly, review it in weekly meetings, and receive an Accepted or Declined decision from the core team. The process has been described as “slow but functional”.
Open accepted proposals
A GitHub search for state:open label:"Proposal-Accepted" on the golang/go repository (July 2026) returns 171 issues that have been marked Accepted but remain open because the code has not been merged.
Health check – profiling the 171 issues
Age distribution
Less than 1 year – 9 (5%)
1–2 years – 15 (9%)
2–3 years – 22 (13%)
3–5 years – 40 (23%)
5–8 years – 44 (26%)
8–10 years – 32 (19%)
More than 10 years – 9 (5%)
More than half (≈50%) of the Accepted proposals have been pending for over five years.
Milestone distribution
Backlog– 107 (≈63%): approved but no concrete schedule. Unreleased – 22: code merged but not yet released. Unplanned – 21: approved with an explicit “not planned” label. Go1.28 – 8: scheduled for the next major release. Go1.27 – 6: scheduled for the upcoming release. Proposal – 7: process state pending organization.
Categories with the most backlog
x/*extension repositories (x/net, x/crypto, x/tools, …) – 31
Standard‑library “misc” (no fixed prefix) – 26 cmd/go command – 22
Cryptography‑related ( crypto/*, x/crypto/*) – 22
Other command‑line tools ( cmd/vet, cmd/compile, cmd/asm, …) – 19 net / net/http – 13 testing / runtime – 8 each
Repositories that are “edge” and rely heavily on community contributions tend to have longer backlogs.
Five representative “stubborn” stories
1. Type‑inferred composite literals (proposal #12854)
Created in October 2015, the proposal received 279 comments (second‑most discussed). It aims to let the compiler infer the inner type of nested composite literals such as *[]Point{{1,2},{3,4}} without writing the full type each time. After a long deliberation it was accepted and, according to the latest milestone, is scheduled for Go 1.28 – a ten‑year‑old syntax improvement that may land next year.
2. Archive path‑traversal safety (proposal #55356)
Submitted in September 2022, the security‑related proposal references CVE‑2018‑25046 and CVE‑2020‑36560. It adds ErrInsecurePath to archive/tar and archive/zip to reject unsafe paths. The implementation was merged in CL 449937, but the check is disabled by default; enabling it requires setting GODEBUG=zipinsecurepath=1. The team kept it off because many Docker images contain absolute paths, and turning the check on by default would break existing programs. The issue now carries the NeedsDecision label, indicating that the timing of the default enablement is still under product discussion.
3. Adding a -static flag to go build (proposal #26492)
Opened in July 2018, the proposal suggests wrapping a long list of linker and build‑tag arguments into a single -static flag. Over eight years the issue accumulated 42 comments, mostly community members sharing hand‑crafted static‑build parameter combinations for Windows, macOS, and Alpine/musl. Core maintainer Ian Lance Taylor noted that the technical difficulty is low; the obstacle is finding someone willing to perform the cross‑platform testing. The issue remains tagged help wanted.
4. Flaky test retry support (proposal #62244)
Proposed by former core member Brad Fitzpatrick, this adds a Retry() method to testing.T so that intermittently failing tests can be automatically re‑run. The discussion spanned dozens of comments debating where retries should happen, whether parent tests can retry after child failures, and the risk of masking real data‑race bugs. The proposal was accepted; the issue now carries the FixPending label, meaning the fix is in review.
5. Register‑based calling convention (proposal #40724)
This heavily discussed proposal (292 comments) suggests switching Go function calls from stack‑based to register‑based passing, promising a 5%–10% overall performance gain. The change landed in Go 1.17 for amd64 and arm64, but the issue remains open because the ABI for other architectures (386, MIPS, etc.) is still pending. Large proposals are often split into many CLs, so an open issue does not necessarily mean no progress.
Why so many “debts”?
“Accepted” only signals consensus, not a scheduled implementation. The issue then becomes a progress tracker, and the actual work depends on a core member or community contributor taking it on. The 107 Backlog items are essentially “unclaimed”.
Many proposals rely on community contributions rather than internal Google resources. Items tagged help wanted are treated as open invitations; if nobody steps up, they stay in Backlog indefinitely.
Proposals that change default behavior undergo a lengthy “soft landing” period. The ErrInsecurePath story shows that even after code is ready, the team prefers to expose the change behind a GODEBUG flag and observe compatibility feedback before making it default.
Extension repositories ( x/*) and cryptography modules have lower priority and often require security reviews, which naturally slows their cadence. Together they account for 53 of the 171 items (≈31%).
Signs of acceleration
As of early July 2026, the three highlighted issues have all been updated within the past week:
#62244 (flaky test retry) now carries the FixPending label, indicating the fix is in the review queue.
#55356 (archive path safety) still sees maintainer discussion about the timeline for making the flag default.
#26492 (static build flag) continues to receive new community feedback on practical usage.
Milestone analysis shows Go 1.27 (expected August 2026) has 6 historical backlog items scheduled, and Go 1.28 has 8, including the ten‑year‑old type‑inferred composite literal proposal. Earlier releases (Go 1.26, Go 1.27) already cleared several long‑standing GODEBUG switches, indicating a deliberate effort to “clean up” legacy defaults.
Core data source
Data collected from GitHub issue search state:open label:"Proposal-Accepted" on the golang/go repository, snapshot taken in July 2026.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
TonyBai
Tony Bai's tech world (tonybai.com). Not satisfied with just "knowing how", we strive for mastery. Focused on Go language internals, high-quality engineering practices, and cloud‑native architecture, exploring cutting‑edge intersections of Go and AI. Gophers who pursue technology are welcome—follow me and evolve with Go.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
