File go1.26.changes of Package go1.26.42657

-------------------------------------------------------------------
Tue Feb 10 19:27:55 UTC 2026 - Jeff Kowalczyk <jkowalczyk@suse.com>

- go1.26.0 (released 2026-02-10) is a major release of Go.
  go1.26.x minor releases will be provided through February 2027.
  https://github.com/golang/go/wiki/Go-Release-Cycle
  go1.26 arrives six months after Go 1.25. Most of its changes are
  in the implementation of the toolchain, runtime, and
  libraries. As always, the release maintains the Go 1 promise of
  compatibility. We expect almost all Go programs to continue to
  compile and run as before.
  Refs boo#1255111 go1.26 release tracking
  * Language change: The built-in new function, which creates a new
    variable, now allows its operand to be an expression,
    specifying the initial value of the variable.
  * Language change: The restriction that a generic type may not
    refer to itself in its type parameter list has been lifted. It
    is now possible to specify type constraints that refer to the
    generic type being constrained.
  * go command: The venerable go fix command has been completely
    revamped and is now the home of Go’s modernizers. It provides a
    dependable, push-button way to update Go code bases to the
    latest idioms and core library APIs. The initial suite of
    modernizers includes dozens of fixers to make use of modern
    features of the Go language and library, as well a source-level
    inliner that allows users to automate their own API migrations
    using //go:fix inline directives. These fixers should not
    change the behavior of your program, so if you encounter any
    issues with a fix performed by go fix, please report it.
  * go command: The rewritten go fix command builds atop the exact
    same Go analysis framework as go vet. This means the same
    analyzers that provide diagnostics in go vet can be used to
    suggest and apply fixes in go fix. The go fix command’s
    historical fixers, all of which were obsolete, have been
    removed.
  * go command: Two upcoming Go blog posts will go into more detail
    on modernizers, the inliner, and how to get the most out of go
    fix.
  * go command: go mod init now defaults to a lower go version in
    new go.mod files. Running go mod init using a toolchain of
    version 1.N.X will create a go.mod file specifying the Go
    version go 1.(N-1).0. Pre-release versions of 1.N will create
    go.mod files specifying go 1.(N-2).0. For example, the Go 1.26
    release candidates will create go.mod files with go 1.24.0, and
    Go 1.26 and its minor releases will create go.mod files with go
    1.25.0. This is intended to encourage the creation of modules
    that are compatible with currently supported versions of
    Go. For additional control over the go version in new modules,
    go mod init can be followed up with go get go@version.
  * go command: cmd/doc, and go tool doc have been deleted. go doc
    can be used as a replacement for go tool doc: it takes the same
    flags and arguments and has the same behavior.
  * pprof: The pprof tool web UI, enabled with the -http flag, now
    defaults to the flame graph view. The previous graph view is
    available in the “View -> Graph” menu, or via /ui/graph.
  * Runtime: The new Green Tea garbage collector, previously
    available as an experiment in Go 1.25, is now enabled by
    default after incorporating feedback. This garbage collector’s
    design improves the performance of marking and scanning small
    objects through better locality and CPU scalability. Benchmark
    results vary, but we expect somewhere between a 10–40%
    reduction in garbage collection overhead in real-world programs
    that heavily use the garbage collector. Further improvements,
    on the order of 10% in garbage collection overhead, are
    expected when running on newer amd64-based CPU platforms (Intel
    Ice Lake or AMD Zen 4 and newer), as the garbage collector now
    leverages vector instructions for scanning small objects when
    possible. The new garbage collector may be disabled by setting
    GOEXPERIMENT=nogreenteagc at build time. This opt-out setting
    is expected to be removed in Go 1.27. If you disable the new
    garbage collector for any reason related to its performance or
    behavior, please file an issue.
  * Runtime: cgo: The baseline runtime overhead of cgo calls has
    been reduced by ~30%.
  * Runtime: Heap base address randomization: On 64-bit platforms,
    the runtime now randomizes the heap base address at
    startup. This is a security enhancement that makes it harder
    for attackers to predict memory addresses and exploit
    vulnerabilities when using cgo. This feature may be disabled by
    setting GOEXPERIMENT=norandomizedheapbase64 at build time. This
    opt-out setting is expected to be removed in a future Go
    release.
  * Runtime: Experimental goroutine leak profile: A new profile
    type that reports leaked goroutines is now available as an
    experiment. The new profile type, named goroutineleak in the
    runtime/pprof package, may be enabled by setting
    GOEXPERIMENT=goroutineleakprofile at build time. Enabling the
    experiment also makes the profile available as a net/http/pprof
    endpoint, /debug/pprof/goroutineleak. A leaked goroutine is a
    goroutine blocked on some concurrency primitive (channels,
    sync.Mutex, sync.Cond, etc) that cannot possibly become
    unblocked. The runtime detects leaked goroutines using the
    garbage collector: if a goroutine G is blocked on concurrency
    primitive P, and P is unreachable from any runnable goroutine
    or any goroutine that those could unblock, then P cannot be
    unblocked, so goroutine G can never wake up. While it is
    impossible to detect permanently blocked goroutines in all
    cases, this approach detects a large class of such
    leaks. Because this technique builds on reachability, the
    runtime may fail to identify leaks caused by blocking on
    concurrency primitives reachable through global variables or
    the local variables of runnable goroutines. Special thanks to
    Vlad Saioc at Uber for contributing this work. The underlying
    theory is presented in detail in a publication by Saioc et
    al. The implementation is production-ready, and is only
    considered an experiment for the purposes of collecting
    feedback on the API, specifically the choice to make it a new
    profile. The feature is also designed to not incur any
    additional run-time overhead unless it is actively in-use. We
    encourage users to try out the new feature in the Go
    playground, in tests, in continuous integration, and in
    production. We welcome additional feedback on the proposal
    issue. We aim to enable goroutine leak profiles by default in
    Go 1.27.
  * Compiler: The compiler can now allocate the backing store for
    slices on the stack in more situations, which improves
    performance. If this change is causing trouble, the bisect tool
    can be used to find the allocation causing trouble using the
    -compile=variablemake flag. All such new stack allocations can
    also be turned off using -gcflags=all=-d=variablemakehash=n. If
    you encounter issues with this optimization, please file an
    issue.
  * Linker: On 64-bit ARM-based Windows (the windows/arm64 port),
    the linker now supports internal linking mode of cgo programs,
    which can be requested with the -ldflags=-linkmode=internal
    flag.
  * Linker: There are several minor changes to executable
    files. These changes do not affect running Go programs. They
    may affect programs that analyze Go executables, and they may
    affect people who use external linking mode with custom linker
    scripts.
  * Linker: The moduledata structure is now in its own section,
    named .go.module.
  * Linker: The moduledata cutab field, which is a slice, now has
    the correct length; previously the length was four times too
    large.
  * Linker: The pcHeader found at the start of the .gopclntab
    section no longer records the start of the text section. That
    field is now always zero.
  * Linker: That pcHeader change was made so that the .gopclntab
    section no longer contains any relocations. On platforms that
    support relro, the section has moved from the relro segment to
    the rodata segment.
  * Linker: The funcdata symbols and the findfunctab have moved
    from the .rodata section to the .gopclntab section.
  * Linker: The .gosymtab section has been removed. It was
    previously always present but empty.
  * Linker: When using internal linking, ELF sections now appear in
    the section header list sorted by address. The previous order
    was somewhat unpredictable.
  * Linker: The references to section names here use the ELF names
    as seen on Linux and other systems. The Mach-O names as seen on
    Darwin start with a double underscore and do not contain any
    dots.
  * Bootstrap: As mentioned in the Go 1.24 release notes, Go 1.26
    now requires Go 1.24.6 or later for bootstrap. We expect that
    Go 1.28 will require a minor release of Go 1.26 or later for
    bootstrap.
  * Standard Library: New crypto/hpke package: The new crypto/hpke
    package implements Hybrid Public Key Encryption (HPKE) as
    specified in RFC 9180, including support for post-quantum
    hybrid KEMs.
  * Standard Library: New experimental simd/archsimd package: Go
    1.26 introduces a new experimental simd/archsimd package, which
    can be enabled by setting the environment variable
    GOEXPERIMENT=simd at build time. This package provides access
    to architecture-specific SIMD operations. It is currently
    available on the amd64 architecture and supports 128-bit,
    256-bit, and 512-bit vector types, such as Int8x16 and
    Float64x8, with operations such as Int8x16.Add. The API is not
    yet considered stable. We intend to provide support for other
    architectures in future versions, but the API intentionally
    architecture-specific and thus non-portable. In addition, we
    plan to develop a high-level portable SIMD package in the
    future.
  * Standard Library: New experimental runtime/secret package: The
    new runtime/secret package is available as an experiment, which
    can be enabled by setting the environment variable
    GOEXPERIMENT=runtimesecret at build time. It provides a
    facility for securely erasing temporaries used in code that
    manipulates secret information—typically cryptographic in
    nature—such as registers, stack, new heap allocations. This
    package is intended to make it easier to ensure forward
    secrecy. It currently supports the amd64 and arm64
    architectures on Linux.
  * bytes: The new Buffer.Peek method returns the next n bytes from
    the buffer without advancing it.
  * crypto: The new Encapsulator and Decapsulator interfaces allow
    accepting abstract KEM encapsulation or decapsulation keys.
  * crypto/dsa: The random parameter to GenerateKey is now
    ignored. Instead, it now always uses a secure source of
    cryptographically random bytes. For deterministic testing, use
    the new testing/cryptotest.SetGlobalRandom function. The new
    GODEBUG setting cryptocustomrand=1 temporarily restores the old
    behavior.
  * crypto/ecdh: The random parameter to Curve.GenerateKey is now
    ignored. Instead, it now always uses a secure source of
    cryptographically random bytes. For deterministic testing, use
    the new testing/cryptotest.SetGlobalRandom function. The new
    GODEBUG setting cryptocustomrand=1 temporarily restores the old
    behavior. The new KeyExchanger interface, implemented by
    PrivateKey, makes it possible to accept abstract ECDH private
    keys, e.g. those implemented in hardware.
  * crypto/ecdsa: The big.Int fields of PublicKey and PrivateKey
    are now deprecated. The random parameter to GenerateKey,
    SignASN1, Sign, and PrivateKey.Sign is now ignored. Instead,
    they now always use a secure source of cryptographically random
    bytes. For deterministic testing, use the new
    testing/cryptotest.SetGlobalRandom function. The new GODEBUG
    setting cryptocustomrand=1 temporarily restores the old
    behavior.
  * crypto/ed25519: If the random parameter to GenerateKey is nil,
    GenerateKey now always uses a secure source of
    cryptographically random bytes, instead of crypto/rand.Reader
    (which could have been overridden). The new GODEBUG setting
    cryptocustomrand=1 temporarily restores the old behavior.
  * crypto/fips140: The new WithoutEnforcement and Enforced
    functions now allow running in GODEBUG=fips140=only mode while
    selectively disabling the strict FIPS 140-3 checks. Version
    returns the resolved FIPS 140-3 Go Cryptographic Module version
    when building against a frozen module with GOFIPS140.
  * crypto/mlkem: The new DecapsulationKey768.Encapsulator and
    DecapsulationKey1024.Encapsulator methods implement the new
    crypto.Decapsulator interface.
  * crypto/mlkem/mlkemtest: The new crypto/mlkem/mlkemtest package
    exposes the Encapsulate768 and Encapsulate1024 functions which
    implement derandomized ML-KEM encapsulation, for use with
    known-answer tests.
  * crypto/rand: The random parameter to Prime is now
    ignored. Instead, it now always uses a secure source of
    cryptographically random bytes. For deterministic testing, use
    the new testing/cryptotest.SetGlobalRandom function. The new
    GODEBUG setting cryptocustomrand=1 temporarily restores the old
    behavior.
  * crypto/rsa: The new EncryptOAEPWithOptions function allows
    specifying different hash functions for OAEP padding and MGF1
    mask generation.
  * crypto/rsa: The random parameter to GenerateKey,
    GenerateMultiPrimeKey, and EncryptPKCS1v15 is now
    ignored. Instead, they now always use a secure source of
    cryptographically random bytes. For deterministic testing, use
    the new testing/cryptotest.SetGlobalRandom function. The new
    GODEBUG setting cryptocustomrand=1 temporarily restores the old
    behavior.
  * crypto/rsa: If PrivateKey fields are modified after calling
    PrivateKey.Precompute, PrivateKey.Validate now fails.
  * crypto/rsa: PrivateKey.D is now checked for consistency with
    precomputed values, even if it is not used.
  * crypto/rsa: Unsafe PKCS #1 v1.5 encryption padding (implemented
    by EncryptPKCS1v15, DecryptPKCS1v15, and
    DecryptPKCS1v15SessionKey) is now deprecated.
  * crypto/subtle: The WithDataIndependentTiming function no longer
    locks the calling goroutine to the OS thread while executing
    the passed function. Additionally, any goroutines which are
    spawned during the execution of the passed function and their
    descendants now inherit the properties of
    WithDataIndependentTiming for their lifetime. This change also
    affects cgo in the following ways:
  * crypto/subtle: Any C code called via cgo from within the
    function passed to WithDataIndependentTiming, or from a
    goroutine spawned by the function passed to
    WithDataIndependentTiming and its descendants, will also have
    data independent timing enabled for the duration of the
    call. If the C code disables data independent timing, it will
    be re-enabled on return to Go.
  * crypto/subtle: If C code called via cgo, from the function
    passed to WithDataIndependentTiming or elsewhere, enables or
    disables data independent timing then calling into Go will
    preserve that state for the duration of the call.
  * crypto/tls: The hybrid SecP256r1MLKEM768 and SecP384r1MLKEM1024
    post-quantum key exchanges are now enabled by default. They can
    be disabled by setting Config.CurvePreferences or with the
    tlssecpmlkem=0 GODEBUG setting.
  * crypto/tls: The new ClientHelloInfo.HelloRetryRequest field
    indicates if the ClientHello was sent in response to a
    HelloRetryRequest message. The new
    ConnectionState.HelloRetryRequest field indicates if the server
    sent a HelloRetryRequest, or if the client received a
    HelloRetryRequest, depending on connection role.
  * crypto/tls: The QUICConn type used by QUIC implementations
    includes a new event for reporting TLS handshake errors.
  * crypto/tls: If Certificate.PrivateKey implements
    crypto.MessageSigner, its SignMessage method is used instead of
    Sign in TLS 1.2 and later.
  * crypto/tls: The following GODEBUG settings introduced in Go
    1.22 and Go 1.23 will be removed in the next major Go
    release. Starting in Go 1.27, the new behavior will apply
    regardless of GODEBUG setting or go.mod language version.
  * crypto/tls: GODEBUG tlsunsafeekm:
    ConnectionState.ExportKeyingMaterial will require TLS 1.3 or
    Extended Master Secret.
  * crypto/tls: GODEBUG tlsrsakex: legacy RSA-only key exchanges
    without ECDH won’t be enabled by default.
  * crypto/tls: GODEBUG tls10server: the default minimum TLS
    version for both clients and servers will be TLS 1.2.
  * crypto/tls: GODEBUG tls3des: the default cipher suites will not
    include 3DES.
  * crypto/tls: GODEBUG x509keypairleaf: X509KeyPair and
    LoadX509KeyPair will always populate the Certificate.Leaf
    field.
  * crypto/x509: The ExtKeyUsage and KeyUsage types now have String
    methods that return the corresponding OID names as defined in
    RFC 5280 and other registries.
  * crypto/x509: The ExtKeyUsage type now has an OID method that
    returns the corresponding OID for the EKU.
  * crypto/x509: The new OIDFromASN1OID function allows converting
    an encoding/asn1.ObjectIdentifier into an OID.
  * debug/elf: Additional R_LARCH_* constants from LoongArch ELF
    psABI v20250521 (global version v2.40) are defined for use with
    LoongArch systems.
  * errors: The new AsType function is a generic version of As. It
    is type-safe, faster, and, in most cases, easier to use.
  * fmt: For unformatted strings, fmt.Errorf("x") now allocates
    less and generally matches the allocations for errors.New("x").
  * go/ast: The new ParseDirective function parses directive
    comments, which are comments such as //go:generate. Source code
    tools can support their own directive comments and this new API
    should help them implement the conventional syntax.
  * go/ast: The new BasicLit.ValueEnd field records the precise end
    position of a literal so that the BasicLit.End method can now
    always return the correct answer. (Previously it was computed
    using a heuristic that was incorrect for multi-line raw string
    literals in Windows source files, due to removal of carriage
    returns.)
  * go/ast: Programs that update the ValuePos field of BasicLits
    produced by the parser may need to also update or clear the
    ValueEnd field to avoid minor differences in formatted output.
  * go/token: The new File.End convenience method returns the
    file’s end position.
  * go/types: The gotypesalias GODEBUG setting introduced in Go
    1.22 will be removed in the next major Go release. Starting in
    Go 1.27, the go/types package will always produce an Alias type
    for the representation of type aliases regardless of GODEBUG
    setting or go.mod language version.
  * image/jpeg: The JPEG encoder and decoder have been replaced
    with new, faster, more accurate implementations. Code that
    expects specific bit-for-bit outputs from the encoder or
    decoder may need to be updated.
  * io: ReadAll now allocates less intermediate memory and returns
    a minimally sized final slice. It is often about two times
    faster while typically allocating around half as much total
    memory, with more benefit for larger inputs.
  * log/slog: The NewMultiHandler function creates a MultiHandler
    that invokes all the given Handlers. Its Enabled method reports
    whether any of the handlers’ Enabled methods return true. Its
    Handle, WithAttrs and WithGroup methods call the corresponding
    method on each of the enabled handlers.
  * net: The new Dialer methods DialIP, DialTCP, DialUDP, and
    DialUnix permit dialing specific network types with context
    values.
  * net/http: The new HTTP2Config.StrictMaxConcurrentRequests field
    controls whether a new connection should be opened if an
    existing HTTP/2 connection has exceeded its stream limit.
  * net/http: The new Transport.NewClientConn method returns a
    client connection to an HTTP server. Most users should continue
    to use Transport.RoundTrip to make requests, which manages a
    pool of connections. NewClientConn is useful for users who need
    to implement their own connection management.
  * net/http: Client now uses and sets cookies scoped to URLs with
    the host portion matching Request.Host when
    available. Previously, the connection address host was always
    used.
  * net/http/httptest: The HTTP client returned by Server.Client
    will now redirect requests for example.com and any subdomains
    to the server being tested.
  * net/http/httputil: The ReverseProxy.Director configuration
    field is deprecated in favor of ReverseProxy.Rewrite.
  * net/http/httputil: A malicious client can remove headers added
    by a Director function by designating those headers as
    hop-by-hop. Since there is no way to address this problem
    within the scope of the Director API, we added a new Rewrite
    hook in Go 1.20. Rewrite hooks are provided with both the
    unmodified inbound request received by the proxy and the
    outbound request which will be sent by the proxy. Since the
    Director hook is fundamentally unsafe, we are now deprecating
    it.
  * net/netip: The new Prefix.Compare method compares two prefixes.
  * net/url: Parse now rejects malformed URLs containing colons in
    the host subcomponent, such as http://::1/ or
    http://localhost:80:80/. URLs containing bracketed IPv6
    addresses, such as http://[::1]/ are still accepted. The new
    GODEBUG setting urlstrictcolons=0 restores the old behavior.
  * os: The new Process.WithHandle method provides access to an
    internal process handle on supported platforms (pidfd on Linux
    5.4 or later, Handle on Windows).
  * os: On Windows, the OpenFile flag parameter can now contain any
    combination of Windows-specific file flags, such as
    FILE_FLAG_OVERLAPPED and FILE_FLAG_SEQUENTIAL_SCAN, for control
    of file or device caching behavior, access modes, and other
    special-purpose flags.
  * os/signal: NotifyContext now cancels the returned context with
    context.CancelCauseFunc and an error indicating which signal
    was received.
  * reflect: The new methods Type.Fields, Type.Methods, Type.Ins
    and Type.Outs return iterators for a type’s fields (for a
    struct type), methods, inputs and outputs parameters (for a
    function type), respectively. Similarly, the new methods
    Value.Fields and Value.Methods return iterators over a value’s
    fields or methods, respectively. Each iteration yields the type
    information (StructField or Method) of a field or method, along
    with the field or method Value.
  * runtime/metrics: Several new scheduler metrics have been added,
    including counts of goroutines in various states (waiting,
    runnable, etc.) under the /sched/goroutines prefix, the number
    of OS threads the runtime is aware of with
    /sched/threads:threads, and the total number of goroutines
    created by the program with
    /sched/goroutines-created:goroutines.
  * testing: The new methods T.ArtifactDir, B.ArtifactDir, and
    F.ArtifactDir return a directory in which to write test output
    files (artifacts).
  * testing: When the -artifacts flag is provided to go test, this
    directory will be located under the output directory (specified
    with -outputdir, or the current directory by
    default). Otherwise, artifacts are stored in a temporary
    directory which is removed after the test completes.
  * testing: The first call to ArtifactDir when -artifacts is
    provided writes the location of the directory to the test log.
  * testing: The B.Loop method no longer prevents inlining in the
    loop body, which could lead to unanticipated allocation and
    slower benchmarks. With this fix, we expect that all benchmarks
    can be converted from the old B.N style to the new B.Loop style
    with no ill effects. Within the body of a for b.Loop() { ... }
    loop, function call parameters, results, and assigned variables
    are still kept alive, preventing the compiler from optimizing
    away entire parts of the benchmark.
  * testing/cryptotest: The new SetGlobalRandom function configures
    a global, deterministic cryptographic randomness source for the
    duration of the test. It affects crypto/rand, and all implicit
    sources of cryptographic randomness in the crypto/... packages.
  * time: The asynctimerchan GODEBUG setting introduced in Go 1.23
    will be removed in the next major Go release. Starting in Go
    1.27, the time package will always use unbuffered (synchronous)
    channels for timers regardless of GODEBUG setting or go.mod
    language version.
  * Ports: Darwin: Go 1.26 is the last release that will run on
    macOS 12 Monterey. Go 1.27 will require macOS 13 Ventura or
    later.
  * Ports: FreeBSD: The freebsd/riscv64 port (GOOS=freebsd
    GOARCH=riscv64) has been marked broken. See issue 76475 for
    details.
  * Ports: Windows: As announced in the Go 1.25 release notes, the
    broken 32-bit windows/arm port (GOOS=windows GOARCH=arm) has
    been removed.
  * Ports: PowerPC: Go 1.26 is the last release that supports the
    ELFv1 ABI on the big-endian 64-bit PowerPC port on Linux
    (GOOS=linux GOARCH=ppc64). It will switch to the ELFv2 ABI in
    Go 1.27. As the port does not currently support linking against
    other ELF objects, we expect this change to be transparent to
    users.
  * Ports: RISC-V: The linux/riscv64 port now supports the race
    detector.
  * Ports: S390X: The s390x port now supports passing function
    arguments and results using registers.
  * Ports: WebAssembly: The compiler now unconditionally makes use
    of the sign extension and non-trapping floating-point to
    integer conversion instructions. These features have been
    standardized since at least Wasm 2.0. The corresponding GOWASM
    settings, signext and satconv, are now ignored.
  * Ports: WebAssembly: For WebAssembly applications, the runtime
    now manages chunks of heap memory in much smaller increments,
    leading to significantly reduced memory usage for applications
    with heaps less than around 16 MiB in size.

-------------------------------------------------------------------
Wed Feb  4 15:46:44 UTC 2026 - Jeff Kowalczyk <jkowalczyk@suse.com>

- go1.26rc3 (released 2026-02-04) is a release candidate version of
  go1.26 cut from the master branch at the revision tagged
  go1.26rc3.
  Refs boo#1255111 go1.26 release tracking

-------------------------------------------------------------------
Thu Jan 15 18:32:04 UTC 2026 - Jeff Kowalczyk <jkowalczyk@suse.com>

- go1.26rc2 (released 2026-01-15) is a release candidate version of
  go1.26 cut from the master branch at the revision tagged
  go1.26rc2.
  Refs boo#1255111 go1.26 release tracking
  * go1.26 requires go1.24.6 or later for bootstrap.

-------------------------------------------------------------------
Tue Dec 16 20:00:53 UTC 2025 - Jeff Kowalczyk <jkowalczyk@suse.com>

- go1.26rc1 (released 2025-12-16) is a release candidate version of
  go1.26 cut from the master branch at the revision tagged
  go1.26rc1.
  Refs boo#1255111 go1.26 release tracking
  * go1.26 requires go1.24.6 or later for bootstrap.
openSUSE Build Service is sponsored by