Skip to content

Document what version numbers mean #1610

Open
@Rangi42

Description

RGBDS version numbers take the form major.minor.patch. The major version has always been 0, and we haven't been strict about what counts as a "major" versus a "patch" release, because we haven't had criteria to be strict about. (Although we've usually adhered to "introduce deprecations and removals in non-patch releases.") Once we reach version 1.0.0, we should set some standards for what subsequent releases will mean.

The obvious candidate that many people have suggested (or already expected) is semantic versioning ("semver"). Major versions are for breaking changes; minor versions are for non-breaking new features; patch versions are for non-breaking bug fixes.

One difficulty with applying semver to RGBDS is that "breakage" is relative. If we add a new FOOBAR() function, any assembly code that uses foobar as a symbol name will need changing. However, we could decide this sort of thing ("what counts as major backwards incompatibility") on a case-by-case basis.

Another versioning alternative is date-based: an October 31st, 2025 release would be versioned 25.10.31. We probably don't want to jump straight to major version 25, but the major version could just start from something else instead, like web browsers whose versions keep ticking up every N months. (E.g. if we release version 1 in 2025, then the first release in 2026 would be 2.mm.dd.)

A less serious but still common approach is "pride versioning". A big release you're proud of gets a major version (even if it's just something like an internal rewrite/optimization or a cool new feature that doesn't break anything); a "normal" release gets a minor one (even if it technically breaks something, like when we removed jp [hl]); and "embarrassing" bugfixes get a patch. This is closest to what we've already been doing in practice.

"RGBDS isn't semver" (and the rejoinder "RGBDS is still 0ver") frequently crop up in Discord discourse, so setting an official versioning policy would hopefully settle those.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    metaThis isn't related to the tools directly: repo organization, maintainership...

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions