Roadmap
===

The roadmap for development of GLib in upcoming releases is tracked in GitLab,
using its [milestones feature](https://gitlab.gnome.org/GNOME/glib/-/milestones).
Look on the upcoming milestones to see what features and fixes are planned for
each release.

An issue being assigned to a milestone is no guarantee that it will actually be
fixed in time for that milestone. Milestones are a rough prioritisation system
for work, but GLib is a volunteer project with no fixed resources, so no
guarantees can be given.

All releases are time-based rather than feature-based, as the development and
stable branches of GLib should always be in a releasable state. Sometimes, at
the discretion of the maintainers, a release may be held for a week or so in
order to allow a particular merge request to land so that it can be made
available to distributions or testers more rapidly.

When [making a release](./releasing.md), all remaining issues and merge requests
allocated to the milestone for that release should be fixed (potentially
delaying the release), or rescheduled to a different release, based on the
maintainers’ assessment.

Unstable release planning
---

At the start of a development cycle, milestones are created for each release in
the cycle according to the [GNOME release
schedule](https://wiki.gnome.org/Schedule). GLib roughly follows the GNOME
release schedule, but makes its releases one or two weeks ahead of each
corresponding GNOME release. This allows other GNOME modules to depend on the
correct GLib version for new APIs. GLib does not follow the GNOME module
versioning scheme.

As the milestones are created, maintainers will assign issues to them, based on
what they think is possible to achieve for each milestone given the amount of
developer time available before the release.

Issues affecting a lot of users (such as common crashes), and new features which
maintainers think will have a wide benefit are prioritised.

As a development cycle progresses, some of the releases are timed to coincide
with [GNOME’s API/feature, string and hard code
freezes](https://wiki.gnome.org/ReleasePlanning/Freezes). Issues which add API
and features are scheduled for the earlier micro releases in a development
cycle, followed by issues which add or change translatable strings, followed by
smaller bug fixes, documentation and unit test updates.

Stable release planning
---

Stable micro releases are scheduled at a cadence picked by maintainers,
depending on the rate at which bugs are being found in that stable branch. More
bugs leads to a more frequent release cadence.

Historically, the rate of releases on each stable branch has decreased inversely
proportionally to the time since the initial release of that branch.

There is no limit on the number of micro releases in a stable release series.
Typically there will be around 6. Micro releases stop once there are no more
bugs found in a stable series, or once a new stable series supercedes it.

The milestone for the next micro release in a stable series is created when the
previous micro release is made, such that only one stable micro release is
scheduled at any time.
