Adjust guidance on generics to include v1.24

Kubernetes v1.24 is built on Go 1.18, and will not revert to Go 1.17 at
this point.  Ergo, it should be allowed to use Go generics as soon as
1.24 is the oldest supported release.
This commit is contained in:
Tim Hockin 2022-11-09 15:12:11 -08:00
parent 3c8b003cf8
commit a86bc7f6fd
No known key found for this signature in database
1 changed files with 9 additions and 7 deletions

View File

@ -1,9 +1,9 @@
# Background
In general, Kubernetes has not restricted using new Go features, we've quickly
In general, Kubernetes has not restricted using new Go features. We've quickly
adopted new standard library types and methods and will continue to do so.
Generally the latest stable go release is in use on the main development branch.
Generally the latest stable Go release is in use on the main development branch.
This includes all of the staging libraries (client-go etc.) that originate in the
main [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) repository.
@ -14,19 +14,21 @@ Now that v1.24.0 is out, use of generics should be allowed.
# Generics Policy
Generics may be used in Kubernetes starting in v1.25, with the following restrictions
applying only until v1.24 is [out of support][version-support]:
Generics may be used in Kubernetes starting in v1.24, with the following restrictions
applying only until v1.23 is [out of support][version-support]:
- Generics should **not** be used in Kubernetes libraries used across multiple Kubernetes
versions, that is the non "staged" libraries like:
versions, that is the non "staged" libraries like:
- [k8s.io/utils](https://github.com/kubernetes/utils)
- [sigs.k8s.io/yaml](https://github.com/kubernetes-sigs/yaml)
- [k8s.io/klog](https://github.com/kubernetes/klog)
- etc.
- Generics should be **avoided** when writing Kubernetes bug fixes that are likely to be backported, to streamline cherry-picking to older release branches.
- Generics should be **avoided** when writing Kubernetes bug fixes that are
likely to be backported to v1.23 or older, to streamline cherry-picking to
those release branches which predate Go 1.18.
These restrictions should be considered lifted when v1.24 is out of support.
These restrictions should be considered lifted when v1.23 is out of support.
## Recommendations for Reviewers