The presentation discusses the challenges of package and dependency management in software development and proposes solutions such as using package URLs and a universal versioning system.
The complexity of package and dependency management in software development makes it difficult to express boundaries between dependencies and automate the process.
Solutions proposed include providing installation prerequisites, using a single package manager, and using general-purpose package managers such as Spack, Conda, Nix, and Guix.
Package URLs can be used to name packages and a universal versioning system can be used to deal with version ranges.
The universal versioning system can accommodate different versioning schemes and express version ranges in a universal way.
The talk explains the lifecycle of Custom Resource Definitions (CRDs) and the challenges of versioning them. It provides insights on how to upgrade CRDs seamlessly, with zero downtime and backwards compatibility.
CRDs are used to extend Kubernetes and as projects grow, the definitions of the resource start to evolve and may completely change, requiring versioning of CRDs
Versioning of CRDs can be tough as end users need to be provided with seamless upgrades, zero downtime and backwards compatibility
There are two views of CRD versioning: server version and stored version
There are two conversion strategies: last mile change and full conversion
The conversion package simplifies conversion functions between API versions
The storage version migrator component bumps up existing objects to the new desired storage version
Lossless conversion is followed where users can roll back to the older version
Annotations of the field of the CR are used to store functions which lose data between versions