I try to develop my libraries to be as backward compatible (BC) as possible. This file describes my backward compatibility promise, along with:
Further restrictions (and/or allowances) might be added in the future.
Document Information | |
---|---|
Effective Date | 04/22/2024 |
Last Updated | 04/22/2024 |
Version | 1.0.0 |
This project follows Semantic Versioning (<major>.<minor>.<patch>
). In general, this means that the version number is incremented based on the type of changes made:
Any backward-incompatible changes will only occur in a new major version. Users should expect to update their code to accommodate these changes.
Minor versions may include new features and improvements but will maintain backward compatibility with previous minor versions within the same major release.
Patch versions will only include backward-compatible bug fixes. Users can safely update without fear of breaking changes.
There are some exceptions which are not covered by the backward compatibility promise.
Backward compatibility can be ignored in security bug fixes or critical bugs. In this case, all the incompatible changes are described in the CHANGELOG.
They are meant for internal use only and should not be accessed by your own code. They are subject to change or removal even in minor or patch versions.
*-dev*
branch is not covered by this backward compatibility promise.
dev
branch.[Unreleased]
in the CHANGELOG.md
.See Branches for more information.
Named arguments are not covered by the backward compatibility (BC) promise. I may choose to rename method/function parameter names when necessary in order to improve the codebase.
Tags in this project’s Git repository are immutable. I do not change published tags to point to a different revision, for example.
In very rare cases I may delete a tag in order to remove a broken release. The new release that fixes what was broken will always have a different tag than the one that was removed.
Branches in this project’s Git repository are private implementation details. For example, I delete branches for versions of Utility that are no longer supported. In general:
master
branch will contain the currently released major version (and <minor>
or <patch>
versions that fall under it).<major>.x
branch.Next
or development code of a new major version will be under a <major>.x-dev
branch.For example, let’s say the latest released version of this project is 3.0.0, the last major version is 2, and the next major version is 4.
master
branch will be all version 3 code, which includes: 3.0.1, 3.1.0, 3.2.0, etc.2.x
(which includes: 2.0.1, 2.1.0, 2.2.0, etc.).Next
or development code for a new major version, version 4, will be in 4.x-dev
.
master
and the 4.x-dev
branch will be deleted.3.x
I will keep the backward compatibility promise updated as this project evolves and new use cases emerge. The last updated date and version of this document under Document Information
at the beginning of this file will be updated if any changes are made.
This backward compatibility promise was highly inspired by, and borrows from, the BC promises of: