add generics policy draft
as discussed in the last SIG Architecture meeting
This commit is contained in:
parent
8465376fb0
commit
66d09b8a37
|
@ -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
|
Loading…
Reference in New Issue