aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGopher Robot <gobot@golang.org>2025-12-03 08:18:17 -0800
committerGopher Robot <gobot@golang.org>2025-12-03 08:44:20 -0800
commitc4856916f48c02ba5b10520235052408181458f4 (patch)
treed539843c575ebc88ebb7976e4f3b2a7e84bf27bb
parent52851a50127b85643572e04cecc0f14b03230376 (diff)
downloadgo-x-website-c4856916f48c02ba5b10520235052408181458f4.tar.xz
_content/doc: add merged go1.26.md
Using doc/next content as of 2025-12-03 (commit 2729e87aa5b66433ba39cc15e77f3ed26efdaf05). For golang/go#75005. Change-Id: Iec3fa42f2dca3d2abde5d1f12518fa7e256785dd Reviewed-on: https://go-review.googlesource.com/c/website/+/726360 Auto-Submit: Gopher Robot <gobot@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Mark Freeman <markfreeman@google.com>
-rw-r--r--_content/doc/go1.26.md489
1 files changed, 481 insertions, 8 deletions
diff --git a/_content/doc/go1.26.md b/_content/doc/go1.26.md
index 08e1a2da..5791a674 100644
--- a/_content/doc/go1.26.md
+++ b/_content/doc/go1.26.md
@@ -1,13 +1,486 @@
---
title: Go 1.26 Release Notes
-template: true
+template: false
---
-{{/*
- This is a placeholder template that makes it possible to preview
- Go 1.26 release notes draft at https://tip.golang.org/doc/go1.26.
- Eventually the release note fragments in doc/next will be merged
- and added here, replacing the "docNext" function call.
-*/}}
+<style>
+ main ul li { margin: 0.5em 0; }
+</style>
-{{with docNext}}{{.}}{{else}}No next release note fragments available.{{end}}
+## DRAFT RELEASE NOTES — Introduction to Go 1.26 {#introduction}
+
+**Go 1.26 is not yet released. These are work-in-progress release notes.
+Go 1.26 is expected to be released in February 2026.**
+
+## Changes to the language {#language}
+
+<!-- https://go.dev/issue/45624 --->
+
+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.
+
+This feature is particularly useful when working with serialization
+packages such as `encoding/json` or protocol buffers that use a
+pointer to represent an optional value, as it enables an optional
+field to be populated in a simple expression, for example:
+
+```
+import "encoding/json"
+
+type Person struct {
+ Name string `json:"name"`
+ Age *int `json:"age"` // age if known; nil otherwise
+}
+
+func personJSON(name string, born time.Time) ([]byte, error) {
+ return json.Marshal(Person{
+ Name: name,
+ Age: new(yearsSince(born)),
+ })
+}
+
+func yearsSince(t time.Time) int {
+ return int(time.Since(t).Hours() / (365.25 * 24)) // approximately
+}
+```
+
+## Tools {#tools}
+
+### Go command {#go-command}
+
+<!-- go.dev/issue/74667 -->
+`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.
+
+<!-- go.dev/issue/75432 -->
+The `go fix` command, following the pattern of `go vet` in Go 1.10,
+now uses the Go analysis framework (`golang.org/x/tools/go/analysis`).
+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 and replaced by a suite of new analyzers that
+offer fixes to use newer features of the language and library.
+<!-- I'll write a blog post that discusses this at length. --adonovan -->
+
+### Pprof {#pprof}
+
+<!-- go.dev/issue/74774 -->
+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 {#runtime}
+
+### New garbage collector
+
+The 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](/issue/new).
+
+### Faster cgo calls
+
+<!-- CL 646198 -->
+
+The baseline runtime overhead of cgo calls has been reduced by ~30%.
+
+## Compiler {#compiler}
+
+<!-- CLs 707755, 722440 -->
+
+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](https://pkg.go.dev/golang.org/x/tools/cmd/bisect) 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`.
+
+## Linker {#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.
+
+## Bootstrap {#bootstrap}
+
+<!-- go.dev/issue/69315 -->
+As mentioned in the [Go 1.24 release notes](/doc/go1.24#bootstrap), 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 {#library}
+
+### New secret package
+
+<!-- https://go.dev/issue/21865 --->
+
+The new [secret](/pkg/runtime/secret) package is available as an experiment.
+It provides a facility for securely erasing temporaries used in
+code that manipulates secret information, typically cryptographic in nature.
+Users can access it by passing `GOEXPERIMENT=runtimesecret` at build time.
+
+<!-- if we land any code that uses runtimesecret for forward secrecy
+like crypto/tls, mention them here too -->
+
+The secret.Do function runs its function argument and then erases all
+temporary storage (registers, stack, new heap allocations) used by
+that function argument. Heap storage is not erased until that storage
+is deemed unreachable by the garbage collector, which might take some
+time after secret.Do completes.
+
+This package is intended to make it easier to ensure [forward
+secrecy](https://en.wikipedia.org/wiki/Forward_secrecy).
+
+### crypto/hpke
+
+The new [`crypto/hpke`](/pkg/crypto/hpke) package implements Hybrid Public Key Encryption
+(HPKE) as specified in [RFC 9180](https://rfc-editor.org/rfc/rfc9180.html), including support for post-quantum
+hybrid KEMs.
+
+### Minor changes to the library {#minor_library_changes}
+
+#### [`bytes`](/pkg/bytes/)
+
+The new [`Buffer.Peek`](/pkg/bytes#Buffer.Peek) method returns the next n bytes from the buffer without
+advancing it.
+
+#### [`crypto`](/pkg/crypto/)
+
+The new [`Encapsulator`](/pkg/crypto#Encapsulator) and [`Decapsulator`](/pkg/crypto#Decapsulator) interfaces allow accepting abstract
+KEM encapsulation or decapsulation keys.
+
+#### [`crypto/dsa`](/pkg/crypto/dsa/)
+
+The random parameter to [`GenerateKey`](/pkg/crypto/dsa#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`](/pkg/testing/cryptotest#SetGlobalRandom) function.
+The new GODEBUG setting `cryptocustomrand=1` temporarily restores the old behavior.
+
+#### [`crypto/ecdh`](/pkg/crypto/ecdh/)
+
+The random parameter to [`Curve.GenerateKey`](/pkg/crypto/ecdh#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`](/pkg/testing/cryptotest#SetGlobalRandom) function.
+The new GODEBUG setting `cryptocustomrand=1` temporarily restores the old behavior.
+
+The new [`KeyExchanger`](/pkg/crypto/ecdh#KeyExchanger) interface, implemented by [`PrivateKey`](/pkg/crypto/ecdh#PrivateKey), makes it possible
+to accept abstract ECDH private keys, e.g. those implemented in hardware.
+
+#### [`crypto/ecdsa`](/pkg/crypto/ecdsa/)
+
+The `big.Int` fields of [`PublicKey`](/pkg/crypto/ecdsa#PublicKey) and [`PrivateKey`](/pkg/crypto/ecdsa#PrivateKey) are now deprecated.
+
+The random parameter to [`GenerateKey`](/pkg/crypto/ecdsa#GenerateKey), [`SignASN1`](/pkg/crypto/ecdsa#SignASN1), [`Sign`](/pkg/crypto/ecdsa#Sign), and [`PrivateKey.Sign`](/pkg/crypto/ecdsa#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`](/pkg/testing/cryptotest#SetGlobalRandom) function.
+The new GODEBUG setting `cryptocustomrand=1` temporarily restores the old behavior.
+
+#### [`crypto/ed25519`](/pkg/crypto/ed25519/)
+
+If the random parameter to [`GenerateKey`](/pkg/crypto/ed25519#GenerateKey) is nil, GenerateKey now always uses a
+secure source of cryptographically random bytes, instead of [`crypto/rand.Reader`](/pkg/crypto/rand#Reader)
+(which could have been overridden). The new GODEBUG setting `cryptocustomrand=1`
+temporarily restores the old behavior.
+
+#### [`crypto/fips140`](/pkg/crypto/fips140/)
+
+The new [`WithoutEnforcement`](/pkg/crypto/fips140#WithoutEnforcement) and [`Enforced`](/pkg/crypto/fips140#Enforced) functions now allow running
+in `GODEBUG=fips140=only` mode while selectively disabling the strict FIPS 140-3 checks.
+
+[`Version`](/pkg/crypto/fips140#Version) returns the resolved FIPS 140-3 Go Cryptographic Module version when building against a frozen module with GOFIPS140.
+
+#### [`crypto/hpke`](/pkg/crypto/hpke/)
+
+<!-- crypto/hpke is documented in its own section. -->
+
+#### [`crypto/mlkem`](/pkg/crypto/mlkem/)
+
+The new [`DecapsulationKey768.Encapsulator`](/pkg/crypto/mlkem#DecapsulationKey768.Encapsulator) and
+[`DecapsulationKey1024.Encapsulator`](/pkg/crypto/mlkem#DecapsulationKey1024.Encapsulator) methods implement the new
+[`crypto.Decapsulator`](/pkg/crypto#Decapsulator) interface.
+
+#### [`crypto/mlkem/mlkemtest`](/pkg/crypto/mlkem/mlkemtest/)
+
+The new [`crypto/mlkem/mlkemtest`](/pkg/crypto/mlkem/mlkemtest) package exposes the [`Encapsulate768`](/pkg/crypto/mlkem/mlkemtest#Encapsulate768) and
+[`Encapsulate1024`](/pkg/crypto/mlkem/mlkemtest#Encapsulate1024) functions which implement derandomized ML-KEM encapsulation,
+for use with known-answer tests.
+
+#### [`crypto/rand`](/pkg/crypto/rand/)
+
+The random parameter to [`Prime`](/pkg/crypto/rand#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`](/pkg/testing/cryptotest#SetGlobalRandom) function.
+The new GODEBUG setting `cryptocustomrand=1` temporarily restores the old behavior.
+
+#### [`crypto/rsa`](/pkg/crypto/rsa/)
+
+The new [`EncryptOAEPWithOptions`](/pkg/crypto/rsa#EncryptOAEPWithOptions) function allows specifying different hash
+functions for OAEP padding and MGF1 mask generation.
+
+The random parameter to [`GenerateKey`](/pkg/crypto/rsa#GenerateKey), [`GenerateMultiPrimeKey`](/pkg/crypto/rsa#GenerateMultiPrimeKey), and [`EncryptPKCS1v15`](/pkg/crypto/rsa#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`](/pkg/testing/cryptotest#SetGlobalRandom) function.
+The new GODEBUG setting `cryptocustomrand=1` temporarily restores the old behavior.
+
+If [`PrivateKey`](/pkg/crypto/rsa#PrivateKey) fields are modified after calling [`PrivateKey.Precompute`](/pkg/crypto/rsa#PrivateKey.Precompute),
+[`PrivateKey.Validate`](/pkg/crypto/rsa#PrivateKey.Validate) now fails.
+
+[`PrivateKey.D`](/pkg/crypto/rsa#PrivateKey.D) is now checked for consistency with precomputed values, even if
+it is not used.
+
+Unsafe PKCS #1 v1.5 encryption padding (implemented by [`EncryptPKCS1v15`](/pkg/crypto/rsa#EncryptPKCS1v15),
+[`DecryptPKCS1v15`](/pkg/crypto/rsa#DecryptPKCS1v15), and [`DecryptPKCS1v15SessionKey`](/pkg/crypto/rsa#DecryptPKCS1v15SessionKey)) is now deprecated.
+
+#### [`crypto/tls`](/pkg/crypto/tls/)
+
+The hybrid [`SecP256r1MLKEM768`](/pkg/crypto/tls#SecP256r1MLKEM768) and [`SecP384r1MLKEM1024`](/pkg/crypto/tls#SecP384r1MLKEM1024) post-quantum key
+exchanges are now enabled by default. They can be disabled by setting
+[`Config.CurvePreferences`](/pkg/crypto/tls#Config.CurvePreferences) or with the `tlssecpmlkem=0` GODEBUG setting.
+
+The new [`ClientHelloInfo.HelloRetryRequest`](/pkg/crypto/tls#ClientHelloInfo.HelloRetryRequest) field indicates if the ClientHello
+was sent in response to a HelloRetryRequest message. The new
+[`ConnectionState.HelloRetryRequest`](/pkg/crypto/tls#ConnectionState.HelloRetryRequest) field indicates if the server
+sent a HelloRetryRequest, or if the client received a HelloRetryRequest,
+depending on connection role.
+
+The [`QUICConn`](/pkg/crypto/tls#QUICConn) type used by QUIC implementations includes new event
+for reporting TLS handshake errors.
+
+If [`Certificate.PrivateKey`](/pkg/crypto/tls#Certificate.PrivateKey) implements [`crypto.MessageSigner`](/pkg/crypto#MessageSigner), its SignMessage
+method is used instead of Sign in TLS 1.2 and later.
+
+The following GODEBUG settings introduced in [Go 1.22](/doc/godebug#go-122)
+and [Go 1.23](/doc/godebug#go-123) 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.
+
+- `tlsunsafeekm`: [`ConnectionState.ExportKeyingMaterial`](/pkg/crypto/tls#ConnectionState.ExportKeyingMaterial) will require TLS 1.3 or Extended Master Secret.
+- `tlsrsakex`: legacy RSA-only key exchanges without ECDH won't be enabled by default.
+- `tls10server`: the default minimum TLS version for both clients and servers will be TLS 1.2.
+- `tls3des`: the default cipher suites will not include 3DES.
+- `x509keypairleaf`: [`X509KeyPair`](/pkg/crypto/tls#X509KeyPair) and [`LoadX509KeyPair`](/pkg/crypto/tls#LoadX509KeyPair) will always populate the [`Certificate.Leaf`](/pkg/crypto/tls#Certificate.Leaf) field.
+
+#### [`crypto/x509`](/pkg/crypto/x509/)
+
+The [`ExtKeyUsage`](/pkg/crypto/x509#ExtKeyUsage) and [`KeyUsage`](/pkg/crypto/x509#KeyUsage) types now have String methods that return the
+correspodning OID names as defined in RFC 5280 and other registries.
+
+The [`ExtKeyUsage`](/pkg/crypto/x509#ExtKeyUsage) type now has an OID method that returns the corresponding OID for the EKU.
+
+The new [`OIDFromASN1OID`](/pkg/crypto/x509#OIDFromASN1OID) function allows converting an [`encoding/asn1.ObjectIdentifier`](/pkg/encoding/asn1#ObjectIdentifier) into
+an [`OID`](/pkg/crypto/x509#OID).
+
+#### [`database/sql/driver`](/pkg/database/sql/driver/)
+
+A database driver may implement [`RowsColumnScanner`](/pkg/database/sql/driver#RowsColumnScanner) to entirely override `Scan` behavior.
+
+#### [`debug/elf`](/pkg/debug/elf/)
+
+Additional `R_LARCH_*` constants from [LoongArch ELF psABI v20250521](https://github.com/loongson/la-abi-specs/blob/v2.40/laelf.adoc)
+(global version v2.40) are defined for use with LoongArch systems.
+
+#### [`errors`](/pkg/errors/)
+
+The new [`AsType`](/pkg/errors#AsType) function is a generic version of [`As`](/pkg/errors#As). It is type-safe, faster,
+and, in most cases, easier to use.
+
+#### [`go/ast`](/pkg/go/ast/)
+
+The new [`ParseDirective`](/pkg/go/ast#ParseDirective) function parses [directive
+comments](/doc/comment#Syntax), 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.
+
+The new [`BasicLit.ValueEnd`](/pkg/go/ast#BasicLit.ValueEnd) field records the precise end position of
+a literal so that the [`BasicLit.End`](/pkg/go/ast#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.)
+
+Programs that update the `ValuePos` field of `BasicLit`s produced by
+the parser may need to also update or clear the `ValueEnd` field to
+avoid minor differences in formatted output. <!-- #76395 --->
+
+#### [`go/token`](/pkg/go/token/)
+
+The new [`File.End`](/pkg/go/token#File.End) convenience method returns the file's end position.
+
+#### [`go/types`](/pkg/go/types/)
+
+The `asynctimerchan` GODEBUG setting introduced in [Go 1.23](/doc/godebug#go-123)
+will be removed in the next major Go release.
+Starting in Go 1.27, the [time](/pkg/time) package will always use unbuffered
+(synchronous) channels for timers regardless of GODEBUG setting or go.mod language version.
+
+#### [`image/jpeg`](/pkg/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.
+
+#### [`log/slog`](/pkg/log/slog/)
+
+The [`NewMultiHandler`](/pkg/log/slog#NewMultiHandler) function creates a
+[`MultiHandler`](/pkg/log/slog#MultiHandler) that invokes all the given Handlers.
+Its `Enable` method reports whether any of the handlers' `Enabled` methods
+return true.
+Its `Handle`, `WithAttr` and `WithGroup` methods call the corresponding method
+on each of the enabled handlers.
+
+#### [`net`](/pkg/net/)
+
+The new <code>Dialer</code> methods
+<a href="/pkg/net/#Dialer.DialIP"><code>DialIP</code></a>,
+<a href="/pkg/net/#Dialer.DialTCP"><code>DialTCP</code></a>,
+<a href="/pkg/net/#Dialer.DialUDP"><code>DialUDP</code></a>, and
+<a href="/pkg/net/#Dialer.DialUnix"><code>DialUnix</code></a>
+permit dialing specific network types with context values.
+
+#### [`net/http`](/pkg/net/http/)
+
+The new
+[HTTP2Config.StrictMaxConcurrentRequests](/pkg/net/http#HTTP2Config.StrictMaxConcurrentRequests)
+field controls whether a new connection should be opened
+if an existing HTTP/2 connection has exceeded its stream limit.
+
+The new [`Transport.NewClientConn`](/pkg/net/http#Transport.NewClientConn) method returns a client connection
+to an HTTP server.
+Most users should continue to use [`Transport.RoundTrip`](/pkg/net/http#Transport.RoundTrip) to make requests,
+which manages a pool of connection.
+`NewClientConn` is useful for users who need to implement their own conection management.
+
+#### [`net/http/httptest`](/pkg/net/http/httptest/)
+
+The HTTP client returned by [`Server.Client`](/pkg/net/http/httptest#Server.Client) will now redirect requests for
+`example.com` and any subdomains to the server being tested.
+
+#### [`net/http/httputil`](/pkg/net/http/httputil/)
+
+The [`ReverseProxy.Director`](/pkg/net/http/httputil#ReverseProxy.Director) configuration field is deprecated
+in favor of [`ReverseProxy.Rewrite`](/pkg/net/http/httputil#ReverseProxy.Rewrite).
+
+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`](/pkg/net/netip/)
+
+The new [`Prefix.Compare`](/pkg/net/netip#Prefix.Compare) method compares two prefixes.
+
+#### [`net/url`](/pkg/net/url/)
+
+[`Parse`](/pkg/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=urlstrictcolons=0 setting restores the old behavior.
+
+#### [`os`](/pkg/os/)
+
+The new [`Process.WithHandle`](/pkg/os#Process.WithHandle) method provides access to an internal process
+handle on supported platforms (Linux 5.4 or later and Windows). On Linux,
+the process handle is a pidfd. The method returns [`ErrNoHandle`](/pkg/os#ErrNoHandle) on unsupported
+platforms or when no process handle is available.
+
+On Windows, the [`OpenFile`](/pkg/os#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`](/pkg/os/signal/)
+
+[`NotifyContext`](/pkg/os/signal#NotifyContext) now cancels the returned context with [`context.CancelCauseFunc`](/pkg/context#CancelCauseFunc)
+and an error indicating which signal was received.
+
+#### [`reflect`](/pkg/reflect/)
+
+[`reflect.Type`](/pkg/reflect#Type) includes new methods that return iterators for a type's fields, methods, inputs and outputs.
+Similarly, [`reflect.Value`](/pkg/reflect#Value) includes two new methods that return iterators over a value's fields or methods,
+each element being a pair of the value ([`reflect.Value`](/pkg/reflect#Value)) and its type information ([`reflect.StructField`](/pkg/reflect#StructField) or
+[`reflect.Method`](/pkg/reflect#Method)).
+
+#### [`runtime/metrics`](/pkg/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`](/pkg/testing/)
+
+The new methods [`T.ArtifactDir`](/pkg/testing#T.ArtifactDir), [`B.ArtifactDir`](/pkg/testing#B.ArtifactDir), and [`F.ArtifactDir`](/pkg/testing#F.ArtifactDir)
+return a directory in which to write test output files (artifacts).
+
+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.
+
+The first call to `ArtifactDir` when `-artifacts` is provided
+writes the location of the directory to the test log.
+
+For example, in a test named `TestArtifacts`,
+`t.ArtifactDir()` emits:
+
+```
+=== ARTIFACTS Test /path/to/artifact/dir
+```
+
+#### [`testing/cryptotest`](/pkg/testing/cryptotest/)
+
+The new [`SetGlobalRandom`](/pkg/testing/cryptotest#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`](/pkg/time/)
+
+The `gotypesalias` GODEBUG setting introduced in [Go 1.22](/doc/godebug#go-122)
+will be removed in the next major Go release.
+Starting in Go 1.27, the [go/types](/pkg/go/types) package will always produce an
+[Alias type](/pkg/go/types#Alias) for the representation of [type aliases](/ref/spec#Type_declarations)
+regardless of GODEBUG setting or go.mod language version.
+
+## Ports {#ports}
+
+### Darwin
+
+<!-- go.dev/issue/75836 -->
+
+Go 1.26 is the last release that will run on macOS 12 Monterey. Go 1.27 will require macOS 13 Ventura or later.
+
+### FreeBSD
+
+<!-- go.dev/issue/76475 -->
+
+The freebsd/riscv64 port (`GOOS=freebsd GOARCH=riscv64`) has been marked broken.
+See [issue 76475](/issue/76475) for details.
+
+### Windows
+
+<!-- go.dev/issue/71671 -->
+
+As [announced](/doc/go1.25#windows) in the Go 1.25 release notes, the [broken](/doc/go1.24#windows) 32-bit windows/arm port (`GOOS=windows` `GOARCH=arm`) is removed.
+
+[laelf-20250521]: https://github.com/loongson/la-abi-specs/blob/v2.40/laelf.adoc
+[rfc 9180]: https://rfc-editor.org/rfc/rfc9180.html