add generics policy draft

as discussed in the last SIG Architecture meeting
This commit is contained in:
Benjamin Elder 2022-06-07 14:06:13 -07:00
parent 8465376fb0
commit 66d09b8a37
1 changed files with 38 additions and 0 deletions

View File

@ -0,0 +1,38 @@
# Background
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.
This includes all of the staging libraries (client-go etc.) that originate in the
main [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) repository.
In Kubernetes v1.24 we shipped Go 1.18 (which adds support for generics)
rather late in the release cycle, so we temporarily prohibited using generics
in case we ran into other issues and needed to roll back to unblock the release.
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 should **not** be used in Kubernetes libraries used across multiple Kubernetes
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.
These restrictions should be considered lifted when v1.24 is out of support.
## Recommendations for Reviewers
- Consider if proposed generics pull requests improve maintainability and readability.
- The current generics implementation is known to have some performance issues
depending on usage: consider requesting benchmarks before / after the changes.
[version-support]: https://kubernetes.io/releases/patch-releases/#support-period